【特集】SSLでセキュアなECサイト構築
〜ECサイト構築に必要なSSL、その仕組みと構築手順を詳細解説〜

田中直人
ネットマークス
2001/3/6


Part.3 SSLサーバのセットアップと実際の運用

 ここでは、実際にSSLが使用可能なWebサーバを構築する方法について解説する。今回は、独自CA局を構築して、そこで電子証明書を発行している。

(1) Webサーバ環境の用意

 今回、Webサーバ構築の作業は以下の環境にて実施した。

●今回使用したWebサーバのスペック
Spec Sheet
機種名
Sun Ultra 5
搭載メモリ
256Mbytes
HDD容量
4Gbytes
OS
Solaris 2.6
コンパイラ
gcc 2.8.1
その他、必要な環境
Perl 5.005_03
FQDN(サーバのDNS名)
panzer.netmarks.co.jp

 Webサーバソフトウェアは、フリーのWebサーバとして実績のあるApache注1にSSLパッチを適用したものを選択した。使用したソフトウェアパッケージは以下のとおりである。

注1 記事掲載時は、apache_1.3.12で解説を致しましたが、以下のバージョンのApacheにおいて、脆弱性が存在することが発表されております(2002年7月12日現在)。お手数ですが、最新のバージョンのご使用をお薦めいたします。また、今後も同様のセキュリティに関する情報が配信される可能性もありますので、IPA/ISECJPCERT/CCなどで最新情報を入手されることをお薦めいたします。

●対象バージョン(2002年7月12日現在)
 1.x系: 1.2.2以上 1.3.24まで
 2.0系: 2.0以上 2.0.36まで

●使用したファイルと入手先
File List
apache_1.3.12.tar.gz
apache_1.3.12+ssl_1.41.tar.gz
openssl-0.9.6.tar.gz

 OpenSSLのコンパイルにはPerlが必要となるため、Perlとそのライブラリをあらかじめインストールしておく必要がある。

 Apacheの最新バージョンは1.3.17(2001年2月14日現在)であるが、対応するSSLパッチが存在しないため、今回はApache 1.3.12を使用した。また、SSLパッチ適用時にpatch 2.1または、patch 2.5が必要となるため、こちらもあらかじめインストールしておく必要がある。

 SSLの動作確認のためのクライアント環境としては、以下のものを利用した。

●クライアントマシンのスペック
Spec Sheet
機種名
自作マシン
CPU
Celeron-300AMHz
搭載メモリ
128Mbytes
HDD容量
12Gbytes
使用Webブラウザ
IE 5.01SP1(暗号強度128bits)

 蛇足ではあるが、IIS(Internet Information Server)については、基本的にSSL機能を標準で持っているため、電子証明書をインストールして、簡単な設定を実施することによりSSLを使用することが可能である。ただし、電子証明書については、ほかのソフトウェア(OpenSSLなど)を用いて、別途作成する必要がある。

(2) 環境構築の手順

 では実際に、用意した環境に手順に沿ってWebサーバとSSLのインストールと設定をしていこう。

1. ファイルの展開

 まず、先ほど用意した圧縮ファイルを展開する。

# gzip -d < apache_1.3.12.tar.gz | tar xvf -
# gzip -d < openssl-0.9.6.tar.gz | tar xvf -

2. opensslのインストール

 最初にOpenSSLをインストールする。今回はデフォルトである、「/usr/local/ssl」下にインストールを実施した。

# cd openssl-0.9.6<BR>
# ./config<BR>
# make<BR>
# make install

3. SSLパッチの適用

 展開されてできたApacheのディレクトリに移動して、SSLパッチを展開、適用する。

# cd apache_1.3.12
# gzip -d < ../apache_1.3.12+ssl_1.41.tar.gz | tar xvf -
# ./FixPatch

Your version of patch is OK.
Searching for a usable OpenSSL installation or source directory
OpenSSL sources were found in: /export/home/ssl/openssl-0.9.4
OpenSSL needs updating to include a function to read a specified number of
bytes from EGD - if you haven't applied the patch already and are using
OpenSSL 0.9.5a, then it needs applying
-n Do you want me to apply the OpenSSL EGD patch for you? [n]

 使用しているopensslは0.9.6のため、nを入力して「Enter」キーを押す。

