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 証明書が必要になったときに参考にしていただければ幸いです。
詳しくはこちらの記事をどうぞ!
この記事にコメントする