開発環境でSSL証明書を導入してHTTPSを検証することが度々ある。
毎回インターネットで手順書を探して作るのも面倒なので、今回メモとして残す。

主な内容は以下となる。

  1. オレオレ証明書の作成
  2. オレオレ証明書をAWS ACMに導入
  3. apache httpdでテストファイルを作成
  4. 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を作成し、オレオレ証明書を設定


  1. ALBを作成し、上記1で作成したオレオレ証明書を設定する。

    ALBを経由してWEBサーバに接続する。

  2. 作成した証明書private-server.crtをブラウザーに導入して信頼させる。

    OSにより、導入手順が若干違う。

  3. ブラウザからアクセスしてみる。


Chrome

Safari

何やら最初上記のようなエラーが表示された。ネットで調べてみたら、下記を参照して解決した。詳細原因は後日で再調査して見る。

Safari表示エラー


最後に

上記、簡単にオレオレ証明書の作成手順を纏めた。最初に簡単だと思ったが、整理してみたら、結構時間かかった。でも、整理してよかった、お陰様で、OpenSSL、SSL証明書(オレオレだけではなく、中間証明書含め)の知識を深く理解した。今後も続けてノウハウを整理しようと思っている。

Last modified: 2020-05-11