PHP imap_open(),OpenSSL,并且没有密码

问题描述 投票:0回答:2

我已将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连接可以从一台服务器工作,而不能从另一台服务器工作?

email ubuntu ssl tls1.2 dovecot
2个回答
1
投票

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。但是,这不仅影响主机的所有连接,还因为来自一个远程节点的安全级别较低而降低了系统的全局安全性。

0
投票

由于我自己拥有“远程终端”,因此我能够提高安全性。该解决方案很简单,并且可能对其他人也有帮助...

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

突然之间,数小时的沉重,麻烦和沮丧消失了。很棒...

© www.soinside.com 2019 - 2024. All rights reserved.