Apache 2.2.* 系と OpenSSL での HTTPS の利用 - Linux サーバ認証 編 -
技術情報 TOP へ

本ページでの使用環境
OS:Fedora Core 5
Apache:2.2.3
OpenSSL:0.9.7c
ここでは、Apache 2.2.* 系と OpenSSL を使用して HTTPS 通信を行います。

サーバ認証について簡単に説明いたします。

一般的に HTTPS 通信 ( 通信経路の暗号化 ) を使用する場面というのは、 個人情報の送信や クレジットカードの情報などの送信において必要になると思います。
なぜ必要かというと、それらの情報は他に漏れてはいけない情報であり、もし平文で送信したならば、 途中の通信経路のどこかで第三者に、その情報を見られてしまう可能性があり、重大な結果を招きかねません。 そのような結果を防ぐ目的があり、HTTPS 通信を行います。 しかし、ここで以下の条件を満たす必要があります。

・通信経路の暗号化
・情報を送信するサーバが本当に実在し、自分が送信したいサーバなのかの存在確認。

いくら送信を行う際に暗号化していても、送信するサーバ ( 相手側 ) が、ほんとに実在するのか、 ほんとに自分が送信したいサーバ ( 相手側 ) なのか、何者かがそのサーバになりすまし、 こちらの重要な情報を取得しようとしている可能性もあります。 このようなリスクを避ける意味で、サーバ認証は必要となります。

ここでは自己認証局の利用を行いますが、一般的にサーバ認証を行う場合、日本べリサイン社などの機関から SSL サーバ証明書を取得します。 日本べリサイン社などの機関から、実在認証を受けたサーバであれば、 ブラウザなどには、デフォルトでべリサイン社のルート証明が組み込まれているため、 後述の警告 ( IE6の警告 IE7の警告 ) は出ず、ユーザに安心して利用していただけます。

自己認証局で作成した証明書は最近では、「オレオレ証明書」とよばれていますね。それくらい信用できないということですね。
しかし、開発などで使用するには自己認証局で作成した証明書は費用もかからず、手軽で便利です。

以下では、自己認証局を利用して HTTPS 通信を行います。

このページではあくまで、開発や検証を目的とした簡単な設定方法をご紹介していますので、 実運用などに利用される場合は、SSL に関する書籍やより専門的な Web サイトなどを参照していただければと思います。




[ 1 ] OpenSSL のインストール

( 1 ) OpenSSL のダウンロード

OpenSSL をダウンロードします。 ここでは openssl-0.9.7c.tar.gz をダウンロードします。

下記の OpenSSL のページで [ openssl-0.9.7c.tar.gz ] をクリック、 openssl-0.9.7c.tar.gz をダウンロードしてください。

・OpenSSL Source
< http://www.openssl.org/source/ >

( 2 ) ダウンロードしたファイルの解凍

ダウンロードしたファイルを解凍します。 以下のコマンドを実行します。

# tar xvfz openssl-0.9.7c.tar.gz 
( 3 ) 解凍されたフォルダ内に移動

解凍されたフォルダ内に移動します。 以下のコマンドを実行します。

# cd openssl-0.9.7c 
( 4 ) configure の実行

configure を実行します。 ここでは prefix に /usr/local/openssl を指定します。以下のコマンドを実行します。

# ./config --prefix=/usr/local/openssl 
( 5 ) make の実行

make を実行します。 以下のコマンドを実行します。

# make
( 6 ) make test の実行

make test を実行します。 以下のコマンドを実行します。

# make test 
( 7 ) root へ su

ここからは root で作業を行います。 root になります。

( 8 ) make install の実行

make install を実行します。 以下のコマンドを実行します。

# make install
これで OpenSSL のインストールは完了です。
[ 2 ] Apache のインストール

( 1 ) Apache のダウンロード

Apache をダウンロードします。 ここではこのページの記述時の the best available version である httpd-2.2.3.tar.gz をダウンロードします。

下記の Apache のページで [ Apache HTTP Server 2.2.3 is the best available version ] - [Unix Source: ] - [ httpd-2.2.3.tar.gz ] をクリック、 httpd-2.2.3.tar.gz をダウンロードしてください。

