忘れたころにやってくるテスト用サーバ証明書( SSL 証明書 )の作成作業。
複数のサイトを見なくても作れるようここに完全版をメモしておきたいと思います。
せっかくなので firefox でも警告がでないようにオレオレ証明書ではなく、ちゃんと(ちゃんとしてない!)認証局も作ってその認証局が署名した証明書を作ります。
参考:
なぜFirefoxは自己署名証明書をブロックするのか - Mozilla Flux
「認証局」とは、現実世界ではシマンテック社が有名でしたが、2017 年 8 月に DigiCert 社に証明書発行事業を売却しています。
なお、ここで作る認証局の証明書自体はオレオレ証明書なので PC へのインストールは細心の注意を払って自己責任で行ってください。
(オレオレ証明書作る方法をブログで公開しても不正指令なんちゃら罪で逮捕されないよね?「技術者を萎縮させる」という意味を痛感している。ビビリw)
理屈はいいからやり方教えろ!という人は、能書き不要!の人向けを見てください。
環境
- Windows7
- OpenSSL 1.0.2r ※Apache HTTP Server2.4 に付いてきたやつを使いました。
openssl.exe が置かれているフォルダにどこからでもアクセスできるようにパスを通しておいてください。
大まかな作成手順
ここでは「hogefuga.co.jp」というサーバ用の証明書を発行する手順を紹介します。
次のような手順で証明書を発行します。
- 認証局用のフォルダ、ファイル準備
- 秘密鍵の作成。この秘密鍵は認証局と「hogefuga.co.jp」サーバの2つで利用します。(通常、認証局とサーバ保有者の組織は別々なのでもちろん別の鍵になります。)
- 認証局の署名リクエスト(CSR。Certificate Signing Request。)作成
- 認証局が署名リクエストに自分で署名(自己署名のためここで作られた証明書はオレオレ証明書と呼ばれる。)
- 「hogefuga.co.jp」用の署名リクエスト作成
- 認証局が「hogefuga.co.jp」用の署名リクエストに署名
認証局用のフォルダ、ファイル準備
認証局用のフォルダ作成
openssl の設定ファイル、openssl.conf に 認証局用のデフォルト設定が記載されています。
(私のように apache に付いてきた openssl を使うのであれば apache の conf フォルダに置いてあるはずです。)
今回は設定ファイルを変更したくないのでデフォルト設定に従ったフォルダ、ファイルを作ります。デフォルト設定は相対パスで記載されているので、起点となるディレクトリは自由に決められます。
私は C:\yyama\ca というフォルダを認証局用の起点フォルダとしました。その下に demoCA というフォルダも作ります。
署名に必要なファイルの作成
3ファイルほど作成します。
参考:
CA 構築のための OpenSSL の設定
NET::ERR_CERT_COMMON_NAME_INVALID なんだこれ? – Life is Real.
Chrome58で、HTTPSの自己証明書が NET::ERR_CERT_COMMON_NAME_INVALID になる場合の対応
san 指定用ファイル
参考 URL に書かれているとおり、chrome では、証明書の CN (コモンネーム)ではなく SAN(Subject Alternative Name)でドメインが正当なものであることを判定するようです。
ファイル名はお好みで作ってください。私の場合、ファイル名とファイルの中身を以下のように作成し、 C:\yyama\ca 直下に格納しました。
hogefuga.san
subjectAltName=DNS:hogefuga.co.jp
DNS: より右側をドメイン名に合わせて変えてください。複数ある場合はカンマ区切りだそうです。
index.txt
署名の履歴などを保持するファイルです。openssl が勝手に追記していきます。空のファイルで demoCA 配下に作成しておきます。
このファイルに記載されている履歴と矛盾するような openssl コマンドを叩くとエラーになる場合があります。その場合、テスト環境であれば空ファイルに戻してしまうことで解消できたりします。
「矛盾するような openssl コマンド」とは、例えば「まだ有効期間中なのに証明書を再発行しようとした」など。
この場合は「ERROR:There is already a certificate /C=JP/ST=XXX/O=XXX/OU=XXX/CN=hogefuga.co.jp」のようなエラーがでます。
serial ファイル
シリアルナンバーを記録するためのファイルです。openssl が勝手に変更していきます。拡張子はありません。中身を「01」としdemoCA 配下に作成します。
秘密鍵の作成
コマンドプロンプトを起動し「C:\yyama\ca」など認証局用のフォルダに移動します。
次のコマンドで秘密鍵を作成します。パスフレーズを聞かれますので適当に打ちます。
openssl genrsa -aes128 2048 > server.key
テスト用だし、パスフレーズは邪魔にもなるので除去します。
openssl rsa -in server.key -out server.key
これで秘密鍵の完成です。
認証局の署名リクエスト作成
続いて認証局の証明書を作成するにあたり、まず署名リクエスト(CSR)を作成します。
openssl req -new -key server.key > ca.csr
いろいろ聞かれるので適当に答えましょう。ただし Common Name は証明書を作成したいサーバと異なる名前にします。ここでは「hogefuga.co.jp」とは異なる「yyamaca.co.jp」としました。
入力例です。
C:\yyama\ca>openssl req -new -key server.key > ca.csr 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) [AU]:JP State or Province Name (full name) [Some-State]:Tokyo Locality Name (eg, city) []:Edogawaku Organization Name (eg, company) [Internet Widgits Pty Ltd]:yyama Organizational Unit Name (eg, section) []:system Common Name (e.g. server FQDN or YOUR name) []:yyamaca.co.jp Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
認証局が署名リクエストに自分で署名
オレオレ署名を行います。
openssl x509 -in ca.csr -days 3650 -req -signkey server.key > ca.crt
作られた ca.crt が認証局の証明書です。
「hogefuga.co.jp」用の署名リクエスト作成
認証局用の署名リクエスト作成とほぼ同じです。出力するファイル名だけと異なります。
Common Name は証明書を作成したいサーバのドメインを入力してください。(私は例として「hogefuga.co.jp」としました。)
openssl req -new -key server.key > server.csr
認証局が「hogefuga.co.jp」用の署名リクエストに署名
自己署名とは異なるやり方になります。
openssl ca -in server.csr -keyfile server.key -cert ca.crt -outdir . -out server.crt -days 3650 -extfile hogefuga.san -policy policy_anything
本当に作っていいか聞いてくるので2回ほど y と打ちます。
server.crt が作成された「hogefuga.co.jp」の証明書です。
これで証明書が完成しました。お疲れ様でした。
能書き不要!の人向け!
上級者向け。以下のコマンドやコメント中の指示に従えば1分で作れますw。フォルダ名やファイル名は適宜変えてください。
REM CA 用フォルダ作成 mkdir C:\yyama\ca REM フォルダ移動 cd C:\yyama\ca REM demoCAフォルダ作成 mkdir demoCA REM san ファイル作成 echo subjectAltName=DNS:hogefuga.co.jp> hogefuga.san REM 【手作業】C:\yyama\ca\demoCA\index.txt という空のファイル作れ。Windowsで空ファイルをコマンドで作るのメンドイ。 REM serial ファイル作成 echo 01> demoCA\serial REM 秘密鍵作成 openssl genrsa -aes128 2048 > server.key REM 秘密鍵のパスフレーズ除去 openssl rsa -in server.key -out server.key REM CA用CSR作成 openssl req -new -key server.key > ca.csr REM CA用CSRに自己署名 openssl x509 -in ca.csr -days 3650 -req -signkey server.key > ca.crt REM サーバ用CSR作成 openssl req -new -key server.key > server.csr REM CAによる署名 openssl ca -in server.csr -keyfile server.key -cert ca.crt -outdir . -out server.crt -days 3650 -extfile hogefuga.san -policy policy_anything
参考ににしたサイト。
秘密鍵からパスフレーズを取り除く - Qiita
オレだよオレオレ認証局で証明書つくる - Qiita
SSLを利用するための自己証明書(オレオレ証明書)の設定メモ - Qiita
- 作者:結城 浩
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2015/08/26
- メディア: 単行本