OK, I won't apply the OpenSSL patch.
Using the source version of OpenSSL found in /export/home/ssl/openssl-0.9.4
If this is not what you want stop now and specify the path to OpenSSL
explicitly.

-n Do you want me to apply the fixed-up Apache-SSL patch for you? [n]

 Apacheにパッチを適用するため、yを入力して「Enter」キーを押す。以下、パッチの適用に関する処理が表示されるが、特記事項がないため、ここでは省略する。
 

4. Apacheのコンパイル、インストール

 パッチの適用後は、通常のApacheと同様にコンパイルを行う。今回は「/export/home/apache_1.3.12」にインストールするように設定した(デフォルトは「/usr/local/apache」)。

# ./configure --prefix=/export/home/apache_1.3.12
# make
# make install


(3) 電子証明書の作成

 SSLを利用するためには電子証明書を作成する必要がある。

 電子証明書を発行するには実際には以下のプロセスが必要となる。

  1. Webサーバの電子証明書の作成、認証局への送付
  2. 認証局(CA局)による署名の書き込み
  3. CA局の署名入り電子証明書の受け取り

 なりすまし防止のために第三者認証機関を使用する場合には、上記の手順に沿って電子証明書を作成する必要がある。ただし、今回の例にあるように、独自のCA局による電子証明書を作成する場合には、上記の作業をコマンド1つで実行することができる(実際には、OpenSSLにて独自のCA局を作成して、上記の3ステップを実行している)。

 独自CA局による電子証明書は、以下の「make certificate」コマンドを実行することにより作成可能であるが、ホームディレクトリに乱数のもととなる「.rnd」ファイルが必要となる。今回はrootで作業を実施しているため、ルートディレクトリ(「/」の直下)に「.rnd」ファイルを作成した。

make certificateコマンドは実際にはOpenSSLを起動して証明書の発行を実施している

 また、make certificate実行中に、証明書の作成に必要な情報を入力する必要がある。最低限、FQDN(サーバのDNS名)を入力しておかなければならない。ここのFQDNがアクセス時のホスト名と異なる場合、ユーザー側に警告が表示されるため、同じにしておくことが望ましい。

# ps -ef > /.rnd
# cd /src
# make certificate

 以下、make certificate実行時の入力例だ。

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) [Some-State]:Tokyo
Locality Name (eg, city) []:minato-ku
Organization Name (eg, company; recommended) []:Netmarks
Organizational Unit Name (eg, section) []:Consul
server name (eg. ssl.domain.tld; required!!!) []:panzer.netmarks.co.jp
Email Address []:webmaster@netmarks.co.jp

 作成された電子証明書は、今回はApacheのソースを展開したディレクトリの下の「SSLconf/conf/httpsd.pem」に保存される。今回作成した電子証明書を例として以下に記す。

-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQC2kf3ZJEralawkbT9rGTALjDp1CRVNm43hxKNR5Zh9/s8U7SVk
jjE2PYx9Y2ENVXaiAhc3tsCFXHXApk+7Q1gN5N+G1j+GY36raVM50ouxVmcX6QPf
e8GhBGfE5L2mUEzjxcEZgYGYB326efJN86dTyelP2Y6wG3liGAIlKl6/+wIDAQAB
AoGBAJufpnrJ7OSWYL5MQZrRRZsSVWId9ALLbg3cyDqvM2VzJqH347/rVRefL3pS
lBABobZHgfMD3OfRAK7PFXfS1+LN6W+RGpURDEGCq2ABcDvDVRz8bYJCzRM4q3ET
MZHph9glPex7lSx1SuiSkieaCfirK3ACdO3a42wrevr2Ca3BAkEA7RzC3iwpxp3X
D3H/YtY/tRL1T7Z4eL2Vuu4HA1gw5QZCbXCuY7r2XKQPEC2mPaghprreN+RTs72R
oxdpzV49bQJBAMUc/5qeRtHiGdPdCWY2bZ4r/ZCQ07VonOBEItmAkGMOT+YWx8AZ
0FyL4sgxarBOqc9uG8hIcH74dHsLCXIGGgcCQGWX3Sa0ZXHkTzEe9v2yLrm21cTB
ufyBvpXJRtf4AXsfo3agwReaE9S9tnaIGKJyV3jIuE3aVsK8hpoKfhqwNkECQD22
FHgt8XIoXXmtDBJKHAuXLi2iigWTmPnFmzuJOqsoge9BVoxYCJnQ2dFfV02XcyaU
DHKp6z51PtJ+5BgkvOUCQAGGW6n8u8nS2I8w/6Vg2D5rYBIJxcnxSglwJaRmZOLt
DRVFTbvrzrqY41vA1EWzjmT5tyXfFbplyxGQFZY06IA=
-----END RSA PRIVATE KEY-----

