CloudFrontに登録したSSLサーバ証明書の署名アルゴリズムを確認する

2015.07.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、虎塚です。

皆さん、SSLサーバ証明書のSHA-2移行はお済みでしょうか? 以前、移行作業の一環で必要なELBに登録したSSLサーバ証明書の署名アルゴリズムを確認する方法をご紹介しました。

SSLサーバ証明書をインストールできるAWSサービスといえば、ほかにAmazon CloudFrontもあります。今回はCloudFrontについて、同様の内容を確認する手順をご紹介します。

前回の記事のおさらいですが、SSLサーバ証明書のSHA-2移行の対応方法は、次のとおりです。

  • まず、SSL通信を利用しているサーバについて、インストール済みの証明書の署名アルゴリズムがSHA-1かどうかを確認します
  • 次に、もしSHA-1証明書を使用していれば、証明書ベンダーにSHA-2証明書を新規に申請して、取得します
  • 最後に、手元のサーバのSHA-1証明書をSHA-2証明書に入れ替えます

今回ご説明するのは、上記の最初の確認ステップについてです。

確認手順

1. AWSにアップロード済みの証明書を確認する

AWS CLIを使って、登録済みの証明書情報の一覧を表示します。

% aws --output json iam list-server-certificates \
  | jq -c '.ServerCertificateMetadataList[] | {(.ServerCertificateId): .ServerCertificateName}'
{"AAAAAAAAAAAAAAAAAACCC":"foo-bar-2015.crt"}

ここでは、コマンドの実行結果から、jqで証明書のIDと名前を抽出しています。上の出力例では、1個の証明書のIDと名前が表示されました。

ELBに登録したSSLサーバ証明書の署名アルゴリズムを確認する手順では、証明書のARNを取得しました。CloudFrontの場合は、証明書IDを取得するのがポイントです。

2. CloudFrontのDistributionにインストール済みの証明書を確認する

まず、AWS CLIでCloudFront APIを利用できるように、AWS CLIの設定を変更します。AWS CLIでは、2015年7月現在、CloudFront APIの使用はPreview状態です。helpコマンドを実行すると、その旨が表示されます。

 % aws cloudfront help

This service is only available as a preview service.

However, if you'd like to use a basic set of cloudfront commands with the
AWS CLI, you can enable this service by adding the following to your CLI
config file:

    [preview]
    cloudfront=true

or by running:

    aws configure set preview.cloudfront true

指示されたとおりのコマンドを入力して、Preview機能を有効にしましょう。

% aws configure set preview.cloudfront true

これでAWS CLIからCloudFront APIを利用できるようになります。

次に、AWS CLIを使って、確認した証明書がどのCloudFormationにインストールされているかを確認します。

% aws --output json cloudfront list-distributions \
  | jq -c '.DistributionList.Items[] | {(.Id): .ViewerCertificate.IAMCertificateId}'
{"E000AAA111BBBC":"AAAAAAAAAAAAAAAAAACCC"}
{"E222DDD333EEEF":null}

ここでは、コマンドの実行結果から、jqでDistributionのIDとインストール済み証明書のIDを抽出しています。上の出力例では、E000AAA111BBBCには、AAAAAAAAAAAAAAAAAACCCというIDの証明書がインストールされています。nullの行があるDistributionは、ユーザが登録した証明書と関連づけらていません。

3. AWS CLIで証明書情報を取得する

ここからは、ELBに登録したSSLサーバ証明書の署名アルゴリズムを確認する際の手順と同じです。

ELBにインストール済みの証明書が特定できたので、証明書情報を取得します。

% aws --output json iam get-server-certificate --server-certificate-name 証明書の名前 \
  | jq -r '.ServerCertificate.CertificateBody' > work.crt
  • 1行目は、出力をJSON形式にするオプションと、証明書の名前を指定するオプションです。
  • 2行目は、出力されたJSONから、証明書の本文を取得するためのjqコマンドです。

出力内容の最初と最後についているダブルクォーテーションを除去し、改行文字(¥n)を実際の改行に変換するため、jqオプションの-rを使用しています。(参考: jqを活用してAPIレスポンス等から欲しい情報だけを抽出する【中級編】 | Developers.IO

4. OpenSSLコマンドで証明書の署名アルゴリズムを確認する

ローカルに出力した証明書情報(work.crt)に対して、OpenSSLコマンドで内容を確認します。

SHA-1証明書の場合、次のような出力になります。

% openssl x509 -text -noout -in work.crt | grep Algorithm

        Signature Algorithm: sha1WithRSAEncryption
            Public Key Algorithm: rsaEncryption
    Signature Algorithm: sha1WithRSAEncryption

この場合、SHA-2証明書の申請と、証明書の入れ替えが必要と分かります。

SHA-2証明書の場合、たとえば次のような出力になります。

% openssl x509 -text -noout -in work.crt | grep Algorithm

        Signature Algorithm: sha256WithRSAEncryption
            Public Key Algorithm: rsaEncryption
    Signature Algorithm: sha256WithRSAEncryption

SHA-2には、SHA-384、SHA-512などのバリエーションがあるため、かならずしも上記のとおりの出力結果になるとは限りません。

おわりに

AWSにアップロードした証明書とCloudFrontの情報を照合して、CloudFrontにインストール済みの証明書を確認する方法を説明しました。

必要に応じて、SHA-2証明書に更新する計画を立てましょう。

それでは、また。

(2015/7/6 追記: 当初gsedを使用する手順をご紹介しましたが、jqの-rオプションを使うことでgsedを使わなくてもよくなると指摘いただきましたので、削除しました。都元さん、ありがとうございます)