ASH | サーバ | セキュリティ | Linux | FreeBSD | DB | Web | CGI | Perl | Java | XML | プログラム | ネットワーク | 標準 | Tips集

セキュアなWWWサーバ(Apache-SSL)の設定方法

 このコンテンツは、過去に使っていた環境のドキュメントです。 現在は、プログラムのバージョンアップや、運用方針の変更などで、使っていません。 従って、ドキュメントの内容が古くなっている可能性がありますので注意してください。

概要

 Apache-SSLは、ApacheをSSL対応のWebサーバにするためのパッチです。 以下にApache-SSLのインストール方法についてまとめてあります。
 このページは、https://www.ash.jp/とした場合の設定例です。

入手方法

 OpenSSLと、Apache-SSLを、以下のサイトからダウンロードします。
  ftp://ftp.ox.ac.uk:/pub/crypto/SSL
  ftp://ftp.infoscience.co.jp/pub/Crypto/SSL/

前提条件

 Apache-SSLを使用するには、あらかじめOpenSSLをインストールしておく必要があります。
 これは、OpenSSLの以下のライブラリをリンクするためです。
  libcript.a 暗号化ライブラリ
  libssl.a SSLプロトコル処理用ライブラリ

OpenSSLのインストール方法

 OpenSSLを、以下の方法でインストールします。

unix# cd /usr/local/src
unix# gzip -cd ../pub/openssl-0.9.2b.tar.gz | tar -xvf -
unix# cd openssl-0.9.2b
unix# ./config
unix# make
unix# make rehash
unix# make test
unix# make install

Apache-SSLのインストール方法

展開した後、FixPatchコマンドにより、パッチをかけます。 環境ファイルのディレクトリが異なるため、srcディレクトリのConfigurationファイルを修正します。 Configureコマンドを実行すると、Makefileなどが修正されます。 また、SSLのキャッシュ機能があると問題が発生するため、キャッシュ機能をFALSEにします。 これでパッチの修正は終わりですので、メイクすると、httpsdができます。  apacheの定義ファイルもhttpsd.confとして、SSLの定義を追加する必要があります。

unix# cd /usr/local/src/apache_1.3.6
unix# gzip -cd ../../pub/apache_1.3.6+ssl_1.34.tar.gz | tar -xvf -

unix# FixPatch
> y

unix# cd src
unix# vi Configuration

SSL_BASE=/usr/local/ssl
SSL_INCLUDE= -I$(SSL_BASE)/include
SSL_CFLAGS= -DAPACHE_SSL
SSL_LIB_DIR= $(SSL_BASE)/lib
SSL_LIBS= -L$(SSL_LIB_DIR) -lssl -lcrypto
SSL_APP_DIR= $(SSL_BASE)/bin
SSL_APP=/usr/local/ssl/bin/ssleay

unix# Configure

unix# vi modules/ssl/apache_ssl.c
# define CACHE_SESSIONS         FALSE

unix# cd ..
unix# make clean
unix# ./configure --prefix=/usr/local
unix# make
unix# make install

Apache-SSLの環境設定方法

 Apacheの定義ファイルを編集し、SSLで使うポートを443に設定します。 また、SSLに関するディレクティブの内容を追加します。

unix# vi /usr/local/conf/httpsd.conf

# The default port for SSL is 443...
# SSLで使うポート番号(デフォルトは、443)
# Port 443

# Listen: Allows you to bind Apache to specific IP addresses and/or
# SSLで使うIPアドレスとポート番号(IPバーチャルホスト時に使用)
Listen XXX.XXX.XXX.XXX:443

# Set the CA certificate verification path (must be PEM encoded).
# (in addition to getenv("SSL_CERT_DIR"), I think).
# 上位認証局の証明書の格納場所
SSLCACertificatePath /usr/local/ssl/certs

# Set the CA certificate verification file (must be PEM encoded).
# (in addition to getenv("SSL_CERT_FILE"), I think).
# 認証局の証明書(公開鍵)のファイル名
SSLCACertificateFile /usr/local/ssl/certs/cert.pem

# 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 -1 will prompt again.
# A test certificate can be generated with "make certificate".
# httpsdの証明書(公開鍵)のファイル名
SSLCertificateFile /usr/local/ssl/certs/cert.pem

# If the key is not combined with the certificate, use this directive to
# point at the key file. If this starts with a '/' it specifies an absolute
# path, otherwise it is relative to the default certificate area. That is, it
# means "/private/".
# httpsdの秘密鍵のファイル名
SSLCertificateKeyFile /usr/local/ssl/private/key.pem

