openssl コマンドで Symantec の証明書を使っていないか効率よく調べる

Posted on

Symantec が発行した SSL/TLS サーバ証明書が Chrome や Firefox で段階的にサポートされなくなります。もう間もなく最初の期限を迎えるので、改めて自分たちのサービスで使っていないか再チェックしました。

Chrome 66 以降、Symantec によって 2016 年 6 月 1 日より前に発行された証明書に対する信頼が破棄されます。現時点では、Chrome 66 は Chrome ベータ版ユーザーに対して 2018 年 3 月 15 日に、安定版ユーザーに対して 2018 年 4 月 17 日頃にリリースされる予定です。

Symantec CA によって 2016 年 6 月 1 日より前に発行された証明書を使用しているサイト運営者は、Chrome 66 のリリースよりも前に、既存の証明書を Chrome が信頼する認証局から発行された新しい証明書に置き換える必要があります。

Symantec のサイトにチェックページがあるのですが、管理しているドメインが多いとコピペするのも面倒です。というわけで、openssl コマンドを使って Symantec の証明書を使っていないか効率よく調べてみました。

openssl コマンドで Issuer を調べる

Lambda を使って SSL サーバ証明書の有効期限をチェックする」にも書いたのですが、openssl コマンドを使えば証明書の情報を取得できます。

このブログは AWS の Certificate Manager で取得した証明書を使っていますが、こんなコマンドで Issuer が取得できます。

$ domain=blog.manabusakai.com
$ openssl s_client -connect $domain:443 -servername $domain < /dev/null 2> /dev/null \
| openssl x509 -text | grep Issuer:
        Issuer: C=US, O=Amazon, OU=Server CA 1B, CN=Amazon

Symantec の証明書だとこんな感じです(この証明書は 2018/9/13 までに入れ替える必要があります)。

$ domain=norton.com
$ openssl s_client -connect $domain:443 -servername $domain < /dev/null 2> /dev/null \
| openssl x509 -text | grep Issuer:
        Issuer: C=US, O=Symantec Corporation, OU=Symantec Trust Network, CN=Symantec Class 3 EV SSL CA - G3

あとはシェルスクリプトでループさせれば OK です。

#!/bin/bash

set -eu

for domain in $domains; do
  echo $domain;
  openssl s_client -connect $domain:443 -servername $domain < /dev/null 2> /dev/null | \
  openssl x509 -text | grep Issuer:
done
$ domains="twitter.com facebook.com instagram.com" bash check-issuer.sh
twitter.com
        Issuer: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert SHA2 Extended Validation Server CA
facebook.com
        Issuer: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert SHA2 High Assurance Server CA
instagram.com
        Issuer: C=US, O=DigiCert Inc, OU=www.digicert.com, CN=DigiCert SHA2 High Assurance Server CA

更新し忘れると重大な障害につながるので、改めてチェックしてみることをお勧めします。