CloudShellでサクッと自己証明書を作成してACMにインポートする

2022.03.25

はじめに

こんにちは。大阪オフィスの林です。

検証用途で自己証明書を発行して、その証明書をACMにインポートして何らかの検証を行いたいケースはそれなりにあるかと思います。
以前、下記のエントリを投稿していましたが、同じような内容をAWS CloudShellからやってみたいと思います。

AWS CloudShellのホームディレクトリ($HOME)はセッション切断後も中身が保持される永続ストレージですが、120日間CloudShellへのアクセスが無い場合は自動的に削除されるなどの特徴もあります。
AWS CloudShellについては下記エントリでよくまとまっていますので是非併せて参照してみてください!

やってみた

  • AWS CloudShellに接続します。

  • opensslを使って自己証明書を発行していきますので、opensslをインストールします。

    [cloudshell-user@ip-10-0-24-213 ~]$ sudo yum install openssl -y
    ~省略~
    Installed:
      openssl.x86_64 1:1.0.2k-24.amzn2.0.2                                                                                                                                                                                                                                                      
    Complete!
    [cloudshell-user@ip-10-0-24-213 ~]$

  • 下記のスクリプトをコピーして保存します。(この検証ではcreate_ca.shという名前で保存します)※証明書作成時のパラメータ(暗号強度、有効期限など)は必要に応じて適宜変更してください。

    #!/bin/bash
    
    #ドメインを入力させる
    echo -n ドメイン名を入力してください:
    read domain
    echo $domain
    
    #各種鍵の保管場所作成
    dir=/home/cloudshell-user/certdir/
    mkdir ${dir}
    
    #プライベートルート証明書の作成
    openssl genrsa -out ${dir}privaterootca.key 2048
    openssl req  -new -x509 -key ${dir}privaterootca.key -sha256  -days 366 -extensions v3_ca  -out ${dir}myrootca.pem  -subj "/C=JP/ST=Osaka/O=mycorp./CN=testCN"
    
    #中間証明書の作成
    openssl genrsa -out ${dir}myintermediateca.key 2048
    openssl req -new -key ${dir}myintermediateca.key -sha256 -outform PEM -keyform PEM -out ${dir}myintermediateca.csr  -subj "/C=JP/ST=Osaka/O=mycorp./CN=testCN"
    touch ${dir}myintermediateca.cnf
    echo "[ v3_ca ]" >> ${dir}myintermediateca.cnf
    echo "basicConstraints = CA:true, pathlen:0" >> ${dir}myintermediateca.cnf
    echo "keyUsage = cRLSign, keyCertSign" >> ${dir}myintermediateca.cnf
    echo "nsCertType = sslCA, emailCA" >> ${dir}myintermediateca.cnf
    openssl x509 -extfile ${dir}myintermediateca.cnf -req -in ${dir}myintermediateca.csr -sha256 -CA ${dir}myrootca.pem -CAkey ${dir}privaterootca.key -set_serial 01  -extensions v3_ca  -days 366 -out ${dir}myintermediateca.pem
    
    #サーバ証明書の作成
    openssl genrsa 2048 > ${dir}myserver.key
    openssl req -new -key ${dir}myserver.key -outform PEM -keyform PEM  -sha256 -out ${dir}myserver.csr  -subj "/C=JP/ST=Osaka/O=mycorp./CN=*.${domain}"
    openssl x509 -req -in ${dir}myserver.csr -sha256 -CA ${dir}myintermediateca.pem -CAkey ${dir}myintermediateca.key -set_serial 01 -days 366 -out ${dir}myserver.pem
    
    #AWS ACMへ証明書をインポートする
    aws acm import-certificate --certificate fileb://${dir}myserver.pem --private-key fileb://${dir}myserver.key --certificate-chain fileb://${dir}myintermediateca.pem

  • スクリプトを実行し、ドメイン名を入力してください:のプロンプトでドメイン名を入力します。その後、処理が開始して最後にCertificateArnが表示されればインポート完了です。

    [cloudshell-user@ip-10-0-24-213 ~]$ sh create_ca.sh 
    ドメイン名を入力してください:my-test-domain.local          
    my-test-domain.local
    Generating RSA private key, 2048 bit long modulus
    .........+++
    ..........................+++
    e is 65537 (0x10001)
    Generating RSA private key, 2048 bit long modulus
    ..+++
    ......................................+++
    e is 65537 (0x10001)
    Signature ok
    subject=/C=JP/ST=Osaka/O=mycorp./CN=testCN
    Getting CA Private Key
    Generating RSA private key, 2048 bit long modulus
    ..............+++
    ...........+++
    e is 65537 (0x10001)
    Signature ok
    subject=/C=JP/ST=Osaka/O=mycorp./CN=my-test-domain.local
    Getting CA Private Key
    {
        "CertificateArn": "arn:aws:acm:ap-northeast-1:123456789012:certificate/51d4e192-129c-417c-994b-7f40fa111769"
    }
    [cloudshell-user@ip-10-0-24-213 ~]$

  • ACMのダッシュボードでインポートされていることを確認します。

まとめ

サクッと自己証明書を発行して検証したい方の参考になりましたら幸いです。

以上、大阪オフィスの林がお送りしました!