CygwinでHTTPSの自己署名証明書を信頼する


メモ。

ローカルに立てたサーバに対して git push しようとして SSL certificate problem になること有るよね。

$ git push --all testing
fatal: unable to access 'https://...': SSL certificate problem: self signed certificate

何故か世間では git config http.sslVerify false せよという表記が多いけど、別に自己署名証明書を信頼するのは超簡単なのでそちらを勧める。

自己署名証明書を信頼する

これは trust コマンド一発で完了する。

trust anchor certificate.cer

certificate.cer は公開鍵ファイルで、nginxであれば ssl_certificate オプションで指定しているファイルが相当する。中身は

-----BEGIN CERTIFICATE-----
MIIEqjCCApICCQDsBM+2LKS6/TANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDDAxz
dHJpcGUubG9jYWwwHhcNMTgwOTIyMTAzOTQyWhcNMjgwOTE5MTAzOTQyWjAXMRUw
EwYDVQQDDAxzdHJpcGUubG9jYWwwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK
AoICAQDpMYXQ83m4DC4Fvw11Uqnawhm160CFW91yFYwD1TX84dQQ0CUUxlUDF9vb

のような内容のテキストファイルとなる。つまり、sshの authorized_keys に足すくらい簡単にできる。

一度追加した自己署名証明書を削除するには:

trust anchor --remove certificate.cer

のように、オプション --remove を使う。

trust って何

trust は Cygwinの p11-kit-trust パッケージに含まれるツールで、通常は ca-certificate (SSL証明書を含む) パッケージ経由でインストールされている。 https://cygwin.com/packages/summary/ca-certificates.html

$ cygcheck -f /usr/bin/trust
p11-kit-trust-0.23.15-1

この p11-kit はGitHubにプロジェクト( https://github.com/p11-glue/p11-kit )があり、ドキュメントもそこからアクセスできる。 https://p11-glue.github.io/p11-glue/p11-kit/manual/trust.html

伝統的には、RedHat系のディストリビューションでは update-ca-trust でこの手の処理を行っていたが、現在のCygwinではこの操作が p11-kit で行われるようになっている。