-----BEGIN CERTIFICATE-----
MIICsjCCAhugAwIBAgIBADANBgkqhkiG9w0BAQQFADCBnjELMAkGA1UEBhMCSlAx
DjAMBgNVBAgTBVRva3lvMRIwEAYDVQQHEwltaW5hdG8ta3UxETAPBgNVBAoTCE5l
dG1hcmtzMQ8wDQYDVQQLEwZDb25zdWwxHjAcBgNVBAMTFXBhbnplci5uZXRtYXJr
cy5jby5qcDEnMCUGCSqGSIb3DQEJARYYd2VibWFzdGVyQG5ldG1hcmtzLmNvLmpw
MB4XDTAxMDIxNjA0MTEwOFoXDTAxMDMxODA0MTEwOFowgZ4xCzAJBgNVBAYTAkpQ
MQ4wDAYDVQQIEwVUb2t5bzESMBAGA1UEBxMJbWluYXRvLWt1MREwDwYDVQQKEwhO
ZXRtYXJrczEPMA0GA1UECxMGQ29uc3VsMR4wHAYDVQQDExVwYW56ZXIubmV0bWFy
a3MuY28uanAxJzAlBgkqhkiG9w0BCQEWGHdlYm1hc3RlckBuZXRtYXJrcy5jby5q
cDCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtpH92SRK2pWsJG0/axkwC4w6
dQkVTZuN4cSjUeWYff7PFO0lZI4xNj2MfWNhDVV2ogIXN7bAhVx1wKZPu0NYDeTf
htY/hmN+q2lTOdKLsVZnF+kD33vBoQRnxOS9plBM48XBGYGBmAd9unnyTfOnU8np
T9mOsBt5YhgCJSpev/sCAwEAATANBgkqhkiG9w0BAQQFAAOBgQALG+akoYt/dab8
J49IQYtxXtxmdzq/CLsQ0PAzTfE/0z3PMsa5cQQTL1FntqIK8lwYNMlCijhYNgLb
Q4aryqHwgykf0nQcF0VN6UzqFyYX4tiKHXXrqDSrRoFOnwywOO85TH5npJ6f1BdX
ncW5ts9piZ2ZIPaACTtGLUtIDZOTyg==
-----END CERTIFICATE-----


(4) Apacheの設定

 電子証明書を作成したら、それを使用してapacheが動作するように設定を実施する必要がある。サンプルの設定ファイルはapacheのソースを展開したディレクトリの下の「SSLconf/conf/httpd.conf」にあるので、これをコピーして修正した。

 Apacheの設定としては、https通信のデフォルトである443番ポートにて稼働するように設定した。また、デフォルトでは、Webブラウザ側の証明書も要求されるため、この設定を削除している。

# cp ../SSLconf/conf/httpd.conf /export/home/apache_1.3.12/conf
# cp ../SSLconf/conf/httpsd.pem /export/home/apache_1.3.12/conf
# cd /export/home/apache_1.3.12/conf
# vi ./httpsd.conf


●httpd.confで修正した項目
User nobody
Group nogroup

