この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
開発環境でSSL証明書を導入してHTTPSを検証することが度々ある。
毎回インターネットで手順書を探して作るのも面倒なので、今回メモとして残す。
主な内容は以下となる。
- オレオレ証明書の作成
- オレオレ証明書をAWS ACMに導入
- apache httpdでテストファイルを作成
- ALBを作成し、オレオレ証明書を設定
環境
- Amazon Linux2
- 証明書インポート先:AWS Certificate Manager
1.オレオレ証明書作成手順
1.準備
Amazon Linux2上で下記のコマンドを発行する
$ sudo su
# cd /usr/local/etc
# mkdir ca
# chmod 600 ca
# cd /usr/local/etc/ca
2.プライベートルート秘密鍵の作成
# openssl genrsa 2048 > private-key.pem
3.CSRの作成
# openssl req -new -key private-key.pem -out private-key.csr -subj "/C=JP/ST=Tokyo/O=example/CN=*.ap-northeast-1.elb.amazonaws.com"
4.オレオレ証明書の作成
4.1、配置ファイルを作成
# echo subjectAltName=DNS:*.ap-northeast-1.elb.amazonaws.com > san.ext
ここで最初ハマったが、上記の設定を追加しないと、Chromeにサーバ証明書を導入しても下記のエラーが発生した。
「NET::ERR_CERT_COMMON_NAME_INVALID エラー」
調べてみたら、現在最新バージョンのChromeでは、subjectAltName(代替名)のチェックが必須となり、上記の設定が追加する必要がある。
4.2、オレオレ証明書を作成
# openssl x509 -extfile san.ext -req -days 3650 -signkey private-key.pem < private-key.csr > private-server.pem
テストのため、有効期間を10年間に設定した。
下記のコマンドで作成した証明書の中身を確認できる。
openssl x509 -text < private-server.pem
または
openssl x509 -in private-server.pem -text -noout
4.3、PEM証明書をCRT証明書に転換(ブラウザにインストールため)
openssl x509 -in private-server.pem -inform PEM -out private-server.crt
2.オレオレ証明書をAWS ACMに導入
下記の対応関係でAWSのACMに導入
証明書本文→private-server.pem
証明書のプライベートキー→private-key.pem
証明書チェーン→中間認証局が作成していないため、空欄のまま。
3. apache httpdでテストファイルを作成
下記のコマンドでhttpdをインストールする。
sudo yum install -y httpd
index.htmlファイルを作成する
echo "Hello world" > /var/www/html/index.html
サービス再起動
sudo systemctl restart httpd
4. ALBを作成し、オレオレ証明書を設定
-
ALBを作成し、上記1で作成したオレオレ証明書を設定する。
ALBを経由してWEBサーバに接続する。 -
作成した証明書private-server.crtをブラウザーに導入して信頼させる。
OSにより、導入手順が若干違う。
-
ブラウザからアクセスしてみる。
Chrome
Safari
何やら最初上記のようなエラーが表示された。ネットで調べてみたら、下記を参照して解決した。詳細原因は後日で再調査して見る。
最後に
上記、簡単にオレオレ証明書の作成手順を纏めた。最初に簡単だと思ったが、整理してみたら、結構時間かかった。でも、整理してよかった、お陰様で、OpenSSL、SSL証明書(オレオレだけではなく、中間証明書含め)の知識を深く理解した。今後も続けてノウハウを整理しようと思っている。