>> HOME >> FC5 MENU >> Webサーバー間通信暗号化 (Apache + mod_ssl)
SSL(Secure Sockets Layer) は、データを暗号化してやり取りする方式です。SSL を使用すると送信するデータが暗号化されるので、プライバシーに関わる情報を第三者に見られずにやり取りすることができます。ここでは、Webサーバーに mod_ssl を導入して、URLを http:// ではなく、https:// でアクセスすることによって、Webサーバー間の通信の暗号化を実現します。

1. mod_ssl インストール
2. 証明書の作成
1 ) CA 用秘密鍵(ca.key)の作成
2 ) CA 証明書(ca.crt)の作成
3 ) サーバ用秘密鍵(server.key)の作成
4 ) サーバ用公開鍵(server.csr)の作成
5 ) サーバ用秘密鍵(server.key)からのパスフレーズ削除
6 ) サーバ用証明書(server.crt)の作成
7 ) CA 証明書をブラウザにインポートするための ca.der ファイル作成
8 ) 作成した各ファイルのパーミッション変更
3. SSL の設定
1 ) SSL 設定ファイル /etc/httpd/conf.d/ssl.conf の編集
4. Apache の再起動
1 ) httpd の再起動
5. SSL の動作確認
6. クライアントへの証明書インストール
1 ) 証明書のダウンロード
2 ) 証明書のインポートウィザードの起動
3 ) 証明書のインストール
7. 公開前の準備
1. mod_ssl インストール
[root@linux ~]# yum -y install mod_ssl 
Loading "installonlyn" plugin
Setting up Install Process
Setting up repositories
core                                                                 [1/3]
core                      100% |=========================| 1.1 kB    00:00
updates                                                              [2/3]
updates                   100% |=========================|  951 B    00:00
extras                                                               [3/3]
extras                    100% |=========================| 1.1 kB    00:00
Reading repository metadata in from local files
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for mod_ssl to pack into transaction set.
mod_ssl-2.2.2-1.0.i386.rp 100% |=========================|  25 kB    00:00
---> Package mod_ssl.i386 1:2.2.2-1.0 set to be updated
--> Running transaction check
--> Processing Dependency: libnal.so.1 for package: mod_ssl
--> Processing Dependency: libdistcache.so.1 for package: mod_ssl
--> Restarting Dependency Resolution with new changes.
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for distcache to pack into transaction set.
distcache-1.4.5-13.i386.r 100% |=========================| 9.3 kB    00:00
---> Package distcache.i386 0:1.4.5-13 set to be updated
--> Running transaction check

Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
 mod_ssl                 i386       1:2.2.2-1.0      updates            99 k
Installing for dependencies:
 distcache               i386       1.4.5-13         core              120 k

Transaction Summary
=============================================================================
Install      2 Package(s)
Update       0 Package(s)
Remove       0 Package(s)
Total download size: 219 k
Downloading Packages:
(1/2): distcache-1.4.5-13 100% |=========================| 120 kB    00:00
(2/2): mod_ssl-2.2.2-1.0. 100% |=========================|  99 kB    00:02
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing: distcache                    ######################### [1/2]
  Installing: mod_ssl                      ######################### [2/2]

Installed: mod_ssl.i386 1:2.2.2-1.0
Dependency Installed: distcache.i386 0:1.4.5-13
Complete!
2. 証明書の作成
1 ) CA 用秘密鍵(ca.key)の作成
※ CA用秘密鍵(ca.key)とサーバ用秘密鍵(server.key)作成時のパスフレーズは違うものを指定する必要があります。
※ 第三者認機関 ( VeriSign 等 ) を利用の場合は、この作業は必要ありません。
[root@linux ~]# cd /etc/httpd/conf/ 