Port 443
Listen 443

DocumentRoot /export/home/apache_1.3.12/htdocs

SSLCacheServerPath bin/gcache

SSLCertificateFile /export/home/apache_1.3.12/conf/httpsd.pem
#SSLCertificateKeyFile /home/ben/work/apache-ssl/apache_1.3.12-
ssl/SSLconf/conf/chained.cert.key

SSLVerifyClient 0

●httpd.confに追加した項目
ServerName panzer.netmarks.co.jp

 また、1台のサーバにて、HTTPと、HTTPS(SSL)の両方を使用したい場合も存在するかもしれない。Apacheは設定だけで、これらの要求を満たすことが可能である。例えば以下の設定をhttpd.confに追加することにより、同一コンテンツをHTTP、HTTPSにて公開することが可能である(以下、HTTPで「/export/home」以下を公開する場合に、上記に加えて追加する必要がある設定項目)。

Listen 80

<VirtualHost panzer.netmarks.co.jp:80>
SSLDisable
DocumentRoot "/export/home"
</VirtualHost>

<VirtualHost panzer.netmarks.co.jp:443>
SSLEnable
SSLRequireSSL
</VirtualHost>


(5) Apacheの起動とWebブラウザからの動作確認

 いよいよ準備が整ったので、Apacheの起動と動作確認をしてみる。Apacheの起動は下記のコマンドで行う。

./bin/httpsd

 ではここで、Webブラウザを使用して、実際にSSLを使用した暗号化通信が実施できることを確認していこう。「https://panzer.netmarks.co.jp/index.html.ja.jis」にアクセスすると以下のダイアログがポップアップされる。

画面3 Webサーバにアクセスすると、セキュリティの警告ダイアログがポップアップしてくる。一瞬作業が失敗したように思えるかもしれないが、これはクライアント側にWebサーバが発行する証明書が存在しないため。「はい」を選択すると続けてアクセス可能になる

 一番上の項目は、受け取った電子証明書には、Webブラウザに登録されている第三者認証機関による署名が記入されていないことを表している。電子証明書の詳細は、「証明書の表示」ボタンをクリックすることにより、見ることが可能である。

画面4 画面3で「証明書の表示」ボタンを押したところ。Webサーバから発行される証明書は、ルート認証局から信頼されたものでないことがわかる(ルート認証局から証明書を発行してもらう方法は、Part.2の「電子証明書」の欄を参照)

 セキュリティの警告ウィンドウの「はい」ボタンをクリックすることにより、暗号化通信によるコンテンツの表示が行われる。

画面5 SSLでWebサーバにアクセスしているところ。SSLによる通信が行われているかは、ウィンドウの下側にある鍵マークが閉じていることで確認できる(赤枠で囲まれた個所。画面はIEの場合)

 このウィンドウの右下に注目すると、南京錠が閉じたアイコンがあるのが確認できる。この鍵が閉じている場合、閲覧しているページはSSLを利用して送信されたことを表している。

 これにより、SSLを使用したWebサーバの構築は完了だ。

(6) 実際の運用における注意点

 電子証明書には有効期限が存在する。make certificateにて作成された電子証明書は、1カ月で有効期限が切れるため、そのタイミングにて電子証明書を更新する必要がある。また、電子証明書更新時には、Apacheの再起動が必要である。

 実際の運用時には、運用にかかる手間を考えると、1年程度の有効期限を持たせるのが現実的と思われる。




Index
【特集】 SSLでセキュアなECサイト構築
  Part.1 なぜSSLが必要か?
ECサイトにひそむリスク
SSLを使用したリスクの回避
  Part.2 SSLサーバ導入の準備
カギの長さと安全性
ソフトウェア/ハードウェアの選定
電子証明書
コンテンツ、そのほかの修正
Part.3 SSLサーバ構築全手順
Webサーバ環境の用意
環境構築の手順
電子証明書の作成
Apacheの設定
Apacheの起動とWebブラウザによる動作確認
実際の運用における注意点
 


Security&Trust フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Security & Trust 記事ランキング

本日 月間