自己署名SSL証明書(オレオレ証明書)を作成する
Webサイトを開発する際に、ローカル開発環境やテスト環境上でSSL/TLS(https)通信が必要になり、SSL証明書が必要になることってありますよね?
そんな時に便利なのが「自己署名SSL証明書(オレオレ証明書)」です。
なぜ「自己署名SSL証明書(オレオレ証明書)」が必要なのか?
正式にSSL証明書を取得しようとすると以下のものが必要になります。
- SSL証明書発行費用(有料/無料)
- ドメイン名(有料/無料)
- ドメイン名でインターネットからアクセスできるサーバー環境(有料/無料)
こちらを全てそろえてからでないとSSL/TLS(https)通信できないのは不便すぎます。ちょっと試してみたいだけの場合や、ドメイン名やサーバー契約は開発中はまだ存在しないのが普通です。しかも通常使うSSL発行費用はそれなりに高額です。
そういった場合でもSSL/TLS(https)通信できるようにするのが「自己署名SSL証明書(オレオレ証明書)」です。
このページではそもそも「自己署名SSL証明書(オレオレ証明書)は何か?」や「SSLの仕組みを理解」を理解しながら、各LinuxOSへの証明書の導入方法を紹介しています。
自己署名SSL証明書(オレオレ証明書)とは?
そもそもオレオレ証明書とは「自己署名SSL証明書」とのことです。
本来、SSL証明書は「通信の暗号化」「サイトの存在証明」を目的に、認証機関である認証局に発行してもらうものです。
そのSSL証明書を自分で作っちゃおう!というのがオレオレ証明書です。
認証局から署名してもらうのではなく、自分で署名しちゃうので「自己署名」のSSL証明書なのです。
本番では使用しない!
当然、正式にどこからも認証はされていませんから、不特定多数がアクセスする本番環境でこの証明書は使ってはいけません。
opensslをインストール(Linux)
自己署名SSL証明書(オレオレ証明書)を作成するにはopensslコマンドが必要になるのでインストールしましょう。
CentOSにopensslをインストール
# yum -y install openssl
Debian/Ubuntu/Dockerにopensslをインストール
※Dockerの公式イメージはだいたいがDebian Linuxなのでこちらで対応できます
# apt-get update && apt-get install -y openssl
opensslコマンドでオレオレ証明書を作成する
一発で自動作成できるスクリプトとコマンドで1つ1つ作る2通りを紹介します。
スクリプトで一気に作成
こちらのスクリプトファイルを作って実行してください。
最初のドメイン名のところのみ書き換えてください。
#--------------------------------
#オレオレ証明書作成
#--------------------------------
domain="domain_name"; #←ここだけ設定する testdomain.com
base_dir=ssl
mkdir -p $base_dir/$domain
subject="/C=JP/ST=Tokyo/L=Tokyo City/CN=*.$domain"
server_private_key="$base_dir/$domain/server_$domain.key" #秘密鍵
server_csr="$base_dir/$domain/server_$domain.csr" #証明書署名要求(CSR)
server_cert="$base_dir/$domain/server_$domain.crt" #SSLサーバー証明書
echo "■秘密鍵作成→ $server_private_key"
openssl genrsa 2048 > $server_private_key #秘密鍵作成
echo "■CSR作成→ $server_csr"
openssl req -new -sha512 -newkey rsa:4096 -subj "$subject" -key $server_private_key > $server_csr #CSR作成(今回は使わない)
echo "■SSLサーバー証明書作成→ $server_cert"
openssl x509 -days 3650 -req -signkey $server_private_key < $server_csr > $server_cert #サーバー証明書作成
ls $base_dir/$domain
スクリプトではなくコマンドを1つ1つ実行する場合もあると思うので3つのコマンドを紹介しておきます。
コマンドの使い方
秘密鍵作成
openssl genrsa 2048 > 【秘密鍵のパス】 #秘密鍵作成
補足
コマンド | genrsa | RSA形式の秘密鍵の作成 |
オプション | 2048 | 生成する秘密鍵のビット数 |
コピペで使える例
openssl genrsa 2048 > private.key
CSR作成
openssl req -new -sha512 -newkey rsa:4096 -subj "/C=JP/ST=Tokyo/L=Tokyo City/CN=*.【ドメイン名】" -key 【秘密鍵のパス】 > 【CSRのパス】 #CSR作成(今回は使わない)
補足
コマンド | req | 証明書の署名要求(CSR)の作成 |
オプション | -new | 新しい公開鍵&証明書要求を生成する。-keyにて指定した秘密鍵で公開鍵を作成 |
-sha512 | CSRの改ざん防止用に使うハッシュ化アルゴリズムにSHA-2の512ビットを使用 | |
-newkey | 作成する秘密鍵で使用する暗号方式を指定 | |
rsa:4096 | 公開鍵暗号RSAを4096ビットで作成する | |
-subj | 識別名を”/type0=value0/type1=value1/type2=…”の形式で指定する | |
-key | 使用する秘密鍵を指定 |
コピペで使える例
ドメインはtest.comとします。
openssl req -new -sha512 -newkey rsa:4096 -subj "/C=JP/ST=Tokyo/L=Tokyo City/CN=*.test.com" -key private.key > server.csr #CSR作成(今回は使わない)
SSLサーバー証明書作成
openssl x509 -days 3650 -req -signkey 【秘密鍵のパス】 < 【CSRのパス】 > 【サーバー証明書のパス】#サーバー証明書作成
補足
コマンド | x509 | X.509証明書の署名要求(CSR)の作成 |
オプション | -days | 証明書の有効日数 |
-req | 証明書生成 | |
-signkey | オプションで署名に使用する秘密鍵を指定 |
コピペで使える例
openssl x509 -days 3650 -req -signkey private.key < server.csr > server.crt
Webサーバーに設定
設定ファイルに反映させるにはこちらの記事をご覧ください。
警告なしでブラウザchromeで使う
chromeで警告なしで見れるように
執筆予定
Internet Explore(IE)で警告なしで見れるように
執筆予定
コメント