[Debian][Apache] Apache2でSSL(https)を使用する

Debian(Etch) にて Apache2でSSLを使用できるようにする。

https(HTTP over SSL)は通常は暗号化されていないWEBブラウジングを
暗号化して途中経路で盗聴されないようにするために使用される。
それにより例えばログインが必要なサイトにて入力したユーザID/パスワードが
途中経路で盗聴/記録がされても大丈夫なようにする。

注意点としては、これは途中経路での盗聴を防ぐためのものであって
WEBサイト自体が安全であることを保証するものではないことである。

また本来、
暗号化のキーはベリサインなどの企業から購入するのが普通であるが
ここではテスト/プライベート用に自分でキーを作ってみる。

 

まず、もちろんApache2のインストールと設定がされていることが必要。
ここでは先に書いた記事
[Debian] [Apache] Apache2のインストールと設定
の通りに設定されているものとする。
CGIを利用する場合においては
[Debian] [Apache] Apache2でCGIの実行
[Debian] [Apache] Apache2でmod_perlを使用する
の設定がされているものとする。

1.OpenSSLの設定
もしまだOpenSSLがインストールされていなければインストールする。

$ su -
# aptitude install openssl

 /etc/ssl/openssl.cnf を書き換える。

# cd /etc/ssl/
# cp openssl.cnf openssl.cnf.default
# vi openssl.cnf

 以下の部分を書き換える。

・・・
[usr_cert]
・・・
nsCertType = server  コメントアウトを外して有効化する
・・・
[v3_ca]
・・・
nsCertType = sslCA, emailCA コメントアウトを外す

2.秘密鍵の作成
サイトの秘密鍵を作成する。

# cd /usr/lib/ssl/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: もう一度パスフレーズを入力
-----
(省略)
-----
Country Name (2 letter code) [AU]: JPと入力
State or Province Name (full name) [Some-State]: Tokyoなど
Locality Name (eg, city) []: 地域名(shibuyaなど)
Organization Name (eg, company) 
     [Internet Widgits Pty Ltd]: Enter
Organizational Unit Name (eg, section) []: Enter
Common Name (eg, YOUR name) []: WEBサーバー名
Email Address []: Enter

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: Enter
An optional company name []: Enter
Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for 
    ./demoCA/private/./cakey.pem: またパスフレーズ

このままではApacheの起動の度にパスフレーズの入力を求められるのでパスフレーズを消す。

# openssl rsa -in demoCA/private/cakey.pem \
>             -out demoCA/private/cakey.pem

3.証明書の作成

# openssl x509 -in demoCA/cacert.pem \
>              -out demoCA/cacert.crt

4.秘密鍵と証明書をコピー
場所はどこでもいいのだけど
/etc/apache2/ssl/ 以下にコピーしておく

# cd /etc/apache2/
# mkdir ssl
# cd ssl
# cp /usr/lib/ssl/misc/demoCA/private/cakey.pem .
# cp /usr/lib/ssl/misc/demoCA/cacert.crt .

5.Apache2のSSL設定ファイルの作成
ひな形があるのでそれを持ってきて編集する。

# cd /etc/apache2/sites-available/
# cp /usr/share/doc/apache2.2-common/examples/ \
>    apache2/extra/httpd-ssl.conf.gz .
# gunzip httpd-ssl.conf.gz
# cp httpd-ssl.conf httpd-ssl.conf.default
# vi httpd-ssl.conf

/etc/apache2/sites-available/httpd-ssl.conf
を以下のように、自分の環境に合わせて変更する。

・・・
<virtualhost サーバー名:443>
・・・
DocumentRoot "/home/www-data/public_html"
・・・
ServerName サーバー名:443
・・・
SSLCertificateFile /etc/apache2/ssl/cacert.crt
・・・
SSLCertificateKeyFile /etc/apache2/ssl/cakey.pem

・・・ # CGIをSSLで使用する場合は以下の赤字の部分を変更/追加
<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>
ScriptAlias /cgi-bin/ /home/www-data/cgi-bin/
<Directory "/home/www-data/cgi-bin">
        <IfModule perl_module>
                SetHandler perl-script
                PerlHandler ModPerl::PerlRun
                PerlSendHeader On
        </IfModule>
        SSLOptions +StdEnvVars
</Directory>
 

 

6.SSLモジュールとSSLサイトの有効化
a2enmodとa2ensite コマンドで有効化してApache2を再起動する。

# a2enmod ssl
# a2ensite httpd-ssl.conf
# /etc/init.d/apache2 restart

無効化するときは、a2dismod, a2dissite を使う。

# a2dissite httpd-ssl.conf
# a2dismod ssl
# /etc/init.d/apache2 restart



ブラウザを起動して確認してみる。
https://サーバー名/  などでアクセスする。
開いたときに証明書に関する警告が出て、正常に見れればOK

/var/log/apache2/error_log などのログを見てエラーが起こっていないかも見ておく。

 

以上。

 

----- 

参考記事:
Debian etchでSSL - よしだメモ
Apache/SSL(http)対応にする(Debian Etch編) - 俺の基地
 

-----
2008/12/28:体裁整え直し


 

 

この記事が役に立ったと思ったら拍手をお願いします!


カテゴリ:

トラックバック(0)

このブログ記事を参照しているブログ一覧: [Debian][Apache] Apache2でSSL(https)を使用する

このブログ記事に対するトラックバックURL: http://www.net-phantom.jp/mt/mt-tb.cgi/76

コメントする

プロフィール

NeverNothing
種族:人間
性別:オス
国籍:日本
年齢:秘密
職業:秘密
IT関連会社や
研究団体などを
転々としてきた。
プログラミングや
サーバー構築/運用などの
仕事を経験してきた。

現在求職中

京都出身 東京在住

問い合わせ

リンク

Debian関連

その他Linux関連

Apache関連

Java関連

PostgreSQL関連

MySQL関連

PHP関連


著者他サイト/ブログ

 

このブログが役に立った、
と思ったらここをクリック