2

我在这里很新,但我想与大家分享我的问题并找到解决方案。
也许这可以帮助某人并节省时间。
我选择了 stackoverflow,因为我经常在这里找到解决问题的方法。

问题:fetchmail 提示 imap.gmail.com 证书的一些警告,并且可能不再获取我的邮件

起点是一些 fetchmail 警告,如下所示

fetchmail: Fehler bei Server-Zertifikat-Überprüfung: self signed certificate
fetchmail: Fehlendes Zertifikat als Vertrauensquelle: /OU=No SNI provided; please fix your client./CN=invalid2.invalid
fetchmail: Das kann bedeuten, dass das Wurzelzertifikat nicht unter den vertrauenswürdigen CA-Zertifikaten ist, oder dass c_rehash auf dem Verzeichnis ausgeführt werden muss. Details sind in der fetchmail-Handbuchseite im bei --sslcertpath beschrieben.
fetchmail: Warnung: Die Verbindung ist unsicher, mache trotzdem weiter. (Nehmen Sie lieber --sslcertck!)

经过简短的测试和 .fetchmailrc 配置更改(例如添加)后,sslproto tls1.2我收到了此警告

fetchmail: Fehler bei Server-Zertifikat-Überprüfung: unable to get local issuer certificate
fetchmail: Unterbrochene Zertifizierungskette bei: /OU=GlobalSign Root CA - R2/O=GlobalSign/CN=GlobalSign
fetchmail: Dies kann bedeuten, dass der Server das/die Zertifikat(e) der Zwischenzertifizierungsstellen nicht mitlieferte. Daran kann fetchmail nichts ändern.  Für weitere Information, siehe das mit Fetchmail ausgelieferte Dokument README.SSL-SERVER.
fetchmail: Das kann bedeuten, dass das Wurzelzertifikat nicht unter den vertrauenswürdigen CA-Zertifikaten ist, oder dass c_rehash auf dem Verzeichnis ausgeführt werden muss. Details sind in der fetchmail-Handbuchseite im bei --sslcertpath beschrieben.
fetchmail: Warnung: Die Verbindung ist unsicher, mache trotzdem weiter. (Nehmen Sie lieber --sslcertck!)

现在我已经看到我的本地设备上可能存在一些根 ca 和中间 ca 以及服务器证书问题。
现在你必须现在我运行 debian 拉伸。
是的,它很旧而且有点过时,这可能是问题所在,
我不再调查。因此,我开始对和 google ca 证书
进行更多研究。imap.gmail.com当我运行fetchmail -vfor verbose 命令时,我看到谷歌告诉我,
他们想要进行TLS1.3协议通信。
您还可以通过运行 openssl 连接检查来看到这一点。openssl s_client -showcerts -connect imap.gmail.com:993
所以,我知道 TLS1.2 现在还没有过时,只有在 TLS1.1 之前的所有其他旧协议都被弃用了。
我的 debian stretch fetchmail 也不支持 TLS1.3,这就是为什么我稍后只配置 TLS1.2。

现在我在互联网上搜索了谷歌 pki 证书。所有 Google pki 证书都可以在这里找到Google PKI

现在是我的解决方案。

在我的主目录中创建一个新的 .certs 文件夹

mkdir ~/.certs
mkdir ~/.certs/google
cd ~/.certs/google

通过 openssl connect 获取 imap.gmail.com 证书。

cd ~/.certs
openssl s_client -showcerts -connect imap2.gmail.com:993 -servername imap.gmail.com  </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > imap.gmail.com.pem

通过 wget 下载 google pki 证书

cd ~/.certs/google
wget https://pki.goog/gtsr1/GTSR1.crt
wget https://pki.goog/gtsr2/GTSR2.crt
wget https://pki.goog/gtsr3/GTSR3.crt
wget https://pki.goog/gtsr4/GTSR4.crt
wget https://pki.goog/gsr2/GSR2.crt
wget https://pki.goog/gsr4/GSR4.crt
wget https://pki.goog/gtsr1/gtsy1.crt
wget https://pki.goog/gtsr2/gtsy2.crt
wget https://pki.goog/gtsr3/gtsy3.crt
wget https://pki.goog/gtsr4/gtsy4.crt
wget https://pki.goog/gsr2/GTS1O1.crt
wget https://pki.goog/gsr2/GTS1D2.crt
wget https://pki.goog/gsr2/giag4.crt
wget https://pki.goog/gsr4/giag4ecc.crt
wget https://pki.goog/digicert/GoogleCA1.crt
wget https://pki.goog/digicert/GTSCA1D3.crt

然后将所有 *.crt 转换为 *.pem 格式并复制到 certs 目录

for i in *.crt; do openssl x509 -inform DER -in $i -text </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > $i.pem ; done

for i in *.pem; do cp $i ~/.certs/. ; done

Afterwords 运行 openssl 的 c_rehash 以将其用于 fetchmail

c_rehash .
nano .fetchmailrc

像这样在 ~/.fetchmailrc 配置中插入以下行是ssl,sslcertpathsslproto行重要的更改。

poll imap.gmail.com
  protocol IMAP
  user 'xxxx'
  is username
  pass 'xxxxx'
  folder INBOX
  ssl
  sslcertpath /home/<username>/.certs/
  sslproto tls1.2
  mda '/usr/bin/procmail -f %F -d %T'

现在重新运行您的 fetchmail(可能处于详细模式)以检查警告是否消失。 fetchmail -v

4

0 回答 0