サーバ証明書は、ウェブサイトの運営者の身元を証明するものです。
例えば通販サイトでは、名前や住所、電話番号、クレジット番号など多くの個人情報をウェブサイトに入力しますが、入力した情報を暗号化したり、改ざんを検地する仕組みにより送信データの安全性を保障します。
しかし、安全に送信しても肝心の送信先のウェブサイトが、実はなりすましで運営された悪意あるサイトだったとしたら、せっかく暗号化しても意味がありません。
SSL暗号化通信は、データを暗号化して盗聴を防いだり、改竄を検知をするだけでなく、ブラウザがウェブサイトに設定されているサーバ証明書を検証して信頼性のあるサイトかどうかを確認します。
つまり、ウェブサイトの運営主体の身元を証明する証明書ということになります。
本来、サーバ証明書は信頼できる認証局に認証してもらいますが、テストとして自分で認証するための自己認証局で作成します。
自己認証局を作成するには OpenSSL付属の CA.sh を使用します。
スクリプトは環境に合わせて編集が必要になるので複製を作業ディレクトリに作成します。
一般的には OpenSSL をインストールしたディレクトリの misc以下にあります(つまり /usr/local/ssl/misc/CA.sh をコピー)。
作業は /usr/local/ssl/CA で行いますので事前に作成しておきます。
# mkdir -p /usr/local/ssl/CA |
# cd /usr/local/ssl/CA |
# cp /usr/local/ssl/ssl/misc/CA.sh . |
構築場所などを変更するためスクリプトを以下の様に編集します。
CATOP=/usr/local/ssl/CA | # 認証局の構築場所を指定 |
CAKEY=./cakey.pem | # 認証局の秘密鍵の作成場所 |
CACERT=./cacert.pem | # 認証局の証明書の作成場所を指定 |
次に OpenSSL の設定ファイルを同様に修正します。
設定ファイルでは、CA を実現するために利用するディレクトリや、CA の証明書ファイル名などを設定します。
尚、ファイルは /usr/local/ssl/openssl.cnf にあります。
設定内容の詳細については http://uninekoa.lolipop.jp/linux/index.php?openssl.cnf 等を参照してください。
設定 | 内容 |
---|---|
dir | CA が利用するディレクトリを指定 |
certs | このディレクトリに保存されている証明書を利用して証明書の検証 |
crl_dir | このディレクトリに保存されている CRL(Certification Revocation List 破棄された証明書の一覧表)を利用して証明書の検証 |
database | 署名状況や破棄状況を記録するためのデータベースファイル |
new_certs_dir | CA が発行した証明書が保存 |
certificate | CA の証明書ファイル名 |
serial | 署名順に割り当てられたシリアル番号 |
crl | CA が発行した CRL |
private_key | CA の秘密鍵 |
dir = /usr/local/ssl/CA | # Where everything is kept |
CA が利用するディレクトリの設定(dir)はデフォルトで相対パスにより指定されていますが、絶対パスに変更した方がカレントディレクトリを考慮する必要がないため便利です。
次の設定を行うと以降の作業で入力の手間を省くことができます
countryName_default = JP | # 国コードを指定 | |
stateOrProvinceName_default = Tokyo | # 都道府県名を指定 | |
localityName_default = Setagaya-ku | # 組織の本拠地の市区町村名を指定 | |
0.organizationName_default = UMIYAMA SHOJI Co., Ltd. | # サーバID申請団体の | |
# 正式な名称を指定 | ||
organizationalUnitName_default = Eigyou | # 部署名を指定 |
編集したスクリプトを実行しメッセージに従い入力して下さい。
実際の入力例を赤字で記します。
# ./CA.sh -newca | |
mkdir: ディレクトリ `/usr/local/ssl/CA' を作成できません: ファイルが存在します | |
CA certificate filename (or enter to create) | 【上位認証局があれば指定】 |
Making CA certificate ... | |
Generating a 1024 bit RSA private key | |
.....++++++ | |
...............++++++ | |
writing new private key to '/usr/local/ssl/CA/private/./cakey.pem' | |
Enter PEM pass phrase: | 【証明書のパスフレーズを入力】 |
Verifying - Enter PEM pass phrase: | 【証明書のパスフレーズの確認】 |
----- | |
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) []:Setagaya-ku | |
Organization Name (eg, company) [Internet Widgits Pty Ltd]:UMIYAMA SHOJI Co., Ltd. | |
Organizational Unit Name (eg, section) []:Eigyou | |
Common Name (eg, YOUR name) []:www.umiyama.co.jp | |
Email Address []:fuguta@umiyama.co.jp | |
Please enter the following 'extra' attributes | |
to be sent with your certificate request | |
A challenge password []: | 【何も入力しない】 |
An optional company name []: | 【何も入力しない】 |
Using configuration from /usr/local/ssl/openssl.cnf | |
Enter pass phrase for /usr/local/ssl/CA/private/./cakey.pem: | |
Check that the request matches the signature | |
Signature ok | |
... (略) ... | |
Write out database with 1 new entries | |
Data Base Updated |
Country Name | 国コードを指定します。日本国内で登記されている場合には「JP」を記入してください。 |
State or Province Name | 都道府県名をローマ字表記で入力します。 |
Locality Name | 組織の本拠地の市区町村名をローマ字表記で入力します。 |
Organization Name | サーバID申請団体の正式な名称をローマ字で記入します。 |
Organizational Unit Name | 部署名をローマ字で記入します(オプション)。 |
Common Name | サーバのホスト名(FQDN)を指定します。 |
Email Address | 担当者のメールアドレスを指定します(オプション)。 |
challenge password | パスワードを入力します(オプション)。パスワードを設定するとApacheの起動時に毎回パスワードを求められます。この項目は空のままにしておく事をお勧めします。 |
An optional company name | 会社名の略称を入力します(オプション)。この項目も通常は空のままにしておく事をお勧めします。 |
これで自己認証局の構築が完了しました。
認証機関の証明書は /usr/local/ssl/CA/cacert.pem に、認証機関の秘密鍵は /usr/local/ssl/CA/private/cakey.pem に作成しました。
ところで、認証局によっては「"Email Address", "challenge password", "optional company name" は入力しないで下さい」という説明をしているところが多いが、
challenge password とは何のために入力するのであろうか。
これは認証局に証明書の破棄を申請する際に、このパスワードにより手続きを行うのに必要となる(最も、自己認証局ではそのような手続きはないので意味がありませんが...)。
作成した証明書の内容を確認するには以下のコマンドを実行します。
# /usr/local/ssl/bin/openssl x509 -in cacert.pem -text |
今作ったのが PEMフォーマットで、バイナリDERフォーマットにするには以下のコマンドを実行します。
# /usr/local/ssl/bin/openssl x509 -in cacert.pem -outform DER -out cacert.der |