使用PHPMailer连接Office365发邮件时遇SSL签名错误求助
PHPMailer连接Office365出现SSL签名错误的排查方案
错误信息
2022-11-28 11:29:32 Connection failed. Error #2: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:error:04091068:rsa routines:INT_RSA_VERIFY:bad signatureerror:1408D07B:SSL routines:ssl3_get_key_exchange:bad signature [C:\Apache24\htdocs\cursoCompletoPHP7\aula87\vendor\phpmailer\phpmailer\src\SMTP.php line 470] SMTP Error: Could not connect to SMTP host. Connection failed. stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:error:04091068:rsa routines:INT_RSA_VERIFY:bad signatureerror:1408D07B:SSL routines:ssl3_get_key_exchange:bad signature
可能的原因及解决方法
OpenSSL版本不兼容
Office365可能更新了SSL/TLS加密套件要求,生产服务器的旧版本OpenSSL不支持新的签名算法(如SHA-256及以上),导致签名验证失败。
解决:升级生产服务器的OpenSSL到最新稳定版,验证是否支持符合Office365要求的加密算法。生产网络的SSL拦截设备干扰
生产环境中的防火墙、代理或安全网关可能开启了SSL中间人拦截,生成的证书签名不符合Office365的校验标准,触发错误。
解决:检查网络安全设备配置,临时关闭SSL拦截功能测试;或把Office365的SMTP服务器(smtp.office365.com)加入设备信任白名单,绕过拦截。Office365 SMTP政策变更
微软近期可能调整了Office365的SMTP服务配置,禁用了旧的加密套件或签名规则,而生产环境的PHPMailer/PHP组合未适配新规则。
解决:- 确认PHPMailer配置:使用端口587,加密方式设置为
STARTTLS(而非SSL); - 更新PHPMailer到最新版本,确保兼容Office365的最新SMTP政策。
- 确认PHPMailer配置:使用端口587,加密方式设置为
生产服务器系统时间偏差
SSL证书验证依赖准确的系统时间,若服务器时间与实际时间偏差过大(超出证书有效期范围),会导致签名校验失败。
解决:将生产服务器时间同步到公共NTP服务器,确保时间准确。
内容的提问来源于stack exchange,提问作者enaelkirsch
相关产品推荐
相关产品推荐