・Downloading the Apache HTTP Server
< http://httpd.apache.org/download.cgi >

( 2 ) ダウンロードしたファイルの解凍

ダウンロードしたファイルを解凍します。 httpd-2.2.3.tar.gz があるディレクトリに移動して、 以下のコマンドを実行します。

# cd ..
# tar zxvf httpd-2.2.3.tar.gz 
( 3 ) 解凍されたフォルダに移動

解凍されたフォルダ内に移動します。 以下のコマンドを実行します。

# cd httpd-2.2.3
( 4 ) configure の実行

configure を行います。 configure とはコンパイル前の設定となり、どのモジュールを有効 ( もしくは無効 ) にするかを設定します。 configure オプションについては下記のドキュメントを参照ください。

・configure - Configure the source tree
< http://httpd.apache.org/docs/2.2/ja/programs/configure.html >

* もし、configure オプションの指定を間違えるとconfigure スクリプトはエラー等を通知せず、無効なオプション指定は無視されることがあり、 また、エラーが出力されてもわかりにくいので注意が必要です。

ここでは --enable-modules=ssl オプションを指定した以下のコマンドを実行します。

# ./configure --enable-modules=ssl --with-ssl=/usr/local/openssl 
参考情報:他のオプション mod_ssl 、mod_proxy_ajp 、mod_rewrite を有効にしたい場合は以下のようになります。 # ./configure --enable-modules=ssl --with-ssl=/usr/local/openssl --enable-rewrite=shared --enable-proxy --enable-proxy-ajp

( 5 ) make の実行

make を実行します。 以下のコマンドを実行します。

# make
( 6 ) make install の実行

make install を実行します。 以下のコマンドを実行します。

# make install
( 7 ) mod_ssl.c の確認

以下のコマンドを実行して、mod_ssl.c が生成されているか確認します。

# /usr/local/apache2/bin/httpd -l
以上で Apache のインストールは完了です。

注) httpd.conf 等の自環境に合わせた詳細な設定等は別途、行ってください。
以下ではサーバ認証のための設定を行います。
[ 3 ] 自己認証局の生成及びサーバ証明書の生成

( 1 ) Path の設定

Path の設定を行い、openssl コマンドが利用できるようにします。

ユーザホームにある .bash_profile を編集追記します。ここでは white ユーザの .bash_profile 編集追記します。white は自分のユーザ名に置き換えてください。

# vi /home/white/.bash_profile
.bash_profile に以下にように編集追記します。

例:
修正前    PATH=$PATH:$HOME/bin
修正後    PATH=/usr/local/openssl/bin:$PATH:$HOME/bin
編集後、.bash_profile を以下のコマンドで再読み込みします。

# source /home/white/.bash_profile
( 2 ) カレントディレクトリの移動

以下のコマンドを実行しカレントディレクトリを移動します。

# cd /usr/local/openssl
( 5 ) CA ( 自己認証局 ) の作成

CA.sh を使用して、CA ( 自己認証局 ) を作成します。 以下のコマンドで新しい CA を作成します。

注) 以下のコマンドを実行するとカレントディレクトリに demoCA という名前の CA が作成されます。
demoCA という名前はデフォルト名です。任意の名前を使用する場合は、以下の値を変更してください。

/usr/local/openssl/ssl/misc/CA.sh 内の [CATOP]
/usr/local/openssl/ssl/openssl.cnf 内の [dir]

ここでは demoCA という名前のままで説明します。


# /usr/local/openssl/ssl/misc/CA.sh -newca
ルート証明書が作成されますので、必要な値を入力します。値は自環境に合わせて入力してください。