# 乱数データ(rand.dat)を使用してCA用の鍵を作成
[root@linux conf]# openssl genrsa -des3 -out ca.key -rand rand.dat 1024 
0 semi-random bytes loaded
Generating RSA private key, 1024 bit long modulus
...............++++++
.................++++++
e is 65537 (0x10001)
# CA用のパスフレーズを入力
Enter pass phrase for ca.key: xxxxxxxxxxxxxx 
# 上と同じパスフレーズを確認入力
Verifying - Enter pass phrase for ca.key: xxxxxxxxxxxxxx 
2 ) CA 証明書(ca.crt)の作成
※ CA証明書とサーバ用公開鍵作成時の Organization Name は違うものを指定する必要があります。
※ 第三者認機関 ( VeriSign 等 ) を利用の場合は、この作業は必要ありません。
# CA用証明書を作成
[root@linux conf]# openssl req -new -x509 -days 365 -key ca.key -out ca.crt 
# CA用のパスフレーズを入力
Enter pass phrase for ca.key: xxxxxxxxxxxxxx 
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) [GB]: JP 
# 都道府県名を入力
State or Province Name (full name) [Berkshire]: Chiba 
# 市町村名を入力
Locality Name (eg, city) [Newbury]: Ichikawa 
# 組織名を入力
Organization Name (eg, company) [My Company Ltd]: Private_CA 
# 組織内ユニット名を入力
Organizational Unit Name (eg, section) []: Admin 
# サーバー名を入力
Common Name (eg, your name or your server's hostname) []: mountainbigroad.jp 
# 管理者メールアドレスを入力
Email Address []: webmaster@mountainbigroad.jp 
3 ) サーバ用秘密鍵(server.key)の作成
※ CA用秘密鍵(ca.key)とサーバ用秘密鍵(server.key)作成時のパスフレーズは違うものを指定する必要があります。
# サーバ用秘密鍵の作成(鍵長1024ビット)
[root@linux conf]# openssl genrsa -des3 -out server.key -rand rand.dat 1024 
0 semi-random bytes loaded
Generating RSA private key, 1024 bit long modulus
.......++++++
...................................................................++++++
e is 65537 (0x10001)
# サーバ秘密鍵用のパスフレーズを入力
Enter pass phrase for server.key: xxxxxxxxxxxxxx 
# 上と同じパスフレーズを確認入力
Verifying - Enter pass phrase for server.key: xxxxxxxxxxxxxx 
4 ) サーバ用公開鍵(server.csr)の作成
CA に送るデジタル証明書を作成します。第三者認機関 ( VeriSign 等 ) を利用の場合はこのファイルを送付します。
※ CA証明書とサーバ用公開鍵作成時の Organization Name は違うものを指定する必要があります。
# CAに送るデジタル証明書のリクエストファイル作成
[root@linux conf]# openssl req -new -key server.key -out server.csr 
# サーバ秘密鍵用のパスフレーズを入力
Enter pass phrase for server.key: xxxxxxxxxxxxxx 
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) [GB]: JP 
# 都道府県名を入力
State or Province Name (full name) [Berkshire]: Chiba 
# 市町村名を入力
Locality Name (eg, city) [Newbury]: Ichikawa 
# 組織名を入力
Organization Name (eg, company) [My Company Ltd]: MY_SERVER 
# 組織内ユニット名を入力
Organizational Unit Name (eg, section) []: Admin 
# サーバー名を入力
Common Name (eg, your name or your server's hostname) []: mountainbigroad.jp 
# 管理者メールアドレスを入力
Email Address []: webmaster@mountainbigroad.jp 

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: 
An optional company name []: 
5 ) サーバ用秘密鍵(server.key)からのパスフレーズ削除
Webサーバー起動時にパスフレーズを要求されないようにするため、サーバー用秘密鍵からパスフレーズを削除します。
# サーバー用秘密鍵からパスフレーズ削除
[root@linux conf]# openssl rsa -in server.key -out server.key 
# サーバー用秘密鍵作成時のパスフレーズを入力
Enter pass phrase for server.key: xxxxxxxxxxxxxx 
writing RSA key
6 ) サーバ用証明書(server.crt)の作成
サーバ用証明書を作成するには、mod_ssl 付属の "sign.sh" シェルスクリプトが必要になります。
mod_ssl: The Apache Interface to OpenSSL より mod_ssl-2.8.27-1.3.36.tar.gz を取得し、 "sign.sh" を取り出します。
※ 第三者認機関 ( VeriSign 等 ) を利用の場合は、この作業は必要ありません。
  サーバ用証明書は第三者認機関より提供されますので、そのファイルを所定の場所にコピーします。
[root@linux ~]# wget http://www.modssl.org/source/mod_ssl-2.8.27-1.3.36.tar.gz 
--03:22:03--  http://www.modssl.org/source/mod_ssl-2.8.27-1.3.36.tar.gz
           => `mod_ssl-2.8.27-1.3.36.tar.gz'
www.modssl.org をDNSに問いあわせています... 195.30.6.168
www.modssl.org|195.30.6.168|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 820,432 (801K) [application/x-tar]

100%[=====================================================================>] 820,432       97.49K/s    ETA 00:00

03:22:16 (75.98 KB/s) - `mod_ssl-2.8.27-1.3.36.tar.gz' を保存しました [820432/820432]

# 圧縮ファイルを解凍
[root@linux ~]# tar xvfz mod_ssl-2.8.27-1.3.36.tar.gz 
mod_ssl-2.8.27-1.3.36/ANNOUNCE
mod_ssl-2.8.27-1.3.36/CHANGES
:
:
mod_ssl-2.8.27-1.3.36/pkg.sslsup/mkcert.sh
mod_ssl-2.8.27-1.3.36/pkg.sslsup/sslsup.patch
取得できたら、サーバ用証明書(server.crt)を作成します。
※ CA証明書(ca.crt)とサーバ用公開鍵(server.csr)作成時の Organization Name が同じ場合、「error 18 at 0 depth lookup:self signed certificate ...」などとエラーとなります。
[root@linux conf]# /root/mod_ssl-2.8.27-1.3.36/pkg.contrib/sign.sh server.csr 
CA signing: server.csr -> server.crt:
Using configuration from ca.config
# CA用のパスフレーズを入力
Enter pass phrase for ./ca.key: xxxxxxxxxxxxxx 
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'JP'
stateOrProvinceName :PRINTABLE:'Chiba'
localityName :PRINTABLE:'Ichikawa'
organizationName :T61STRING:'Private_Server'
organizationalUnitName:PRINTABLE:'Admin'
commonName :PRINTABLE:'mountainbigroad.jp'
emailAddress :IA5STRING:'webmaster@mountainbigroad.jp'
Certificate is to be certified until Jul 6 18:24:05 2007 GMT (365 days)
Sign the certificate? [y/n]: y 

