« SCSIのPCIカードを買う | トップページ | SCSIのPCIカードをLinuxで使う »

2006/11/03

SSLの証明書を作成する

我が家のWebサーバで、Basic認証を使用するのにSSLを使用しています。
主に外部からWebDavを使用する際の認証に使っています。

SSLの証明書は、VineLinuxをインストールした時に入っていたデフォルトの証明書を使っていました。
Snake Oil LTD の証明書です。
OpenSSLをインストールすると、デフォルトの証明書はコレになりますね。
ちなみに、Snake Oil とは英語で「インチキ薬」という意味らしく、日本語に訳したら
「有限会社 ガマ油」
ってな感じなんでしょうか?
オープンソースのそういう所が大好きです・・・。


さて、会社の人からJavaのプログラムがうまく動かないんだけど~と相談されて、プログラムを受け取ったんだけど、USBメモリを持っていなかったからWebDAVに置いてしまおうと思い、ネットワークプレースへ追加しようとしたら、SSLの証明書が正しくない、とのポップアップがず~っと出てしまい、認証できませんでした。
普通は、1回出てOKボタンを押すと大丈夫なんだけど。

とりあえずその時は原因が判らずメールで送ってもらいましたが、家に帰ってから調べたら、SSLの証明書の期限が切れていました。
証明書の期限が切れると、認証させてくれないんですね・・・。


そんなわけで、SSLの証明書を作成することになりました。
証明書と言っても自宅サーバで自分が使う用のものだから、有料の機関が認証したきちんとしたものではなくて、なんちゃって証明書です。タダで作れます。
ネットで検索すると、都合よくWebサーバと同じ環境の VineLinux2.6で設定されている方のブログを発見し、参考にさせて頂きました。
nlog(n) Apache を SSL 対応に という所です。
他に、@ITのApacheによるWebサーバ構築の「第12回 SSLによる安全なWebサイト作り」、
UNIXな生活 OpenSSLでの自己認証局(CA)と自己証明書の作成
も参考にしました。


今回の環境です。
VineLinux2.6
Apache1.3.27
OpenSSL 0.9.6m
mod_ssl 2.8.14

注意するポイントとして、VineLinuxのデフォルトのOpenSSLのインストール場所が、他のディストリビューションと異なっているみたいなのです。
VineLinux の OpenSSLのコマンドの場所は、
/usr/bin/openssl
OpenSSLのツールや設定ファイルは
/usr/share/ssl
にあります。
また、独自認証機関の構築で使用する CA.sh は、
/usr/share/ssl/misc/CA ファイルのことです。(拡張子が無い)


以下、行った作業です。

・自分用認証機関の作成
rootで作業してます。作業用のディレクトリを作ります。
# mkdir /usr/local/ssl
# cd /usr/local/ssl

CA のスクリプトを作業用ディレクトリにコピーします。
# cp /usr/share/ssl/misc/CA ./
# ls
CA
ちゃんとありますね。スクリプトを実行して自分用認証機関の作成を行います。
# ./CA -newca
以下、質問に答えていきます。
自分用なんで、正確でなくてもいいです。自分が判ればいいです。

CA certificate filename (or enter to create)
↑上位CAがあればファイルの場所。自分用認証機関を作る場合は、そのままEnter

