前に書いたが, WordPress のログインを自宅 LAN からのみ可にしていた。しばらく,これでやっていたが,やはり,不便。なので,この際,使っている WiFi 端末からログインできるようにしようと思うのだが, WordPress のパスワードを平文で流すのは日頃のポリシーに反する。で,サーバ (WindowsXP SP3 (x86)) 上で停止していた SSL 対応を復活してやろうと思い立った。もともと, Apache 2.4 win32 binaries は,Build with apr-1.4.6 apr-util-1.4.1 apr-iconv-1.2.1 openssl-1.0.1e zlib-1.2.7 pcre-8.32 libxml2-2.9.0 lua-5.1.5 expat-2.1.0 だし, WordPress のログインに私が使うだけなので,自前認証局を作成して Apache の mod_ssl を使えばいいかと思った。
まずは,自前認証局のために, cakey.pem と cacert.pem を作る。普通, Windows 上では CA.pl を使うのだが, Apache 2.4 win32 binaries には CA.pl が入っていなかった。というわけで, openssl.exe をコマンドラインで使うことにする。どうやったらいいかは, the document page (魚拓です)にあった。
Error opening CA private key ./myCA/private/cakey.pem
3464:error:02001003:system library:fopen:No such process:.cryptobiobss_file.c:398:fopen(‘./myCA/private/cakey.pem’,’rb’)
3464:error:20074002:BIO routines:FILE_CTRL:system lib:.cryptobiobss_file.c:400:
unable to load CA private key
openssl.cnf のカスタマイズ:
RANDFILE = $ENV::HOME/.rnd —> RANDFILE = $ENV::HOME.rnd
#oid_file = $ENV::HOME/.oid —> #oid_file = $ENV::HOME.oid
dir = ./demoCA —> dir = (drive xx):myCA (絶対パスじゃないとダメみたい)
certs = $dir/certs —> certs = $dircerts
crl_dir = $dir/crl —> crl_dir = $dircrl
database = $dir/index.txt —> database = $dirindex.txt
new_certs_dir = $dir/newcerts —> new_certs_dir = $dirnewcerts
certificate = $dir/cacert.pem —> certificate = $dircacert.pem
serial = $dir/serial —> serial = $dirserial
crlnumber = $dir/crlnumber —> crlnumber = $dircrlnumber
crl = $dir/crl.pem —> crl = $dircrl.pem
private_key = $dir/private/cakey.pem —> private_key = $dirprivatecakey.pem
RANDFILE = $dir/private/.rand —> RANDFILE = $dirprivate.rand
もし, TSA (Time Stamping Authority) を使うなら,同じように [ tsa_config1 ] のとこをカスタマイズ。
RSA private key のデフォルトとして, 2048 ビットを使うので,
default_bits = 1024 —> default_bits = 2048
ところで, (drive x):(Apache bin dir) へのパスを通していない。このためにしか使わないので,サーバ上で余計なパスを追加したくないからだが,この辺は私の流儀なので,各自の流儀でやってください。
Enter PEM pass phrase: xxxxxxxxxxxxxxxx (cakey.pem 用の pass phrase)
Verifying – Enter PEM pass phrase: xxxxxxxxxxxxxxxx (cakey.pem 用の pass phrase)
Country Name:JP (今回作るすべてのキーで同一)
State or Province Name:FUKUOKA (今回作るすべてのキーで同一)
Locality Name:FUKUOKA (今回作るすべてのキーで同一)
Organization Name:o6asan’s Web Site
Organizational Unit Name:myCA
Common Name:o6asan.com (ここは省略不可)
Email Address:私のメールアドレス
A challenge password: 省略
An optional company name: 省略
Enter pass phrase for (drive xx):myCAprivatecakey.pem: xxxxxxxxxxxxxxxx (cakey.pem 用の pass phrase)
Sign the certificate? [y/n]: y
1 out of 1 certificate requests certified, commit? [y/n] y
>copy cacert.pem (drive x):(Apache conf dir) (サーバ用の cacert.pem)
>copy cacert.pem my_ca.crt (クライアント用の my_ca.crt)
server.key と server.crt を作る。
Enter PEM pass phrase: xxxxxxxxxxxxxxxx (server.key 用の pass phrase)
Verifying – Enter PEM pass phrase: xxxxxxxxxxxxxxxx (server.key 用の pass phrase)
Country Name:JP (今回作るすべてのキーで同一)
State or Province Name:FUKUOKA (今回作るすべてのキーで同一)
Locality Name:FUKUOKA (今回作るすべてのキーで同一)
Organization Name:o6asan’s Web Site
Organizational Unit Name:WordPress
Common Name:o6asan.com (ここは省略不可)
Email Address:私のメールアドレス
A challenge password: 省略
An optional company name: 省略
Enter pass phrase for (drive xx):myCAprivatecakey.pem: xxxxxxxxxxxxxxxx (cakey.pem 用の pass phrase)
Sign the certificate? [y/n]: y
1 out of 1 certificate requests certified, commit? [y/n] y
>copy server.crt (drive x):(Apache conf dir)
>copy server.key cp_server.key
>(drive x):(Apache bin dir)openssl rsa <cp_server.key> (drive x):(Apache conf dir)server.key
Enter pass phrase: xxxxxxxxxxxxxxxx (server.key 用の pass phrase)
最後に clientcert.p12 を作る。これは,クライアント認証用である。
Enter PEM pass phrase: xxxxxxxxxxxxxxxx (client.key 用の pass phrase)
Verifying – Enter PEM pass phrase: xxxxxxxxxxxxxxxx (client.key 用の pass phrase)
Country Name:JP (今回作るすべてのキーで同一)
State or Province Name:FUKUOKA (今回作るすべてのキーで同一)
Locality Name:FUKUOKA (今回作るすべてのキーで同一)
Organization Name:o6asan’s Web Site
Organizational Unit Name:Administration
Common Name:o6asan (ここは省略不可)
Email Address:私のメールアドレス
A challenge password: 省略
An optional company name: 省略
Enter pass phrase for (drive xx):myCAprivatecakey.pem: xxxxxxxxxxxxxxxx (cakey.pem 用の pass phrase)
Sign the certificate? [y/n]: y
1 out of 1 certificate requests certified, commit? [y/n] y
Enter pass phrase for client.key: xxxxxxxxxxxxxxxx (client.key 用の pass phrase)
Enter Export Password: xxxxxxxxxxxxxxxx (クライアント PC 用のパスワード)
Verifying – Enter Export Password: xxxxxxxxxxxxxxxx (クライアント PC 用のパスワード)
cmd.exe を閉じる。
これで, Apache conf ディレクトリに cacert.pem, server.crt, server.key ができ,リムーバルメディア上の myCA 内には, my_ca.crt と clientcert.p12 がある。この5つがあれば,クライアント認証も使える。
カレントの httpd.conf の以下の行をアンコメントする。
Apache extra conf ディレクトリにある httpd-ssl.conf をカスタマイズする。
Listen 443 —> Listen xxxxx (443のままでも構わない)
<VirtualHost _default_:443> —> <VirtualHost _default_:xxxxx>
DocumentRoot “c:/Apache24/htdocs” —> DocumentRoot “自鯖のドキュメントルート”
ServerName www.example.com:443 —> ServerName o6asan.com:xxxxx
ServerAdmin admin@example.com —> ServerAdmin 私のメールアドレス
ErrorLog “c:/Apache24/logs/error.log”
—> ErrorLog “|bin/rotatelogs.exe -l -f logs/error.%Y.%m.%d 86400″ (自鯖のフォーマットで)
TransferLog “c:/Apache24/logs/access.log”
—> TransferLog “|bin/rotatelogs.exe -l -f logs/access.%Y.%m.%d 86400″ (自鯖のフォーマットで)
#SSLCACertificateFile “c:/Apache24/conf/ssl.crt/ca-bundle.crt”
—> SSLCACertificateFile “C:/Apache24/conf/cacert.pem”
#SSLVerifyClient require —> SSLVerifyClient require
#SSLVerifyDepth 10 —> SSLVerifyDepth 10 SSLVerifyDepth 1
<Directory “c:/Apache24/cgi-bin”> —> <Directory “自鯖の cgi-bin ディレクトリ”>
Apache を再起動。
my_ca.crt と clientcert.p12 を WiFi 端末 のブラウザにインポート。
あとは, WordPress のセッティングだが,こっちの方がやったことないので,大変そうだ。
追記(6/19):
この後, SSL で WordPress にログインしようとしたら,即座に「複数サイト機能はポート番号を含まない URL のみで動作します」というメッセージが戻ってきた。仕方がないので, xxxxx にしていたポートをデフォルトに戻した。(^^;)
This website uses cookies.
View Comments
iisの記事を読んでいてオープンソースとwindowsの間に微妙なずれや隙間があることに違和感を感じていました。動かないことはないけど、改造が必要だったりとそんなのばかりみていました。
元々windowsをつかうことはありませんが、
最近はアプリのダウンロードサイトにいくとwindows版、Linux版なんてあるんで動くOSやファイルシステムは違えど機能は一緒だと思っていましたが、apache2.4の件といいちょっと違うみたいですね。
くりくりさん,こんばんは。
> apache2.4の件といいちょっと違うみたいですね。
apache2.4の件てmpm winnt のこととかですか。
Windows 関係でのビルドはかなり面倒らしいのを聞いたことがあります。実際にやったことがないので,操作そのものが面倒なのか,いろいろそろえるのにお金がかかるのが面倒なのかは,不明です(爆)。