入力例:
CA certificate filename (or enter to create)・・・入力せず「enter」を押下
Enter PEM pass phrase: パスフレーズを入力します。
Verifying - Enter PEM pass phrase: もう一度パスフレーズを入力します。
Country Name (2 letter code) [GB]: JP
State or Province Name (full name) [Berkshire]: osaka
Locality Name (eg, city) [Newbury]: osaka
Organization Name (eg, company) [My Company Ltd]:whitemark
Organizational Unit Name (eg, section) []: system
Common Name (eg, your name or your server's hostname) []: sample.white.jp
Email Address []:・・・入力せず「enter」を押下


---------- 実行結果---------
CA certificate filename (or enter to create)

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:
-----
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]:osaka
Locality Name (eg, city) [Newbury]:osaka
Organization Name (eg, company) [My Company Ltd]:whitemark
Organizational Unit Name (eg, section) []:system
Common Name (eg, your name or your server's hostname) []:sample.white.jp
Email Address []:
---------- 実行結果---------
カレントディレクトリに demoCA という名前の CA が作成され、
ルート証明書 demoCA/cacert.pem が生成されています。

( 6 ) 秘密鍵と証明書要求の作成

新らしい証明書要求と秘密鍵を生成します。証明書要求と秘密鍵は"newreq.pem" というファイルに書き出されます。 以下のコマンドを実行します。


# /usr/local/openssl/ssl/misc/CA.sh -newreq
証明要求、秘密鍵が作成されますので、必要な値を入力します。値は自環境に合わせて入力してください。

入力例:
Enter PEM pass phrase: パスフレーズを入力します。
Verifying - Enter PEM pass phrase: もう一度パスフレーズを入力します。
Country Name (2 letter code) [GB]: JP
State or Province Name (full name) [Berkshire]: osaka
Locality Name (eg, city) [Newbury]: osaka
Organization Name (eg, company) [My Company Ltd]: whitemark
Organizational Unit Name (eg, section) []: Engineer
Common Name (eg, your name or your server's hostname) []: sample.white.jp
Email Address []:・・・入力せず「enter」を押下
A challenge password []:・・・入力せず「enter」を押下
An optional company name []:・・・入力せず「enter」を押下


---------- 実行結果---------
Generating a 1024 bit RSA private key
....................++++++
............++++++
writing new private key to 'newreq.pem'
Enter PEM pass phrase:
Verifying - 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) [GB]:JP
State or Province Name (full name) [Berkshire]:osaka
Locality Name (eg, city) [Newbury]:osaka
Organization Name (eg, company) [My Company Ltd]:whitemark
Organizational Unit Name (eg, section) []:Engineer
Common Name (eg, your name or your server's hostname) []:sample.white.jp
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Request (and private key) is in newreq.pem

---------- 実行結果---------
			
実行後、newreq.pem がカレントディレクトリに生成されています。

もしくは詳細な設定を行う場合は上記のコマンドの代わりに以下のコマンドを実行します。
以下のコマンドでは有効期限を 1825 日としています。

# openssl req $SSLEAY_CONFIG -new -keyout newreq.pem -out newreq.pem -days 1825


( 7 ) 新しい証明書の作成

証明書要求に署名を行い、新しい証明書を作成します。 以下のコマンドを実行します。


# /usr/local/openssl/ssl/misc/CA.sh -sign 
証明書を作成しますので、必要な値を入力します。

入力例:
Enter pass phrase for ./demoCA/private/cakey.pem: [CA 作成時のパスフレーズ]
Sign the certificate? [y/n]: [y] を入力します。
1 out of 1 certificate requests certified, commit? [y/n]: [y] を入力します。

実行後、newcert.pem がカレントディレクトリに生成されています。

注)上記のコマンド CA.sh -sign を使用した場合、証明書要求のファイル名は "newreq.pem" となり、
カレントディレクトリに配置する必要があります。

もしくは詳細な設定を行う場合は上記のコマンドの代わりに以下のコマンドを実行します。

# openssl ca -policy policy_anything -out newcert.pem -infiles newreq.pem
ここまでで以下の 2 つのファイルができています。

newcert.pem 、 newreq.pem
( 8 ) 証明書を格納するフォルダの作成

ここでは /usr/local/apache2/conf/ 配下に sslkeys ディレクトリを作成し、秘密鍵と証明書要求、証明書などのファイルを格納します。 以下のコマンドを実行します。

# mkdir /usr/local/apache2/conf/sslkeys
( 9 ) 秘密鍵と証明書要求、証明書などのファイルの配置

/usr/local/apache2/conf/sslkeys ディレクトリに秘密鍵と証明書要求、証明書などのファイルをコピーします。
以下のコマンドを実行します。


# cp ./newreq.pem /usr/local/apache2/conf/sslkeys/newreq.pem
# cp ./newcert.pem /usr/local/apache2/conf/sslkeys/newcert.pem
コピーが終わるとカレントディレクトリの newreq.pem 、newcert.pem はバックアップをとり、 削除しておきます。
( 10 ) アクセス権の設定

秘密鍵と証明書要求、証明書などのファイルには適切なアクセス権を設定してください。
ここでは以下のコマンドを実行します。


# chmod 400 /usr/local/apache2/conf/sslkeys/newreq.pem
# chmod 400 /usr/local/apache2/conf/sslkeys/newcert.pem
( 11 ) httpd-ssl.conf の編集

/usr/local/apache2/conf/extra/httpd-ssl.conf の編集を編集します。


# vi /usr/local/apache2/conf/extra/httpd-ssl.conf
/usr/local/apache2/conf/extra/httpd-ssl.conf の以下の箇所を環境に合わせて編集します。 ここでは以下のようになります。

--------- httpd-ssl.conf ---------
SSLCertificateFile /usr/local/apache2/conf/sslkeys/newcert.pem
SSLCertificateKeyFile /usr/local/apache2/conf/sslkeys/newreq.pem

SSLCACertificatePath /usr/local/openssl/demoCA
SSLCACertificateFile /usr/local/openssl/demoCA/cacert.pem
--------- httpd-ssl.conf ---------
( 12 ) httpd.conf の編集

/usr/local/apache2/conf/httpd.conf の編集を編集します。


# vi /usr/local/apache2/conf/httpd.conf
vi /usr/local/apache2/conf/httpd.conf の以下の箇所を編集します。 ここでは以下のようになります。

--------- httpd.conf ---------
# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl.conf
--------- httpd.conf ---------
( 13 ) Apache の起動

Apache の起動します。


# /usr/local/apache2/bin/apachectl start
Apache を終了する場合は下記のコマンドを実行します。
# /usr/local/apache2/bin/apachectl stop
[ 4 ] 動作確認 Internet Explorer 6.0 の場合

動作確認を行います。下記のアドレスにブラウザでアクセスします。

< https://サーバ名/ >

以下のような警告画面が表示されますので「はい」をクリックします。


正常に表示されれば成功です。


[ 5 ] 動作確認 Internet Explorer 7 の場合

動作確認を行います。下記のアドレスにブラウザでアクセスします。

< https://サーバ名/ >

以下のような警告画面が表示されますので「このサイトの閲覧を続行する」をクリックします。
( Internet Explorer 7 ではエラーと同じようなレベルで警告が表示されますので、戸惑ってしまうこともあるかもしれません。)


正常に表示されれば成功です。


[ 6 ] ブラウザの警告を回避するために自己認証局のルート証明をブラウザにインポート

上記の [ 4 ] [ 5 ] などのブラウザの警告を回避するには、ブラウザに信頼された認証局として登録されている 必要があります。べリサイン社等のルート証明はブラウザに信頼された認証局として元々組み込まれているため、警告は表示されませんが、 自己認証局のルート証明は組み込まれていないために、上記の [ 4 ] [ 5 ] の警告が表示されます。

これを回避するために自己認証局のルート証明含んだ証明書( PKCS#12 ファイル ) を作成し、 クライアントへ配布、ブラウザなどにインポートします。このインポートを行うことで警告は表示されなくなります。

以下のページを参照し、クライアントへ配布する証明書( PKCS#12 ファイル ) を作成、クライアントへ配布し、ブラウザなどにインポートします。

PKCS#12 ファイルの作成とブラウザへのインポート



Google
WWW を検索 whitemark.co.jp を検索
[ 株式会社ホワイトマーク TOP ]   [ 免責事項 ]

Copyright © 2007 by WhiteMark, All rights Reserved. Last Modified: 2007/06