![如何在Linux中使用SMTP服务器发送邮件而不出错](https://linux22.com/image/133786/%E5%A6%82%E4%BD%95%E5%9C%A8Linux%E4%B8%AD%E4%BD%BF%E7%94%A8SMTP%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%8F%91%E9%80%81%E9%82%AE%E4%BB%B6%E8%80%8C%E4%B8%8D%E5%87%BA%E9%94%99.png)
我正在尝试通过 SMTP 服务器发送邮件。并设置/etc/mail.rc
文件:
set bsdcompat
set smtp=smtps://smtp.gmail.com:465
set smtp-auth=login
set [email protected]
set smtp-auth-password=password
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
现在我可以发送邮件,但收到如下错误:
Error in certificate: Peer's certificate issuer is not recognized.
我的 nssdb 中存在以下条目:
certutil -L -d /etc/pki/nssdb
Certificate Nickname Trust Attributes
SSL,S/MIME,JAR/XPI
有人可以建议我解决这个问题吗?我用谷歌搜索过,但没有得到正确的解决方案。
答案1
根据你的certutil -L -d /etc/pki/nssdb
输出,你的 nssdb 是空的!
您openssl s_client -showcerts -connect smtp.gmail.com:465 </dev/null
可以转储邮件服务器证书及其可能提供的任何颁发者证书的公共部分。输出会很长,但首先您应该注意以下几行:
Server certificate
subject=/C=US/ST=California/L=Mountain View/O=Google LLC/CN=smtp.gmail.com
issuer=/C=US/O=Google Trust Services/CN=Google Internet Authority G3
和
Certificate chain
0 s:/C=US/ST=California/L=Mountain View/O=Google LLC/CN=smtp.gmail.com
i:/C=US/O=Google Trust Services/CN=Google Internet Authority G3
[...]
1 s:/C=US/O=Google Trust Services/CN=Google Internet Authority G3
i:/OU=GlobalSign Root CA - R2/O=GlobalSign/CN=GlobalSign
因此,服务器(如果服务器证书部分和该部分中的subject=
证书,则为),其证书是由“Google Internet Authority G3”颁发的。反过来,它又从 获得了证书。0
Certificate chain
smtp.gmail.com
GlobalSign Root CA - R2
在 Google 上快速搜索关键字“globalsign root ca R2”表明这是一个相当旧的证书,将于 2021 年到期。如果您信任它,可以下载它这里...但是从网络浏览器的内置标准证书存储中导出“Google Internet Authority G3”证书的副本可能是一个更好的主意。
无论您选择哪个证书,一旦将其放入文件中,您就可以使用certutil -A -d /etc/pki/nssdb -i <certificate file>
. (如果证书以PEM格式导出,您可能需要添加该-a
选项。)
答案2
您的本地系统似乎缺少证书。结束了服务器故障是同一问题的答案。