目次

fetchmailで証明書検証エラーと言われる時の対処メモ

2015/01/14
FreeBSD 10 で運用しているfetchmailさんが

fetchmail: サーバ証明書検証エラー: unable to get local issuer certificate
fetchmail: 証明パスが /C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA で壊れています
fetchmail: このエラーは、サーバが中間CAの証明書を提供しなかったことを意味し、fetchmail はどうすることもできません。詳しくは fetchmail に同梱されているドキュメント README.SSL-SERVER を参照してください。
fetchmail: これは、root CA が署名した証明書が 信頼される CA 証明書の保管場所にないか、証明書のあるディレクトリで c_rehash を走らせる必要があることを示しています。詳しくは、マニュアルページの --sslcertpath と -sslcertfile についての記述を参照してください。
fetchmail: サーバ証明書検証エラー: certificate not trusted
fetchmail: 警告:接続は保護されていません、続けます。(--sslcertckの使用をお勧めします!)

と言ってきてログが我慢ならないほど溢れ始めたので対処したときの方法。

openssl&ca_root_nssを導入or更新

opensslインストール時に一緒に導入されるCA証明書を利用します。
portsかpackagesのopensslを導入します。どうせなので新しいものにアップデートしたほうがいいでしょう。
パッケージの ca_root_nss で導入される奴ですね。ごめんなさい。

導入できると、/etc/ssl がこんな感じに。

root@yakan:/root # ls -l /etc/ssl
total 12
lrwxr-xr-x  1 root  wheel     38  1月 14 05:59 cert.pem -> /usr/local/share/certs/ca-root-nss.crt
-rw-r--r--  1 root  wheel  10926  2月 22  2014 openssl.cnf
root@yakan:/root # 

c_rehash を実行

/etc/sslに移動し、rootでc_rehashを実行。必要かどうかちょっとわからん。いらないかもしれない。

root@yakan:/etc/ssl # c_rehash
Doing /usr/local/openssl/certs
root@yakan:/etc/ssl # 

証明書のシンボリックリンクを作る

自分のホームディレクトリの適当なところに証明書のシンボリックリンクを張る。

$ cd 
$ ln -s /usr/local/share/certs/ca-root-nss.crt cert.pem

fetchmailにオプションを追加

コマンドラインに証明書の位置を指定する。

$ fetchmail --sslcertfile ~/cert.pem

/etc/ssl/cert.pem を指定してもオーケー。

$ fetchmail --sslcertfile /etc/ssl/cert.pem

.fetchmailrc のユーザオプションに指定してもなぜか見てくれない(同じエラーが出る)
この辺はおいおい調べていく。