ApacheSSL
ApacheでSSL通信を行うための覚書。
基本的に、パソコンおやじさんのサイトに記載されているSSL用証明書の作成(Windows編)の通りに行えばOKですが、最終更新日が2006/8/31の版においてはPerlもインストールされている環境が前提となっているようなので、Perlなしの場合(openssl.exeだけで作成する場合)の作成に関するメモとなっています(CA.plのソースを元に実際に実行しているコマンドに置き換えていっただけですが)。
なお、全てカレントフォルダはOpenSSLのbinフォルダとなっているという前提となっています(使用したのは0.9.8dです)。
以下の2ヶ所の設定を確認します。
以下の設定を確認します。
以下の設定を確認します。
以下の2ヶ所の設定を確認します。
パソコンおやじさんのサイトSSLによるSecureWWWサーバの構築(Windows編)に詳しくまとめられていますが、ざっくりと必要な部分だけを抜き出すと・・・。
Win32環境では使えないので、コメント化する必要があります。
ざっくり、以下の部分を書き換えることになります。
基本的に、パソコンおやじさんのサイトに記載されているSSL用証明書の作成(Windows編)の通りに行えばOKですが、最終更新日が2006/8/31の版においてはPerlもインストールされている環境が前提となっているようなので、Perlなしの場合(openssl.exeだけで作成する場合)の作成に関するメモとなっています(CA.plのソースを元に実際に実行しているコマンドに置き換えていっただけですが)。
なお、全てカレントフォルダはOpenSSLのbinフォルダとなっているという前提となっています(使用したのは0.9.8dです)。
CA用秘密鍵(cakey.pem)とCA用証明書(cacert.pem)の作成
事前準備
openssl.cnfファイルを編集しておきます(コメント解除・内容編集等)。
[ CA_default ] セクション
以下の2ヶ所の設定を確認します。
unique_subject = yes
crlnumber = $dir/crlnumber
[ usr_cert ] セクション
以下の設定を確認します。
nsCertType = server
[ v3_ca ] セクション
以下の設定を確認します。
nsCertType = sslCA, emailCA
ca.pl -newcaの置き換え
いくつかのフォルダ・ファイルの作成
- md .\demoCA
- md .\demoCA\certs
- md .\demoCA\crl
- md .\demoCA\newcerts
- md .\demoCA\private
- type NUL > .\demoCA\index.txt
- echo 01> .\demoCA\crlnumber
- "01"の直後にはスペースはありません。
cakey.pem(server.key)及びcareq.pemを作成
- openssl req -new -keyout .\demoCA\private\cakey.pem -out .\demoCA\private\careq.pem
- openssl ca -create_serial -out ./demoCA/cacert.pem -days 1095 -batch -keyfile ./demoCA/private/cakey.pem -selfsign -extensions v3_ca -infiles ./demoCA/private/careq.pem
- daysオプションのあとのパラメータを変更することで、CA証明書の有効期限を変更することができます。
サーバ用CA証明書の作成
- openssl x509 -in ./demoCA/cacert.pem -out ./demoCA/cacert.crt
- この部分はCA.plに含まれていないため、元々opensslでの処理となっています。
サーバ用証明書の作成
ca.pl -newreq-nodesの置き換え
newreq.pem, server.key(newkey.pem), newcert.pemの作成
- openssl req -new -nodes -keyout server.key -out newreq.pem -days 365
- nodesオプションを付加することで、起動時のパスワード入力を回避(このオプションがないとWindows上では起動できません)。
- なお、出力ファイルはCA.pl内ではnewkey.pemですが、server.keyに変更しています。
- 別にファイル名は何でもいいのですが、Apacheのconfファイルにおいてserver.keyで記述している資料が多いので。最初newkey.pemがそのファイルに相当することに気付かず、しばらく悩んでいました。
- Common Nameとして、サーバのホスト名(www.testsvr.jp等)を登録。
ca.pl -signの置き換え
server.crtの作成
- openssl ca -policy policy_anything -out newcert.pem -infiles newreq.pem
後処理
サーバ証明書の部分のみを切り出し
- openssl x509 -in newcert.pem -out server.crt
サーバ証明書のバックアップ
- newcert.pem, newreq.pem, server.crt, server.keyの4ファイルを任意のフォルダにコピー。
クライアント用証明書の作成
事前準備
openssl.cnfファイルを編集しておきます(コメント解除・内容編集等)。
[ usr_cert ] セクション
以下の2ヶ所の設定を確認します。
# nsCertType = server
nsCertType = client, email
ca.pl -newreqの置き換え
newreq.pemの作成
- openssl req -new -keyout newkey.pem -out newreq.pem -days 365
ca.pl -signの置き換え
newcert.pemの作成
- openssl ca -policy policy_anything -out newcert.pem -infiles newreq.pem
ca.pl -pkcs12の置き換え
p12ファイルの作成
- openssl pkcs12 -in newcert.pem -inkey newkey.pem -certfile ./demoCA/cacert.pem -out newcert.p12 -export -name FriendlyName
Apacheの設定
パソコンおやじさんのサイトSSLによるSecureWWWサーバの構築(Windows編)に詳しくまとめられていますが、ざっくりと必要な部分だけを抜き出すと・・・。
SSLMutexの設定
Win32環境では使えないので、コメント化する必要があります。
#SSLMutex default
証明書ファイルの設定
ざっくり、以下の部分を書き換えることになります。
SSLCertificateFile conf/cert/server.crt
SSLCertificateKeyFile conf/cert/server.key
SSLCACertificatePath conf/cert
SSLCACertificateFile conf/cert/cacert.crt
SSLVerifyClient require
SSLVerifyDepth 1
注意点
クライアント証明書を用いたアクセスに関して
- p12ファイルをインポートする際に必要となるのは、Export用のパスワードとなります。
- ちなみに、Javaでクライアント証明書を用いて通信を行う場合のパスワードもExport用のパスワードとなります。
- https://hoge/fuga/ 以下にクライアント証明書の要求を設定した場合、http://hoge/fuga/でアクセスすると証明書なしでアクセスできてしまいます。従って、クライアント証明書でアクセス制限をするエリアに関してはSSL通信を必須とする用にApache側の設定を行う(SSLRequireSSLディレクティブを使用)必要があります。
- Windows2000+IE6の組み合わせでアクセスした場合、クライアント証明書の一覧ダイアログが表示されません。そのため、証明書が必要なURLに対して証明書なしでアクセスした場合、証明書がないからアクセスできないのか、サーバの設定を間違えたからアクセスできないのか判断できない場合があるようです。
- WindowsXP+IE7(IE6も?)の場合は、証明書が必要なところへアクセスすると証明書が登録されていない場合でもダイアログが表示されるようです。
2007年03月11日(日) 16:02:34 Modified by syo1976