1 out of 1 certificate requests certified, commit? [y/n]: y 
Write out database with 1 new entries
Data Base Updated
CA verifying: server.crt <-> CA cert
server.crt: OK
7 ) CA 証明書をブラウザにインポートするための ca.der ファイル作成
※ 第三者認機関 ( VeriSign 等 ) を利用の場合は、この作業は必要ありません。
また、CA 証明書をブラウザにインポートする必要が無い場合も、この作業は必要ありません。
[root@linux conf]# openssl x509 -inform pem -in ca.crt -outform der -out ca.der 
8 ) 作成した各ファイルのパーミッション変更
[root@linux conf]# chmod -c -R 400 server.* ca.* 
`server.crt' のモードを 0400 (r--------) に変更しました
`server.csr' のモードを 0400 (r--------) に変更しました
`server.key' のモードを 0400 (r--------) に変更しました
`ca.crt' のモードを 0400 (r--------) に変更しました
`ca.db.certs' のモードを 0400 (r--------) に変更しました
`ca.db.certs/01.pem' のモードを 0400 (r--------) に変更しました
`ca.db.index' のモードを 0400 (r--------) に変更しました
`ca.db.serial' のモードを 0400 (r--------) に変更しました
`ca.der' のモードを 0400 (r--------) に変更しました
`ca.key' のモードを 0400 (r--------) に変更しました
3. SSL の設定
1 ) SSL 設定ファイル /etc/httpd/conf.d/ssl.conf の編集
[root@linux ~]# vi /etc/httpd/conf.d/ssl.conf 
  :
# General setup for the virtual host, inherited from global configuration
# コメントを解除
DocumentRoot "/var/www/html"
#ServerName www.example.com:443

  :
  :
# Server Certificate:
# Point SSLCertificateFile at a PEM encoded certificate. If
# the certificate is encrypted, then you will be prompted for a
# pass phrase. Note that a kill -HUP will prompt again. A test
# certificate can be generated with `make certificate' under
# built time. Keep in mind that if you've both a RSA and a DSA
# certificate you can configure both in parallel (to also allow
# the use of DSA ciphers, etc.)
# 変更 ( 作成した server.crt のパスを指定 )
SSLCertificateFile /etc/httpd/conf/server.crt
#SSLCertificateFile /etc/httpd/conf/ssl.crt/server-dsa.crt

# Server Private Key:
# If the key is not combined with the certificate, use this
# directive to point at the key file. Keep in mind that if
# you've both a RSA and a DSA private key you can configure
# both in parallel (to also allow the use of DSA ciphers, etc.)
# 変更 ( 作成した server.key のパスを指定 )
SSLCertificateKeyFile /etc/httpd/conf/server.key
#SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server-dsa.key

  :
  :
4. Apache の再起動
1 ) httpd の再起動
[root@linux ~]# service httpd restart 
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]
5. SSL の動作確認
Windowsクライアントより [https://サーバのアドレス/] でアクセスして下記の様な画面が表示されればOKです。
※ Intenet Explorerでは、この警告画面から証明書のインストールができません(処理的には成功するが、インストールはされていない)。証明書をインストールするには、別途、証明書をダウンロード、インストールの必要があります。
※ 大抵の第三者認機関 ( VeriSign 等 ) を利用の場合はこの画面は表示されません(デフォルトでインポート済)。
セキュリティの警告
6. クライアントへの証明書インストール
※ 大抵の第三者認機関 ( VeriSign 等 ) を利用の場合はこの作業は必要ありません(デフォルトでインポート済)。
1 ) 証明書のダウンロード
下記画面で [保存] をクリックし、適当なフォルダにダウンロードします。
ファイルのダウンロード−セキュリティの警告
2 ) 証明書のインポートウィザードの起動
ダウンロードした ca.der を右クリックし、[証明書のインストール] を選択します。
右クリック
[開く(O)] をクリックします。
開いているファイル−セキュリティの警告
3 ) 証明書のインストール
「証明書のインポートウィザード」が起動しますので、[次へ(N)] をクリックします。
証明書のインポートウィザードの開始
[証明書をすべて次のストアに配置する(P)] を選択し、[参照(R)] ボタンをクリックして、「証明書ストア:」に [信頼されたルート証明機関] を選択します。その後、[次へ(N)] をクリックします。
証明書ストア
[完了] をクリックしてインポートウィザードを完了します。
※ セキュリティの警告画面が表示されますが、[OK] ボタンをクリックします。
証明書のインポートウィザードの完了
OK
7. 公開前の準備
ホームページを外部に公開するには、ルータの設定で ポート番号443番(https: http protocol over TLS/SSL) を開けてください。また、外部よりDNS名でアクセスするには、ドメイン名の取得を行っている必要があります。