「mod_ssl」をつかってApache2を「https」で接続できるようにしようと思います。
まずは「mod_ssl」をインストールします。
<code>
$ su
# apt-get install libapache-mod-ssl
</code>
これから「/etc/apache2/ssl」に鍵などを作っていきます。
<code>
# cd /etc/apache2
/etc/apache2# mkdir ssl
/etc/apache2/ssl# cd ssl
/etc/apache2/ssl# cp /usr/lib/ssl/misc/CA.sh ./CA.sh
CA certificate filename (or enter to create) (空欄のままEnter)
Enter PEM pass phrase:(パスフレーズを決める。一時的なものなので何でもよいが覚えておくこと)
Verifying - Enter PEM pass phrase:(もう一度パスフレーズ)
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Kyoto(都道府県)
Locality Name (eg, city) []:Kyoto(市区町村)
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Personal(個人なので)
Organizational Unit Name (eg, section) []:web(ここは組織単位らしい)
Common Name (eg, YOUR name) []:hogehoge(ニックネームでも入れましょう)
Email Address []:(メールアドレス)
A challenge password []:(空欄)
An optional company name []:(空欄)
Enter pass phrase for ./demoCA/private/./cakey.pem:(最初に決めたパスフレーズ)
</code>
これで認証局の証明書関係ができます。
続いて鍵の作成。
<code>
/etc/apache2/ssl# /usr/bin/openssl genrsa -rand /var/log/apache2/access.log -des3 -out ./serverkey.pem 1024
1407562 semi-random bytes loaded
Generating RSA private key, 1024 bit long modulus
...++++++
.........++++++
e is 65537 (0x10001)
Enter pass phrase for ./serverkey.pem:(決めたパスフレーズ)
Verifying - Enter pass phrase for ./serverkey.pem:(もう一度)
</code>
以下のコマンドで作成した鍵のパスフレーズを削除します。
<code>
/usr/bin/openssl rsa -in ./serverkey.pem -out ./serverkey.pem
Enter pass phrase for ./serverkey.pem:(決めたパスフレーズ)
/usr/bin/openssl rsa -in ./demoCA/private/cakey.pem -out ./demoCA/private/cakey.pem
Enter pass phrase for ./demoCA/private/cakey.pem:(決めたパスフレーズ)
</code>
「writing RSA key」とでれば成功。
証明書を発行する為の申請書ファイル「CSR」の作成。質問は基本的に上と同じ。
コマンド中の365は有効日数。変更可能。
<code>
/usr/bin/openssl req -new -days 365 -key ./serverkey.pem -out ./csr.pem
Country Name (2 letter code) [AU]:JA
State or Province Name (full name) [Some-State]:Kyoto(都道府県)
Locality Name (eg, city) []:Kyoto(市区町村)
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Personal(個人なので)
Organizational Unit Name (eg, section) []:web
Common Name (eg, YOUR name) []:(ニックネームでも)
Email Address []:(メールアドレス)
A challenge password []:(ここはちゃんとパスワードを決める)
An optional company name []:(空欄)
</code>
証明書を作成。
<code>
/usr/bin/openssl ca -in ./csr.pem -keyfile ./demoCA/private/cakey.pem -cert ./demoCA/cacert.pem -out ./cert.pem
</code>
「/etc/apache2/ssl」に「cert.pem」ができてればOK。
(なぜか参考にしたページのような質問はなかった。)
続いてApache2の設定。
既に「/etc/apache2/sites-available」あるサイト設定(以下の例は(default))を「default-ssl」(ファイル名は使用するサイト設定にあわせてください)コピーします。SSLを有効にしたいサイトはすべて行ってください。
そのファイルを以下のように編集します。
<code>
NameVirtualHost * => NameVirtualHost *:443
virtualhost * => virtualhost *:443
ServerName(あるいはServerAliasも) hogehoge.com => ServerName hogehoge.com:443
</code>
以下を追加
<code>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/demoCA/cacert.pem
SSLCertificateKeyFile /etc/apache2/ssl/demoCA/private/cakey.pem
</code>
このサイト設定を有効にする為に(このコマンドは最近知った。自動でsites-enabledにシンボリックリンクを作成してくれる。)
<code>
#a2ensite default-ssl
</code>
さらにポート443からの接続を受けるために「/etc/apache2/ports.conf」に「Listen 443」を追加して保存。
そしてApache2の再起動
<code>
# /etc/init.d/apache2 restart
</code>
これで「https://」で接続できれば成功。この証明書は信頼されていませんとでますがこれはどうしようもありません、お金を払って「VeriSign」などから証明書をもらえばこの問題も解決します。
ついでにphpMyAdminへの接続を「http」からは接続できないようにすることもできます。セキュリティーを考えていろいろ設定しましょう。基本的にSSLなしとSSLありの設定は別サイトとして扱われるので共通の編集はどちらにもしましょう。
今回参考にさせていただいたサイト。
mod_sslの設定
暗号化通信の有効化 [mod_ssl]