SAN付きの自己証明書作成してブラウザアクセス時の自己証明書の警告を消したい
はじめに
こんにちは。大阪オフィスの林です。
検証用にサクッと自己証明書を作成して作業する機会はそれなりに多いのですが、自己証明書であるがゆえに、その自己証明書をアタッチしたリソース(ALBなど)にアクセスすると証明書に問題があることを示す警告が表示されます。
こんな感じの警告です。
リンクをクリックすればアクセスは出来るものの、この警告を表示させたくありませんでした。
アクセス元のクライアントPCに証明書をインポートすれば警告は解消できそうなのですが、Chrome 58以降、「CN」の値を評価しなくなっているとのことだったので、コモンネームではなくSAN(Subject Alternative Name) を加えた自己証明書を発行して、Chrome経由のアクセスで、この警告が解消するか検証みたいと思います。
※今回の検証ではアクセス先となるEC2やALBは予め作成していることとします。
やってみた
Opensslを使っていきますので、Opensslをインストールします。
[cloudshell-user@ip-10-0-141-55 ~]$ sudo yum install openssl -y
SANを加えた自己証明書を発行するために、予めSANに登録するドメインのリストをファイルに保存しておきます。(今回はmy-test-domain.local
というドメインを使っていきます)
[cloudshell-user@ip-10-0-141-55 ~]$ cat san.txt subjectAltName = DNS:*.my-test-domain.local, DNS:my-test-domain.local
秘密鍵を作成します。
[cloudshell-user@ip-10-0-141-55 ~]$ openssl genrsa -out server.key 2048 Generating RSA private key, 2048 bit long modulus ..............+++ ....................................+++ e is 65537 (0x10001) [cloudshell-user@ip-10-0-141-55 ~]$
CSRを作成します。
[cloudshell-user@ip-10-0-141-55 ~]$ openssl req -out server.csr -key server.key -new 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) []:osaka Locality Name (eg, city) [Default City]:osaka Organization Name (eg, company) [Default Company Ltd]:my-company Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:my-test-domain.local Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: [cloudshell-user@ip-10-0-141-55 ~]$
予め作成しておいたSANの情報(san.txt)を加え、サーバー証明書を作成します。
[cloudshell-user@ip-10-0-141-55 ~]$ openssl x509 -req -days 3650 -signkey server.key -in server.csr -out server.crt -extfile san.txt Signature ok subject=/C=jp/ST=osaka/L=osaka/O=my-company/CN=my-test-domain.local Getting Private key [cloudshell-user@ip-10-0-141-55 ~]$
上記作業を行うと、はじめに作成したsan.txt
を除く3つのファイルが生成されています。
[cloudshell-user@ip-10-0-175-240 ~]$ ll total 16 -rw-rw-r-- 1 cloudshell-user cloudshell-user 70 Oct 27 06:51 san.txt -rw-rw-r-- 1 cloudshell-user cloudshell-user 1273 Oct 27 07:27 server.crt -rw-rw-r-- 1 cloudshell-user cloudshell-user 997 Oct 27 07:26 server.csr -rw-rw-r-- 1 cloudshell-user cloudshell-user 1675 Oct 27 06:56 server.key [cloudshell-user@ip-10-0-175-240 ~]$
作成された証明書をACMにインポートしていきますので、ACMのダッシュボードから「インポート」を選択します。
生成されたserver.crt
の中身をコピーします。
[cloudshell-user@ip-10-0-141-55 ~]$ cat server.crt -----BEGIN CERTIFICATE----- (省略) -----END CERTIFICATE----- [cloudshell-user@ip-10-0-141-55 ~]$
次に生成されたserver.key
の中身をコピーします。
[cloudshell-user@ip-10-0-141-55 ~]$ cat server.key -----BEGIN RSA PRIVATE KEY----- (省略) -----END RSA PRIVATE KEY----- [cloudshell-user@ip-10-0-141-55 ~]$
コピーした内容を証明書のプライベートキーに貼り付け「次へ」を選択します。
ALBのリスナールールにインポートした証明書をアタッチします。
この状態でブラウザアクセスすると前述した警告が出て「保護されていない通信」となります。
クライアントPCに証明書をインポートします。生成されたファイルのserver.crt
をダウンロードします。
※手元のPCがWindowsなので以降の手順はWindowsの手順となります。
「詳細」タブを確認し「サブジェクト代替名」に指定したドメイン名が設定されていることを確認します。
「現在のユーザー」を選択している状態で「次へ」を選択します。
「証明書ストア」で「信頼されたルート証明機関」を選択し「次へ」を選択します。
この状態でChromeでブラウザアクセスすると、警告無くアクセスできることを確認出来ました。
Edge経由でアクセスしても、警告無くアクセスできることを確認出来ました。
まとめ
自己証明書の警告エラーを回避したい方の参考になりましたら幸いです。
以上、大阪オフィスの林がお送りしました!