Ubuntuにはopensslがインストールされている。これを使って自己認証局(Private Certificate Authority)を作って、証明書を発行し、サーバの暗号化通信に利用する。
[opensslの設定]
opensslには証明書を発行するためのスクリプト(CA.shおよびCA.pl)が同梱されている。私はCA.shを使うので、手始めにこれを編集する。
$ sudo vi /usr/lib/ssl/misc/CA.sh # サーバ証明書の有効期限を伸ばす DAYS="-days 2922" # 8 year # ルート証明書の有効期限を伸ばす CADAYS="-days 7305" # 20 years # 自己認証局を置くディレクトリを指定 CATOP=/etc/ssl/CA
次にopensslの設定ファイルを編集した。
$ sudo vi /etc/ssl/openssl.cnf # 自己認証局を置くディレクトリを指定 CATOP=/etc/ssl/CA # サーバ証明書の有効期限を伸ばす default_days = 2922 # 証明書に記載される情報のデフォルト設定 countryName_default = JP stateOrProvinceName_default = Miyazaki localityName_default = Miyakonojo 0.organizationName_default = College Name 1.organizationName_default = Department Name organizationalUnitName_default = Section Name emailAddress_default = myname@mydomain
[自己認証局の作成]
始める前に証明書に使う固有名(Common Name)とパスフレーズを決めておいた方がよい。他の証明書にルート証明書のパスワードは使えないので注意する。
ターミナルから以下のコマンドを実行し、自己認証局の秘密鍵とルート証明書を作成する。秘密鍵ファイルはroot以外は読み込めないようにパーミッションを変更する。
$ sudo /usr/lib/ssl/misc/CA.sh -newca $ sudo chmod 600 /etc/ssl/CA/private/cakey.pem $ sudo chmod 700 /etc/ssl/CA/private
必要かどうかさだかではないが、拡張子をcrtにしたルート証明書(PEM形式)とバイナリ変換したDER形式のルート証明書を作成した。
$ sudo openssl x509 -in /etc/ssl/CA/cacert.pem -out /etc/ssl/CA/cacert.crt $ sudo openssl x509 -inform pem -in /etc/ssl/CA/cacert.pem -outform der -out /etc/ssl/CA/cacert.der
[サーバ証明書の作成]
とりあえずWebサーバ用のサーバ証明書を作成した。始める前に固有名とパスフレーズを決めておく。
まずはサーバ証明書作成の作業ディレクトリを作成し、移動しておく。私は自己認証局(/etc/ssl/CA)の下のcertsディレクトリ内にサーバの固有名のディレクトリを作った。
$ sudo mkdir /etc/ssl/CA/certs/www.mylabo.lan $ cd /etc/ssl/CA/certs/www.mylabo.lan
以下のコマンドを実行し、サーバ証明書を発行する。秘密鍵ファイルのパーミッションは640に設定した。また拡張子をcrtにしたサーバ証明書も作成した。
$ sudo /usr/lib/ssl/misc/CA.sh -newreq $ sudo /usr/lib/ssl/misc/CA.sh -sign $ sudo chmod 640 newkey.pem $ sudo openssl x509 -in newcert.pem -out server.crt
サーバが秘密鍵を読み込む際には、秘密鍵に設定したパスフレーズを要求される。サーバの自動起動に差し支えがある場合は、以下のようにしてパスフレーズによる保護を解除する。パーミッションは640とした。秘密鍵のパスフレーズ保護を解除するが心配な場合は、各サーバでパスフレーズを処理する方法があるようだ。
$ sudo openssl rsa -in newkey.pem -out newkey_nopass.pem $ sudo chmod 640 newkey_nopass.pem
[クライアント証明書の作成]
基本的にはサーバ証明書の作成と同じ。固有名と秘密鍵のパスフレーズを決めておく。
$ sudo mkdir /etc/ssl/CA/certs/client $ sudo /usr/lib/ssl/misc/CA.sh -newreq $ sudo /usr/lib/ssl/misc/CA.sh -sign $ sudo chmod 640 newkey.pem
ここで発行したクライアント証明書と秘密鍵、およびルート証明書をクライアントに渡す必要がある。3つのファイルをコピーして渡しても使えるようだけど、一つのファイルにまとめて渡す方が便利だし、パスフレーズによる保護もかけられるので安全なようだ。
$ sudo openssl pkcs12 -export -in newcert.pem -inkey newkey.pem -certfile /etc/ssl/CA/cacert.crt -out client.p12
コメントを残す