PHP imap_open(),OpenSSL,并且没有密码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP imap_open(),OpenSSL,并且没有密码相关的知识,希望对你有一定的参考价值。
我已将php脚本移动到另一台服务器,但是现在无法登录到IMAP(TLS)邮箱:
TLS/SSL failure for mail.servername.de: SSL negotiation failed
似乎问题是由OpenSSL引起的,因为当我尝试从两个服务器连接到Mailserver时,在一种情况下(我的邮件服务器要求输入),我得到了一个连接,而在另一种情况下却得到了一个连接(关闭了连接。 ,我回到bash
):
openssl s_client -crlf -connect mail.servername.de:993
最明显的区别是在这里:
verify return:1
---
<snip>
-----END CERTIFICATE-----
subject=/CN=mail.servername.de
issuer=/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
---
No client certificate CA names sent
Peer signing digest: SHA512
Server Temp Key: DH, 1024 bits
---
SSL handshake has read 3398 bytes and written 483 bytes
Verification: OK
---
New, TLSv1.2, Cipher is DHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
和其他服务器(未建立连接)
verify return:1
depth=0 CN = mail.servername.de
verify return:1
140410888582464:error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small:../ssl/statem/statem_clnt.c:2149:
---
<snip>
-----END CERTIFICATE-----
subject=CN = mail.servername.de
issuer=C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
---
No client certificate CA names sent
---
SSL handshake has read 3167 bytes and written 318 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Server public key is 2048 bit
在邮件服务器上,dovecot
配置为不接受未加密的连接。但是,我认为由于dh key too small
它已经失败,这似乎与密码协商有关。
现在我简直无法将所有内容放在一起...为什么SSL连接可以从一台服务器工作,而不能从另一台服务器工作?
TL; DR:您的新主机具有更新的OpenSSL版本,可能具有更高的安全性设置,出于以下原因,该安全设置禁止连接到主机。
“ dh密钥太小”来自OpenSSL,并且由于安全性太低。
情况发生了变化,例如在最新的Debian版本中以及OpenSSL 1.1.1(我想它与较新的版本相似,安全性得到了增强。
我发现的最好,最简单的解释是在https://wiki.debian.org/ContinuousIntegration/TriagingTips/openssl-1.1.1的Debian Wiki上它说:
在Debian中,默认情况下默认设置为更安全的值。这个是在/etc/ssl/openssl.cnf配置文件中完成的。在末尾文件有:
[system_default_sect] MinProtocol = TLSv1.2 CipherString = DEFAULT@SECLEVEL=2
这可能会导致错误,例如:
dh key too small ee key too small ca md too weak
现在按优先级从高到低排列可能的解决方案:
- 要求远程端生成更好的“ DH”值(“服务器临时密钥:DH,1024位”);最好的解释是在https://weakdh.org/sysadmin.html;请特别注意“管理员应使用具有“安全”素数的2048位或更高的Diffie-Hellman组。”
- 为此连接专门配置端,以不使用操作系统默认值并降低设置;在进行连接的代码中将密码设置为“ DEFAULT @ SECLEVEL = 1”就足够了
- (真的,真的,真的不推荐)在您的全局配置文件中将
SECLEVEL
的值从2更改为1。但是,这不仅影响主机的所有连接,还因为来自一个远程节点的安全级别较低而降低了系统的全局安全性。
由于我自己拥有“远程终端”,因此我能够提高安全性。该解决方案很简单,并且可能对其他人也有帮助...
dovecot
版本为2.2.x,这与DH参数有关(请参见Dovecot SSL configuration)。在配置文件/etc/dovecot/conf.d/10-ssl.conf
中,您可以简单地添加以下行:
ssl_dh_parameters_length = 2048
最后,可能有必要在此处将其最后添加到主配置文件/etc/dovecot/dovecot.conf
:
!include conf.d/*.conf
最后,重要的是不要重新加载,而是重新启动dovecot。
systemctl restart dovecot
突然之间,数小时的沉重,麻烦和沮丧消失了。很棒...
以上是关于PHP imap_open(),OpenSSL,并且没有密码的主要内容,如果未能解决你的问题,请参考以下文章
已安装 PHP IMAP 但出现“未定义的函数 imap_open()”错误