# Set SSLVerifyClient to:
# 0 if no certicate is required
# 1 if the client may present a valid certificate
# 2 if the client must present a valid certificate
# 3 if the client may present a valid certificate but it is not required to
#   have a valid CA
# クライアント認証の方法(0はクライアント認証しない)
SSLVerifyClient 0

# How deeply to verify before deciding they don't have a valid certificate
# 証明書の照合レベル
SSLVerifyDepth 10

# Translate the client X509 into a Basic authorisation. This means that the
# standard Auth/DBMAuth methods can be used for access control. The user name
# is the "one line" version of the client's X509 certificate. Note that no
# password is obtained from the user. Every entry in the user file needs this
# password: xxj31ZMTZzkVA. See the code for further explanation.
# クライアントの認証方式をX509の認証方式から基本的な認証方式に変換
# 認証にはパスワード(xxj31ZMTZzkVA)を利用
SSLFakeBasicAuth

 その他、下記のディレクティブの内容を変更、確認します。

unix# vi /usr/local/conf/httpsd.conf

# config of httpd
# Webサーバの定義
ServerType standalone
ServerRoot "/usr/local"
User wmaster
Group wmaster
PidFile /usr/local/logs/httpsd.pid
ScoreBoardFile /usr/local/logs/httpsd.scoreboard
ErrorLog /usr/local/logs/https_error_log
CustomLog /usr/local/logs/https_access_log common
ServerAdmin root@ash.jp
ServerName www.ash.jp
AddHandler cgi-script .cgi .pl
DirectoryIndex index.html index.htm index.cgi
ScriptAlias /cgi-bin/ "/usr/local/cgi-bin/"

# ディレクトリの定義
DocumentRoot "/home/www/html"
<Directory "/home/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
<Directory "/usr/local/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
<Directory "/usr/local/cgi-bin">
    Options None FollowSymLinks ExecCGI
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

証明書(CA)のインストール

 ベリサイン社から送信されてきた証明書をインストールします。
 送信されて来たメールの"BEGIN CERTIFICATE"から"END CERTIFICATE"までをcert.pemファイルにカット&ペーストします。
 単に暗号化したいだけでしたら、自分でCAとなり証明書を発行することができます。 この場合は、独自CAの設定方法を参照してください。

unix# vi /usr/local/ssl/certs/cert.pem

-----BEGIN CERTIFICATE-----
Z1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYD
VQQLEyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk5
MDYwOTAwMDAwMFoXDTAwMDYwODIzNTk1OVowgacxCzAJBgNVBAYTAkpQMQ4wDAYD
VQQIEwVUb2t5bzESMBAGA1UEBxQJTWluYXRvLWt1MRgwFgYDVQQKFA9ORUMgQ29y
u0mgkN0xTI1EvEmbuBAyS7SKkKHlOMh9g+Q5ef1jwzTPeKr9FHQ46ci5NQXZlqI/
l9AjnwJuSocwCLFGwkakUXECAwEAATANBgkqhkiG9w0BAQQFAAN+ACCw17Hz0yfj
c/k+gxcjqlo/JJ2TXLY8S6lTXsgY2dfxy9rj0KCA5KLlLT3rddKC2attS12CP8mE
61qaFik70EaqgZ5xCb2RIJ1/Ei0B
-----END CERTIFICATE-----

起動、終了方法

 CAの作成が終わったら、httpsdを起動します。

起動方法

 以下の方法でApacheを起動します。

unix# httpsdctl start
または
unix# httpsd -f conf/httpsd.conf

 httpsdを起動すると、秘密鍵のパスフレーズを聞いてきますので入力します。
 自動起動する場合などは、パスフレーズをはずして使用します。 パスフレースをはずす場合やつける場合には、以下のコマンドを使います。

・パスフレーズをはずす場合
unix# openssl rsa -in ../private/key.pem -out ../private/key_nopass.pem
unix# mv ../private/key_nopass.pem ../private/key.pem

・パスフレーズをつける場合
unix# openssl rsa -des -in ../private/key.pem -out ../private/key_pass.pem
unix# mv ../private/key_pass.pem ../private/key.pem

終了方法

 Apacheを終了させる場合は、以下の方法で実施します。

unix# httpsdctl stop
または
unix# kill プロセス番号(PPIDが1のhttpsdプロセス)

動作確認方法

 ブラウザで、以下のURLにアクセスしてみます。

https://www.ash.jp/


Copyright (C)1995-2002 ASH multimedia lab.
mail : info@ash.jp