WebOS Goodies

WebOS の未来を模索する、ゲームプログラマあがりの Web 開発者のブログ。

WebOS Goodies へようこそ! WebOS はインターネットの未来形。あらゆる Web サイトが繋がり、共有し、協力して創り上げる、ひとつの巨大な情報システムです。そこでは、あらゆる情報がネットワーク上に蓄積され、我々はいつでも、どこからでも、多彩なデバイスを使ってそれらにアクセスできます。 WebOS Goodies は、さまざまな情報提供やツール開発を通して、そんな世界の実現に少しでも貢献するべく活動していきます。
Subscribe       

OpenSSL でオレオレ証明書を手っ取り早く作成する方法

先日、とある理由で SSL の動作テストのためのオレオレ証明書が必要になったので、作り方を調べてみました。基本的にインフラ部分は他人におまかせなことが多いので、これまでやったことなかったんですよね (^^ゞ

で、ググったりして調べたのですが、たいてい OpenSSL の設定を書き換えが必要で、少し面倒な手順ばかり。単なる動作テスト用で正式な証明書である必要はないので、環境の書き換えは最小限で済ませたくないところです。何回か試して、環境を変更せずに証明書を生成することができたので、手順をまとめておきます。

デフォルト設定等を確認する

証明書の作成をはじめるまえに、念のため以下の手順が使えるかどうか確認する方法を書いておきます。たいてい大丈夫だと思うんですけどね。少なくとも Mac OS X Lion と Ubuntu 11.04 はデフォルトで以下の設定になっていました。

確認するファイルは、 OpenSSL の構成ファイルである openssl.cnf と misc/CA.sh です。それぞれ、以下の場所にあります。

Mac OS X Lion : /System/Library/OpenSSL Ubuntu 11.04 : /usr/lib/ssl

まず、 openssl.cnf を開いて、 dir という変数の設定を確認してください。以下のように ./demoCA が設定されていれば OK です。

dir = ./demoCA

misc/CA.sh も同様に、 CATOP, CAKEY, CAREQ, CACERT といった変数にそれぞれ ./demoCA, ./cakey.pem, ./careq.pem, ./cacert.pem が設定されていることを確認してください。たいていは以下の記述になっているかと思います。

if [ -z "$CATOP" ] ; then CATOP=./demoCA ; fi
CAKEY=./cakey.pem
CAREQ=./careq.pem
CACERT=./cacert.pem

上記の 2 つが確認できれば、たいていは大丈夫かと思います。別のファイル名やパスが指定されている場合、下記手順の該当ファイル名・パスを設定にあるもので読み替える必要があります。

証明書を作成する

それでは、証明書を作成していきます。 CA.sh のパスは Mac OS X Lion のもので書いていますので、他の環境では適宜読み替えてください。

作業用ディレクトリの作成

まずは、作業用に新しいディレクトリを作成します。どこでもいいのですが、ここでは ~/ssl とします。作成したら、そこをカレントにしておきます。

mkdir ~/ssl
cd ~/ssl

認証局の作成

misc/CA.sh スクリプトを実行し、認証局としてのファイル群を初期化します。実行後にいろいろ訪ねてきますが、以下でコメントをつけたもの以外はデフォルト(単に Enter を押す)で大丈夫です。あくまで開発・テスト用ということであれば、ですが。

ssl$ /System/Library/OpenSSL/misc/CA.sh -newca
CA certificate filename (or enter to create)        # Enter を入力

Making CA certificate ...
Generating a 1024 bit RSA private key
..++++++
..++++++
writing new private key to './demoCA/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]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:webos-goodies.jp     # サーバー名を入力
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /System/Library/OpenSSL/openssl.cnf
Enter pass phrase for ./demoCA/private/./cakey.pem: # 再び同じパスフレーズを入力
Check that the request matches the signature
Signature ok

成功すれば、 demoCA というディレクトリが作成され、その中に cacert.pem をはじめとして各種ファイルが格納されているはずです。

秘密鍵の作成

実際にサーバーで使用する秘密鍵を作成します。 -out オプションで指定しているのが出力する秘密鍵のファイル名なので、必要に応じて変更してください。

ssl$ openssl genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus
..................................................++++++
................++++++
e is 65537 (0x10001)
Enter pass phrase for server.key:              # 秘密鍵のパスフレーズを入力
Verifying - Enter pass phrase for server.key:  # 上と同じものを入力

このままだとサーバー起動時に毎回パスフレーズを尋ねられるので、プロテクトを解除します。

ssl$ openssl rsa -in server.key -out server.key 
Enter pass phrase for server.key:  # 上と同じパスフレーズを入力
writing RSA key

証明書の作成

証明書を作成するために、まず署名要求ファイル (.csr) を作成します。ここもサーバー名以外はデフォルトでよいかと思います。

ssl$ openssl req -new -days 365 -key server.key -out server.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]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:webos-goodies.jp  # サーバー名を入力
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

そして、証明書を作成。

ssl$ openssl ca -in server.csr -keyfile demoCA/private/cakey.pem -out server.crt
Using configuration from /System/Library/OpenSSL/openssl.cnf
Enter pass phrase for demoCA/private/cakey.pem: # 証明局作成時に設定したパスフレーズを入力
Check that the request matches the signature
Signature ok
Certificate Details:
        # 証明書の情報...

Certificate is to be certified until Apr 18 09:31:19 2013 GMT (365 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

これで、秘密鍵ファイル (server.key) と証明書 (server.crt) が作成できました。あとは、これらを適切な場所にコピーするなどして使ってください。

ちなみに、証明書を作成した時に「failed to update database TXT_DB error」といったエラーが出る場合があるようです。これは以下のようにして index.txt を削除、再作成することで解消できました。

rm -f demoCA/index.txt
touch demoCA/index.txt

以上です。 SSL 証明書が必要になったときに参考にしていただければ幸いです。

関連記事

この記事にコメントする

Recommendations
Books
「Closure Library」の入門書です。
詳しくはこちらの記事をどうぞ!
Categories
Recent Articles