Making CA certificate ...
Using configuration from /usr/share/ssl/openssl.cnf
Generating a 1024 bit RSA private key
.......++++++
...........++++++
writing new private key to './demoCA/private/./cakey.pem'
Enter PEM pass phrase::←パスフレーズを入力
Verifying password - 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]:都道府県
Locality Name (eg, city) []:市区町村
Organization Name (eg, company) [Internet Widgits Pty Ltd]:組織名
Organizational Unit Name (eg, section) []:部署名
Common Name (eg, your name or your server's hostname) []:管理者またはサーバの名称
Email Address []:メールアドレス

以上で、/usr/local/ssl/demoCA 内に、ファイルが作られます。


・鍵の作成
# /usr/bin/openssl genrsa -rand なんか適当なファイルを指定 -des3 -out /usr/local/ssl/serverkey.pem 1024

これで1024bit des3暗号方式の鍵が /usr/local/ssl/serverkey.pem に作られます。
-rand の部分のファイルは、ランダムなデータを作成する時に使うものなので、何でもいいです。
私はホームページのindex.htmlを使いました。しょっちゅう更新してるからランダム度高いし。(笑)

鍵が作成されます。
11032 semi-random bytes loaded
Generating RSA private key, 1024 bit long modulus
....................................++++++
......++++++
e is 65537 (0x10001)
Enter PEM pass phrase:←パスフレーズを入力
Verifying password - Enter PEM pass phrase:←もう一度パスフレーズを入力


・鍵からパスフレーズを除く(でないと、Apache起動時に毎回パスフレーズを聞かれるから)
# /usr/bin/openssl rsa -in /usr/local/ssl/serverkey.pem -out /usr/local/ssl/serverkey.pem
read RSA key
Enter PEM pass phrase:←パスフレーズを入力
writing RSA key


・認証機関への申請書の作成
# /usr/bin/openssl req -new -days 365 -key /usr/local/ssl/serverkey.pem -out /usr/local/ssl/csr.pem

また質問に答えていきます。自分用認証機関で答えたとおりでないと、怒られます。(汗)

Using configuration from /usr/share/ssl/openssl.cnf
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]:都道府県
Locality Name (eg, city) []:市区町村
Organization Name (eg, company) [Internet Widgits Pty Ltd]:組織名
Organizational Unit Name (eg, section) []:部署名
Common Name (eg, your name or your server's hostname) []:管理者またはサーバの名称
Email Address []:メールアドレス

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:よくわからんけど未入力
An optional company name []:よくわからんけど未入力


・証明書の作成
# /usr/bin/openssl ca -in /usr/local/ssl/csr.pem -keyfile /usr/local/ssl/demoCA/private/cakey.pem -cert /usr/local/ssl/demoCA/cacert.pem -out /usr/local/ssl/cert.pem

Using configuration from /usr/share/ssl/openssl.cnf
Enter PEM pass phrase:
Check that the request matches the signature
Signature ok
The Subjects Distinguished Name is as follows
countryName :PRINTABLE:'JP'
stateOrProvinceName :PRINTABLE:'都道府県'
localityName :PRINTABLE:'市区町村'
organizationName :PRINTABLE:'組織名'
commonName :PRINTABLE:'部署名'
emailAddress :IA5STRING:'メールアドレス'
Certificate is to be certified until Nov 2 16:25:58 2007 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


以上で終わりです。

次は、作った証明書をWebサーバが見える所に置きます。
やり方は、httpd.conf を書き換える方法と、今まで使っていた証明書を書き換える方法があります。
私は今まで使っていた証明書を書き換えました。Snake Oil LTD の証明書だし捨ててもいいでしょ。(笑)

・証明書の移動
httpd.confには、
SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt
と書いてあるので、以下へ移動。
# cd /etc/httpd/conf ssl.crt/
いちおう前の証明書のバックアップを取っておきます。
# cp server.crt server.crt.BACK
# cp /usr/local/ssl/cert.pem ./server.crt
cp: ``./server.crt'' を上書きしてもよろしいですか (yes/no)? y

・鍵の移動
httpd.confには
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key
と書いてあるので、以下へ移動
# cd /etc/httpd/conf/ssl.key/
こちらもいちおうバックアップしておきます。
# cp server.key server.key.BACK
# cp /usr/local/ssl/serverkey.pem server.key
cp: ``server.key'' を上書きしてもよろしいですか (yes/no)? y


後はサーバの再起動です。
・サーバの再起動
# /etc/init.d/httpd stop
httpdを停止中: [ OK ]
# /etc/init.d/httpd start
httpdを起動中: [ OK ]


以上で作業は完了です。
実際に、SSLで自分のホームページを見に行くと、1回警告が出ますが(オレ様 機関の証明だからな)OKを押せばちゃんと表示されます。
証明書の有効期間は1年に設定しているから、また来年同じ目に遭うんだろうなあ~。

|

« SCSIのPCIカードを買う | トップページ | SCSIのPCIカードをLinuxで使う »

Apache」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/54336/12540271

この記事へのトラックバック一覧です: SSLの証明書を作成する:

« SCSIのPCIカードを買う | トップページ | SCSIのPCIカードをLinuxで使う »