mailx发送邮件提示升级TLS1.2

各位,请教个问题,我有一台zabbix服务器,告警邮件是mailx做的,邮箱是o365的 587端口 ,由于o365要禁止TLS1.0和1.1 ,现在发告警邮件有时候会发不出去,通常发送3-5条邮件就会出现一次发不出去,请问我该怎么设置成tls1.2 ,openssl已经升级到1.1.1。

报错如下:

smtp-server: 421 4.7.66 TLS 1.0 and 1.1 are not supported. Please upgrade/update your client to support TLS 1.2. Visit https://aka.ms/smtp_auth_tls. [ZQ0PR01CA0013.CHNPR01.prod.partner.outlook.cn 2023-03-24T08:47:58.778Z 08DB2BB55D605A6B]

/etc/mail.rc 设置如下:

img

要设置TLS 1.2,你需要使用openssl生成新的客户端证书,并将其安装到zabbix服务器上。以下是一些步骤:
 
生成证书
使用以下命令生成证书:

openssl req -new -newkey rsa:4096 -nodes -keyout zabbix.key -out zabbix.csr

这将生成一个4096位RSA密钥对和一个证书签名请求(CSR)文件。
 
2. 提交CSR
将生成的CSR文件提交给证书颁发机构(CA)以获得证书。你需要向CA提供一些信息,如公司名称、网站名称、邮件地址等。
 
3. 安装证书
一旦你获得了证书,就可以将其安装到zabbix服务器上。将证书和私钥放在同一个文件中,并将其命名为zabbix.pem。
然后在mail.rc文件中使用以下命令来指定证书文件和TLS版本:

set ssl-verify=ignore
set smtp-use-starttls
set smtp-tls=openssl
set smtp-auth=login
set smtp-auth-user=zabbix@******.com.cn
set smtp-auth-password=********
set smtp=smtp.partner.outlook.cn:587
set from=zabbix@******.com.cn
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
set ssl-version=tlsv1.2
set ssl-verify=ignore
set smtp-cert-file=/path/to/zabbix.pem
set smtp-key-file=/path/to/zabbix.pem

在这个示例中,将TLS版本设置为1.2,并指定了证书和私钥文件的路径。
你需要将上面的路径替换为你实际的证书和私钥文件的路径。
 
4. 测试
完成以上步骤后,你可以测试一下邮件是否能够正常发送。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/772126
  • 这篇博客你也可以参考下:基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。 根据验证过程,远程证书无效---------------解决方法
  • 这篇博客也不错, 你可以看下基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。 根据验证过程,远程证书无效---------------解决方法
  • 除此之外, 这篇博客: 一文读懂 HTTPS 与 TLS证书链校验中的 3.2.1、证书可信性 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    校验证书是否可信:
    校验证书是否是由受信任的CA根证书颁发机构颁发。

    为了确保客户端获取到的服务端公钥不被篡改,需引入权威的第三方CA机构。
    CA机构负责核实公钥拥有者信息、颁发证书(对服务端公钥进行签名)、同时为使用者提供证书验证服务。

    CA机构签发公钥与客户端验证

    CA机构 颁发证书的基本原理:

    • 服务端生成一对公钥私钥
    • 服务端将自己的公钥提供给CA机构
    • CA机构核实服务端公钥拥有者信息:
      核实申请者提供信息的真实性:如组织是否存在、企业是否合法、是否拥有域名的所有权等。
    • CA机构签发证书:
      CA机构 计算 服务器公钥摘要信息,然后利用CA机构私钥(CA机构有一对公钥、私钥)加密摘要信息,生成数字签名
      加密后的包含数字签名信息的服务端公钥CA机构颁发的数字证书

    客户端 验证服务端公钥的基本原理为:

    • 客户端获取到服务端的公钥
      Https请求 TLS握手过程中,服务器公钥会下发到请求的客户端。
    • 客户端用存储在本地的CA机构的公钥,对 服务端公钥中对应的数字签名进行解密,获取到服务端公钥摘要信息A
    • 客户端根据对服务端公钥进行摘要计算,得到摘要信息B
    • 对比摘要信息A与B,相同则证书验证通过;

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

没有解决,我没有申请证书,没法验证你们的答案。我换了告警邮箱,换成自建的了。