この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
こんにちは。大阪オフィスの林です。
検証用で自己証明書を作成してAWS ACMにサクッとインポートしたい人向けの記事です。証明書を絡めた検証環境を作るシーンって結構遭遇するかと思います。ご自身でドメインを取得してから証明書発行まで行ってもモチロンいいのですが、単純にAWS ACMに自己証明書がインポートされていて、その証明書のARNが引ければ検証が滞ることなく進められるというケースもあると思います。そんな方は本記事を読んで頂くとサクッと自己証明書が作れてAWS ACMへのインポートまでできるので是非お試し頂ければと思います。
注意
事前準備
実行イメージ
今回はデプロイした直後で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 fileb://${dir}myserver.pem --private-key fileb://${dir}myserver.key --certificate-chain fileb://${dir}myintermediateca.pem
まとめ
今回の記事は自分の備忘録という意味合いが大きいのですが、本来検証したい部分とは別の事前準備などで時間が取られてしまうのはもったいないと思いますので、そういった方の参考になりましたら幸いです!
以上、大阪オフィスの林がお送りしました!