最近はLet’s Encryptを使用する事で、HTTPS環境を整えやすくなりましたが、ローカルの開発環境や、社内サーバー構築時では、自己署名証明書(通称:オレオレ証明書)を使いたいシーンはまだあります。今回はそんなオレオレ証明書を使用した場合に、ブラウザで警告が出ない環境を作成する手順を紹介します。
Chrome58以降では、ドメイン名と証明書の照合にcommonNameが使われず、subjectAlternativeName(SAN)が使用される仕様になりました。本記載では、SANに対応した証明書を作成しております。
本記事はCentOS7をベースに記載しております。
オレオレ証明書を使用したHTTPS通信は、通信の暗号化は行えても通信相手の実在証明は行えません(オレオレですから)。その為、インターネットに公開するようなサーバーでの利用には向いておりません。
手順の概要は以下の通りです。
- ルート証明書を作成
- 作成したルート証明書でサーバー証明書を作成
- ルート証明書をクライアント(サーバーにアクセスする端末)にインストール
ルート証明書を作成
以下のコマンドを発行します。※設定値は事前に修正して下さい。
#証明書(認証局)の作成 cd /etc/pki/CA/certs ## 秘密鍵の作成 openssl genrsa 2048 > ca.key ## CSR(証明書署名要求)の作成 ※ダブルクォーテーションの中は適宜変更して下さい。 openssl req -new -key ca.key -subj "/C=JP/ST=aa/L=bb/O=cc/OU=dd/CN=eeCA" > ca.csr ## 証明書の作成 openssl x509 -days 3650 -req -signkey ca.key < ca.csr > ca.crt
サーバー証明書を作成
以下のコマンドを発行します。※設定値は事前に修正して下さい。
##/etc/pki/CA/index.txtが存在しない場合は作成 touch /etc/pki/CA/index.txt echo '1000' > /etc/pki/CA/serial #サーバー証明書の作成 ## SSL通信するドメイン事に作成 cd /etc/pki/tls/certs ## 秘密鍵の作成 openssl genrsa 2048 > server.key ## CSR(証明書署名要求)の作成 ※ダブルクォーテーションの中は適宜変更して下さい。[*.foo.com]にはサーバーのドメインを指定 openssl req -new -key server.key -subj "/C=JP/ST=aa/L=bb/O=cc/OU=dd/CN=*.foo.com" > server.csr ## CHROME対応 ※[*.foo.com]にはサーバーのドメインを指定 echo subjectAltName=DNS:*.foo.com > san.ext ## 証明書の作成 cd /etc/pki/ openssl ca -days 3650 -cert /etc/pki/CA/certs/ca.crt -keyfile /etc/pki/CA/certs/ca.key -in /etc/pki/tls/certs/server.csr > /etc/pki/tls/certs/server.crt -extfile /etc/pki/tls/certs/san.ext
また、作成したサーバー証明書をIISで使用する場合は、以下のコマンドでpfx形式に変換します。
##IIS用に変換 ※[foo.com]にはフレンド名を指定します。 openssl pkcs12 -export -in /etc/pki/tls/certs/server.crt -inkey /etc/pki/tls/certs/server.key -out /etc/pki/tls/certs/googleapis.com.pfx -name "foo.com"
ルート証明書をインストール
1の手順で作成したルート証明書(ca.crt)をクライアントにインストールします。
windowsの場合、ca.crtをダブルクリックする事で証明書のインポートウィザードが起動します。
この時、配置先のストアに「信頼されたルート証明書」を選択して下さい。
以上です。
コメント