AWS Certificate Manager で発行したSSL/TLS 証明書の中身をPythonワンライナーで見る


アドベントカレンダー6日目は、ソフトウェア開発部の橋崎がお届けします。

画像と内容には関係がありませんが、和みますね。

本日の主題は、AWS Certificate Manager (以下ACM) 証明書の中身をサービスに適用する前に確認したい方向けのTipsです。

Amazonの公式ドキュメントによると、Amazonはルート証明局だけで、(少なくとも)5つ持っているそうです。

ACMから証明書を発行して、サービスに使用している証明書を置き換える機会もあるかと思います。

しかし、再発行の際に認証局の情報が変わってしまったら、既存のサービスに影響が出るのではないかと不安になったことはありませんでしょうか?

一方で、下記のQ&Aをみると、ほとんどのケースでは心配がないようにも思えます。

なので、実際にこのTipsが必要になる機会はそう多くはないかもしれませんが、どなたかの参考になれば幸いです。


再びAmazonの公式ドキュメントによると、下記のAWS CLIコマンドで、ACMで発行した証明書を取得できます。

なお、コマンドの実行前に:

  1. AWS CLIの設定
  2. 証明書 の ARNの確認 (ACMの画面から確認できます)

を済ませておく必要があります。

すると、下記のようなJSON形式の実行結果を得ます。

今の場合は、キー”Certificate”の値に3つの証明書が入っています。

また、先ほどの公式ドキュメントからわかることは、

  • キー”Certificate”の値は、ARNで指定した証明書です
  • キー”CertificateChain”の値には、下位の中間証明書からルート証明書まで、順々に入っている

ということです。これら個々の証明書をopensslコマンドにパイプで渡してやれば、証明書の中身を見ることができます。

しかし、このままでは使いづらいと思いますので、各証明書を抽出できるワンライナーを書きました:

使い方:

  1. 上の赤字に示したiが0の場合は、ARNで指定した証明書が取得できます
  2. 上の赤字に示したiが1以上の場合は、証明書チェーンのうち、上からi番目の証明書が取得できます
  3. あとは、取得したい情報にあったopensslコマンドにパイプでつなぎます

実行例:

ルート証明書はStarfield Technologiesが発行したものであり、

ルート認証局であるStarfield Services Root Certificate Authority – G2が、Amazon Root CA 1に中間証明書を発行しています。

※動作確認はAmazon Linux 2上のPython 3.7.4で行いました。また、この結果は特定の環境での実行結果の一例であり、すべての環境において同様な結果が得られることを主張するものではありません。