こんにちは!篠﨑です。
今回はAWS Certificate Manager Private Certificate Authority (以下プライベートCA)から直接証明書を発行して、 サーバー証明書とクライアント証明書の発行をしたいと思います。
ACMでプライベート証明書を作るわけではないのでご注意ください。
証明書の解説については以下ブログにて解説していますので、「そういえば、証明書ってなんだっけ」となった方はぜひ読んでみてください!!
はじめに
プライベートCAは作成するだけで、月額$400とかなり高額なサービスです。 無料トライアル期間はありますが、検証する場合は気を付けて利用してください。
※ 作成後、1か月未満で削除すると起動した期間分の金額となります。
以下引用です。
ACM プライベート CA の運用は、1 か月に満たない月は、CA の作成、削除の日に応じて日割りで料金をお支払いただきます。削除すると、プライベート CA は課金されなくなります。ただし、削除した CA を復元した場合は、削除から復元までの期間について課金されます。
やりたいこと
今回の目標はプライベートCAから証明書を発行して、サーバー証明書とクライアント証明書として利用することです。
前提条件
本ブログについて
本ブログは証明書にフォーカスしていますので、VPCやサブネット、EC2、Route 53の構築については詳しく言及しておりません。
また、証明書の発行はAmazon Linux2で行っています。
操作について
今回はopenssl
を利用して秘密鍵等を行います。
本ブログに従って操作する際には、事前にインストールしてください。
やること
それでは早速やっていきます!!!
プライベートCAを作成
初めに、プライベートCAのコンソール画面まで遷移します。 ACMコンソールから遷移できます。
画面が遷移したら、右側にある「CAの作成」をクリックします。
各パラメータは以下のように設定しました。
パラメータ | 値 |
---|---|
タイプオプション | ルートCA |
組織 | |
組織単位 | |
国名 | JP |
州名/都道府県名 | |
市区町村名 | |
共通名 (CN) | |
キーアルゴリズム | RSA 2048 |
※ 今回は検証でのみ利用するため、空白部分は空白で作成しています入れてません。
証明書の発行
プライベートCAからIssue CertificateのAPIを使って、証明書の発行をしていきます。
プライベートキー、CSRの発行
証明書を発行する前にプライベートキーとCSRファイルを生成します。
プライベートキーはパスワード付きで生成します。
$ openssl genrsa -out private.key -des3 2048 Generating RSA private key, 2048 bit long modulus ............................................................................................+++ ..........................+++ e is 65537 (0x10001) Enter pass phrase for private.key: Verifying - Enter pass phrase for private.key: $ openssl req -new -key private.key -out cert.csr Enter pass phrase for private.key: You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:JP State or Province Name (full name) []: Locality Name (eg, city) [Default City]: Organization Name (eg, company) [Default Company Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []: Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
証明書の発行
プライベートCAから証明書の発行をします
今回は1年(365日)を有効期限とします。 必要に応じて有効期限を決定します。
コマンドは以下の通りです。
ドキュメントを参照し必要に応じてアルゴリズムの変更やその他オプションを利用してください。
プライベート・エンド・エンティティ証明書の発行 - AWS Private Certificate Authority
aws acm-pca issue-certificate \ --certificate-authority-arn arn:aws:acm-pca:ap-northeast-1:999999999999:certificate-authority/testca1-abcd-1234-exmpl-example \ --csr file://cert.csr \ --signing-algorithm SHA256WITHRSA \ --validity "Value=365,Type=DAYS" \
aws acm-pca get-certificate \ --certificate-authority-arn arn:aws:acm-pca:ap-northeast-1:999999999999:certificate-authority/testca1-abcd-1234-exmpl-example \ --certificate-arn arn:aws:acm-pca:ap-northeast-1:999999999999:certificate-authority/testca1-abcd-1234-exmpl-example /certificate/1234567890abcdefghijklmnopqrstuexample \ --query "[Certificate,CertificateChain]" \ --output text > test.cert
このままアウトプットすると、下記のように、フォーマットが崩れているので、改行をして修正します
# 修正前 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- # 修正後 -----END CERTIFICATE----- -----BEGIN CERTIFICATE-----
Windowsサーバーで利用する場合、PKCS #12仕様に変換します 先に変換するプライベートキーを作成します。
openssl pkcs12 -export -out mypfx.pfx -inkey private.key -in cert.pem
これで証明書の作成は完了となります。 高額なサービスなだけに、慎重に検証をする必要があります。 削除を忘れないようにしましょう!