[apache2+SSL] SSLの構築・設定

SSLサイトを構築するために、当サイト用の公開鍵・秘密鍵・認証局提出用の認証鍵の作成をしてみます。

本当は…ベリサインとか、その手の認証局に提出して認証鍵に承認してもらうものですが、実験として自分で認証をすることにします。暗号化目的だけであれば、これはこれでいいのかもしれません(^^;

[ 秘密鍵の作成 ]

> openssl genrsa -des3 -rand /var/log/messages -out www.kenti.jp.pem
1024

23168 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:
(同じものをもういちど)

こうして、www.kenti.jp.pem という秘密鍵ファイルが出来ます。間違ってもweb領域に置かないように…。

それと、パスフレーズを忘れないようにしましょう。忘れると、以下の公開鍵などができませんです。。。

[ 認証局への認証鍵作成 ]

> openssl req -new -key www.kenti.jp.pem -out www.kenti.jp.csr

Using configuration from /etc/ssl/openssl.cnf

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]:Fukushima

Locality Name (eg, city) []:Koriyama

Organization Name (eg, company) [Internet
Widgits Pty Ltd]:
kenti

Organizational Unit Name (eg, section)
[]:

Common Name (eg, YOUR name) []:www.kenti.jp

Email Address []:info@kenti.jp

Please enter the following ‘extra’ attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:

ここで、www.kenti.jp.csr というファイルができあがります。本来はこのファイルを認証局へ送って、費用を払えばいいらしいです。(^^ゞ

でも今回は、自分で認証してしまいます。

[ 自分が認証局のつもりで認証をし、公開鍵の作成 ]

> openssl x509 -req -days 365 -in www.kenti.jp.csr -signkey
www.kenti.jp.pem -out www.kenti.jp.crt

Signature ok

subject=/C=JP/ST=Fukushima/L=Koriyama/O=kenti/CN=www.kenti.jp/Email=info@kenti.jp

Getting Private key

Enter PEM pass phrase: (秘密鍵のパスフレーズを入力)

これで、自分が認証・署名した公開鍵、www.kenti.jp.crt ができあがります。

ここまでできあがれば大丈夫でしょう。

あとは、秘密鍵の中に、パスフレーズを埋め込んでおくと、SSLページを表示させるときにパスフレーズを入力する必要がなくなりますので、やっておくといいのかな…。

(我が家はこの方法じゃないと、SSLページをうまく表示してくれませんでした。)

[ 秘密鍵にパスフレーズを埋め込む ]

> mv www.kenti.jp.pem www.kenti.jp.pem.buckup (念のためバックアップ)

> openssl rsa -in www.kenti.jp.pem.buckup -out www.kenti.jp.pem

read RSA key

Enter PEM pass phrase: (秘密鍵のパスフレーズを入力)

writing RSA key

こうして、www.kenti.jp.pem という秘密鍵ファイルに、パスフレーズが埋め込まれました。

次に、ApacheのSSL設定を行います。設定は、ssl.confに書きます。

基本的には、デフォルトの設定のままで大丈夫ですが、当サイトの設定は以下の通りです。

(webからのパスワード変更、メールの転送設定のページなどに使っています。)

[ /usr/local/apache2/conf/ssl.conf
] ※白地部分が書き換えた場所です

<IfDefine SSL>

Listen 443

AddType application/x-x509-ca-cert .crt

AddType application/x-pkcs7-crl .crl

SSLSessionCache dbm:logs/ssl_scache

SSLSessionCacheTimeout 300

SSLMutex file:logs/ssl_mutex

SSLRandomSeed startup builtin

SSLRandomSeed connect builtin

<VirtualHost 61.206.126.90:443>

ServerName www.kenti.jp:443

ServerAdmin info@kenti.jp

DocumentRoot “/home/www/sslpage_html”

ScriptAlias /cgi-bin/ /home/www/sslpage_html/cgi-bin/

SSLEngine on

SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

(公開鍵の場所を指定します)

SSLCertificateFile /usr/local/www/www.kenti.jp.crt

(秘密鍵の場所を指定します)

SSLCertificateKeyFile /usr/local/www/www.kenti.jp.pem

SetEnvIf User-Agent “.*MSIE.*”
¥

nokeepalive ssl-unclean-shutdown ¥

downgrade-1.0 force-response-1.0

</VirtualHost>

</IfDefine> 

我が家はIPベースで動かす方法をとったので、通常のwebページにもVirtualの設定を行いました。

こうすることで、普通のwebページと、SSLページを同居させることが出来ます。

[ /usr/local/apache2/conf/httpd.conf
] ※一番最後に追加

NameVirtualHost 61.206.126.90:80

<VirtualHost 61.206.126.90:80>

ServerName www.kenti.jp

DocumentRoot /home/www/html

</VirtualHost>

あとは、ApacheをSSL機能付きで、以下のように起動させます。

気をつけることは、通常の起動方法とは少しだけ変わります。

# /usr/local/apache2/bin/apachectl
stop (既に動作していたら、止めます)

# /usr/local/apache2/bin/apachectl sslstart (SSL機能付きでスタート)

普通に、start ではないことに注意して下さい。

無事起動したか、アクセスして確認してみて下さい。

[ 通常のwebページ ] http://www.kenti.jp

[ SSLのページ ] https://www.kenti.jp/

(自己認証のため、警告が出ますがそのまま進むとSSLページに行きます)