検証用の自己証明書を作成してAWS ACMにサクッとインポートするシェルを作った

2020.03.23

はじめに

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

検証用で自己証明書を作成してAWS ACMにサクッとインポートしたい人向けの記事です。証明書を絡めた検証環境を作るシーンって結構遭遇するかと思います。ご自身でドメインを取得してから証明書発行まで行ってもモチロンいいのですが、単純にAWS ACMに自己証明書がインポートされていて、その証明書のARNが引ければ検証が滞ることなく進められるというケースもあると思います。そんな方は本記事を読んで頂くとサクッと自己証明書が作れてAWS ACMへのインポートまでできるので是非お試し頂ければと思います。

注意

  • 証明書作成時のパラメータ(暗号強度、有効期限など)は必要に応じて適宜変更してください。
  • 事前準備

  • opensslがインストール済みであること
  • aws configureで初期セットアップ済みであること
  • 実行イメージ

    今回はデプロイした直後でaws configure実行済みのEC2で検証します。
    後述するシェルをEC2にコピーして実行します。

    [ec2-user@ip-172-16-0-202 ~]$ sh create_ca.sh

    初めにドメイン名の入力を受け付けるので、検証で使いたいドメイン名を入力しEnterを押します。今回、ドメイン名はmyca.test.comとします。

    ドメイン名を入力してください:myca.test.com

    色々と戻り値がでるのですが、CertificateArnが戻り値として返って来ればコマンドとしては成功しています。

    [ec2-user@ip-172-16-0-202 ~]$ sh create_ca.sh
    ドメイン名を入力してください:myca.test.com
    myca.test.com
    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=myca.test.com
    Getting CA Private Key
    {
        "CertificateArn": "arn:aws:acm:ap-northeast-1:xxxxxxxxxxxx:certificate/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
    [ec2-user@ip-172-16-0-202 ~]$
    

    AWS ACM側を確認してみます。myca.test.comという名前のドメイン名で証明書がインポートされていることが分かります。(サクッと出来てますよね!?)

    シェルの中身

    シェルの中身はこのような感じになっています。ご使用になられる場合は必要に応じて適宜パラメータを変更頂ければと思います。

    #!/bin/bash
    
    #ドメインを入力させる
    echo -n ドメイン名を入力してください:
    read domain
    echo $domain
    
    #各種鍵の保管場所作成
    dir=/home/ec2-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 file://${dir}myserver.pem --private-key file://${dir}myserver.key --certificate-chain file://${dir}myintermediateca.pem
    

    まとめ

    今回の記事は自分の備忘録という意味合いが大きいのですが、本来検証したい部分とは別の事前準備などで時間が取られてしまうのはもったいないと思いますので、そういった方の参考になりましたら幸いです!

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