スポンサーリンク

OpenSSL HTTPS通信で警告が出ないオレオレ証明書の作成

スポンサーリンク

最近はLet’s Encryptを使用する事で、HTTPS環境を整えやすくなりましたが、ローカルの開発環境や、社内サーバー構築時では、自己署名証明書(通称:オレオレ証明書)を使いたいシーンはまだあります。今回はそんなオレオレ証明書を使用した場合に、ブラウザで警告が出ない環境を作成する手順を紹介します。

Chrome58以降では、ドメイン名と証明書の照合にcommonNameが使われず、subjectAlternativeName(SAN)が使用される仕様になりました。本記載では、SANに対応した証明書を作成しております。
本記事はCentOS7をベースに記載しております。
オレオレ証明書を使用したHTTPS通信は、通信の暗号化は行えても通信相手の実在証明は行えません(オレオレですから)。その為、インターネットに公開するようなサーバーでの利用には向いておりません。

手順の概要は以下の通りです。

  1. ルート証明書を作成
  2. 作成したルート証明書でサーバー証明書を作成
  3. ルート証明書をクライアント(サーバーにアクセスする端末)にインストール

ルート証明書を作成

以下のコマンドを発行します。※設定値は事前に修正して下さい。

#証明書(認証局)の作成
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をダブルクリックする事で証明書のインポートウィザードが起動します。
この時、配置先のストアに「信頼されたルート証明書」を選択して下さい。

以上です。

コメント