StartSSLの証明書を使用していますが、有効期限が迫ってきたのでの証明書を更新しましたが、サイトを確認すると以下の警告が表示されるようになりました。
「このウェブサイトの証明書チェーンには、SHA-1に基づく古い署名アルゴリズムで書名された証明書が1つ以上含まれています。」
SHA-1で作成した証明書なら表示されてるのはわかりますが、今回はSHA-2で作成しており、署名もSHA-2でされているので上記の警告は出ないはず…。
署名アルゴリズムを見てもSHA-2(sha256)で署名されていますね。
原因
警告になる理由はSHA-1のSSL証明書は段階的に廃止していき、2017年ではSSL通信が拒否になるようです。(Windowsの場合)
Chromeの場合は2017年まで有効があるものは危険なSSL通信としてエラー、2016年まで有効のは警告が表示されます。(2015年は正常で表示)
つまり今回にて証明書の有効期間が2016年になったのでChromeで表示すると警告で表示されるんですね。
しかし、警告が出るのはSHA-1アルゴリズムが対象でSHA-2で作成し、SHA-2で書名してもらっているので対象外のはず。
なぜ、警告が出るのでしょう?
実は中間証明書もSHA-2にしないとダメのようです。
StartSSLの中間証明書はWindows標準で入っておりますが、アルゴリズムがsha1のためサーバ証明書及び署名のアルゴリズムがSHA-2であっても警告が表示されるというわけです。
今回は有効期限が2016年なので警告で終わっていますが、2017年以降になると有効であったとしてもSSLエラー画面が出るようなので注意。
対処
SHA-1版StartSSLの中間証明書は有効期限が2017年なのでほっといてもWindowsUpdateで更新をしてくれそうですがいつになるかわからないので、サーバ側でサーバ証明書と中間証明書を提示するように変更します。
ダウンロード
中間証明書をダウンロードする場合DER形式とPEM形式でダウンロードできるみたいです。
DER形式の場合
https://www.startssl.com/certs/sub.class1.server.ca.crt
PEM形式の場合
https://www.startssl.com/certs/sub.class1.server.ca.pem
nginxの設定
サーバの公開鍵(server.crt等)ファイルの末尾にStartSSLの中間証明書情報を記述します。
例)
-----BEGIN CERTIFICATE-----
ここにサーバの公開鍵の情報
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIF2TCCA8GgAwIBAgIHFxU9nqs/vzANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQG
EwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERp
Z2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2Vy
dGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDcxMDE0MjA1NDE3WhcNMjIxMDE0MjA1
NDE3WjCBjDELMAkGA1UEBhMCSUwxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4xKzAp
BgNVBAsTIlNlY3VyZSBEaWdpdGFsIENlcnRpZmljYXRlIFNpZ25pbmcxODA2BgNV
BAMTL1N0YXJ0Q29tIENsYXNzIDEgUHJpbWFyeSBJbnRlcm1lZGlhdGUgU2VydmVy
IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtonGrO8JUngHrJJj
0PREGBiEgFYfka7hh/oyULTTRwbw5gdfcA4Q9x3AzhA2NIVaD5Ksg8asWFI/ujjo
/OenJOJApgh2wJJuniptTT9uYSAK21ne0n1jsz5G/vohURjXzTCm7QduO3CHtPn6
6+6CPAVvkvek3AowHpNz/gfK11+AnSJYUq4G2ouHI2mw5CrY6oPSvfNx23BaKA+v
WjhwRRI/ME3NO68X5Q/LoKldSKqxYVDLNM08XMML6BDAjJvwAwNi/rJsPnIO7hxD
KslIDlc5xDEhyBDBLIf+VJVSH1I8MRKbf+fAoKVZ1eKPPvDVqOHXcDGpxLPPr21T
Lwb0pwIDAQABo4IBTDCCAUgwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8E
BAMCAQYwHQYDVR0OBBYEFOtCNNCYsKuf9BtrCPfMZC7vDixFMB8GA1UdIwQYMBaA
FE4L7xqkQFulF2mHMMo0aEPQQa7yMGkGCCsGAQUFBwEBBF0wWzAnBggrBgEFBQcw
AYYbaHR0cDovL29jc3Auc3RhcnRzc2wuY29tL2NhMDAGCCsGAQUFBzAChiRodHRw
Oi8vYWlhLnN0YXJ0c3NsLmNvbS9jZXJ0cy9jYS5jcnQwMgYDVR0fBCswKTAnoCWg
I4YhaHR0cDovL2NybC5zdGFydHNzbC5jb20vc2ZzY2EuY3JsMEMGA1UdIAQ8MDow
OAYEVR0gADAwMC4GCCsGAQUFBwIBFiJodHRwOi8vd3d3LnN0YXJ0c3NsLmNvbS9w
b2xpY3kucGRmMA0GCSqGSIb3DQEBCwUAA4ICAQCBnsOw7dxamNbdJb/ydkh4Qb6E
qgEU+G9hCCIGXwhWRZMYczNJMrpVvyLq5mNOmrFPC7bJrqYV+vEOYHNXrzthLyOG
FFOVQe2cxbmQecFOvbkWVlYAIaTG42sHKVi+RFsG2jRNZcFhHnsFnLPMyE6148lZ
wVdZGsxZvpeHReNUpW0jh7uq90sShFzHs4f7wJ5XmiHOL7fZbnFV6uE/OoFnBWif
CRnd9+RE3uCospESPCRPdbG+Q4GQ+MBS1moXDTRB6DcNoHvqC6eU3r8/Fn/DeA9w
9JHPXUfrAhZYKyOQUIqcfE5bvssaY+oODVxji6BMk8VSVHsJ4FSC1/7Pkt/UPoQp
FVh38wIJnvEUeNVmVl3HHFYTd50irdKYPBC63qi2V/YYI6bJKmbrjfP9Vhyt9uNr
y3Kh4W22ktDuCCvWC7n/gqerdq+VlTRfNt7D/mB0irnaKjEVNCXBXm9V/978J+Ez
8aplGZccQ9jnc9kiPtUp5dj45E3V8vKqzp9srSSI5Xapdg+ZcPY+6HNuVB+MadRp
ZW2One/Qnzg9B4GnVX7MOETImdoP4kXpostFuxoY/5LxCU1LJAIENV4txvT50lX2
GBXCkxllRLWOgdyll11ift/4IO1aCOGDijGIfh498YisM1LGxytmGcxvbJERVri+
gGpWAZ5J6dvtf0s+bA==
-----END CERTIFICATE-----
Linuxサーバの場合 cat PEM形式で中間証明書をダウンロードし、
cat sub.class1.server.ca.pem >> サーバの公開鍵のファイル
でもできます。
Apacheの設定
PEM形式で中間証明書をダウンロードし、サーバの適当なとこに配置
SSL設定を行っているファイル(httpd.confとかhttpd-ssl.confとか)下記を修正
SSLCertificateChainFile 【適当なとこに配置した中間証明書のパス】
確認
中間証明書もWindowsに登録された古いものを参照せずサーバで設定した新しいものが表示されました。
※クライアントのキャッシュ(?)の問題でWEBサーバを再起動しても警告が出る場合があります。
その場合はWindowsを再起動するか、証明書マネージャから既存のStartSSL(StartCom Class 1 Primary Intermediate Server CA)中間証明書を【信頼されていない証明書】に入れるとでなくなります。