Apache+mod_sslでSSLサーバのセットアップ

はじめに

Apacheのmod_sslを有効にしておいてください。今回はhttpd-2.2.8を使用しました。

ソースの取得

http://www.openssl.org/source/ から最新版取得(2008/4/30現在 0.9.8が最新)

$ wget http://www.openssl.org/source/openssl-0.9.8g.tar.gz

インストール

$ tar zxvf openssl-0.9.7g.tar.gz
$ cd openssl-0.9.7g
$ ./config --prefix=/usr/local --openssldir=/usr/local/openssl
$ make
…
//テストもしておこう
$ make test
(エラーメッセージが出なければOK)

$ su
# make install

オレオレ認証局(CA)の構築

ローカルの開発環境で使う場合のみ構築します。実際のサービスを稼動させる環境ではベリサインなどきちんとしたCAを使いますのでここは飛ばしてください。

秘密鍵と証明書の作成

CA.shというシェルでCAの情報を登録し、証明書と秘密鍵を作成します

# cd /usr/local/openssl
# cp misc/CA.sh .
# ./CA.sh -newca
・・・
CA certificate filename (or enter to create)   ←[Enter]入力
・・・
Country Name (2 letter code) [AU]:JP  ←国名を入力
State or Province Name (full name) [Some-State]:Tokyo  ←都道府県を入力
Locality Name (eg, city) []:Shibuya-ku  ←市町村名を入力
Organization Name (eg, company) [Internet Widgits Pty Ltd]:my company ←組織名を入力
Organizational Unit Name (eg, secton) []:Sales  ←部署名を入力
Common Name (eg, YOUR name) []:example.com  ←サーバ名(FQDN)を入力
Email Address[]:foo@example.com  ←連絡先メールアドレスを入力

Please enter the following 'extra' attributes
(あとはEnterでデフォルトでOK)

これで秘密鍵と証明書ができました

/usr/local/openssl/demoCA/private/cakey.pem  ←秘密鍵
/usr/local/openssl/demoCA/cacert.pem  ←自己署名型証明書

他人から見られないようにパーミッションを設定

# chmod 600 /usr/local/openssl/demoCA/private/cakey.pem
# chmod 700 /usr/local/openssl/demoCA/private

証明書がちゃんとできているか確認します

# openssl x509 -in cacert.pem -text

SSLサーバの構築

まずCAに証明書を発行してもらいます。そのために鍵のペアと証明書著名要求(CSR)を作成します。

鍵の生成

# openssl genrsa -out server.key 1024

ちゃんとできているか確認

# ls
server.key (←これがあればOK)

証明書著名要求(CSR)を作成

上記で作成した鍵をもとに証明書著名要求(CSR)を作成します。
作成時に入力する内容は、外部のCAを利用する場合、CAのホームページなどに入力する内容が書いてあります。
オレオレ認証局の場合は上のCA.shで入力したものと同じ内容を入力してください。

以下では、オレオレ認証局での例を書きます。

# openssl req -new -key server.key -out server.csr

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]:Tokyo
Locality Name (eg, city) []:Shibuya-ku
Organization Name (eg, company) [Internet Widgits Pty Ltd]:my company
Organizational Unit Name (eg, section) []:Sales
Common Name (eg, YOUR name) []:example.com
Email Address []:foo@example.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

server.keyに加えてserver.csrができていればOK

#ls
server.key server.csr

実際の運用では、この鍵とCSRをCAに送り証明書を発行してもらいます。

証明書に署名を行う

通常はCAが行うべき処理です。オレオレ認証局の場合のみ以下の処理を行ってください。

# cd /usr/local/openssl
# openssl ca -out ~/serverca.crt -infiles ~/server.csr
Using configuration from /usr/local/openssl/openssl.cnf
Enter pass phrase for ./demoCA/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
       Serial Number: 1 (0x1)
       Validity
           Not Before: May  1 10:00:58 2008 GMT
           Not After : May  1 10:00:58 2009 GMT
       Subject:
           countryName               = JP
           stateOrProvinceName       = Tokyo
           organizationName          = my company
           organizationalUnitName    = Sales
           commonName                = example.com
           emailAddress              = foo@example.com
       X509v3 extensions:
           X509v3 Basic Constraints:
               CA:FALSE
           Netscape Comment:
               OpenSSL Generated Certificate
           X509v3 Subject Key Identifier:
               …
           X509v3 Authority Key Identifier:
               keyid:…

Certificate is to be certified until May  1 10:00:58 2009 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

serverca.crtがサーバ証明書になります。

# ls ~
server.key server.csr serverca.crt

できた鍵と証明書をApacheのディレクトリに配置

# mkdir /usr/lodal/apache2/conf/ssl
# mv server.key /usr/local/apache2/conf/ssl   (←秘密鍵)
# mv serverca.crt /usr/local/apache2/conf/ssl (←証明書)

Apacheの設定

証明書と秘密鍵のパスをApacheの設定ファイルに記述します。
然るべき認証機関より証明書等を発行してもらうと、中間証明書というものが必要な場合もありますので、あわせて記述します。

httpd.confを編集

httpd.conf内に、sslの設定用のファイルをインクルードする部分があります。
コメントアウトされているので、コメントを削除します。

# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl.conf  # 先頭の'#'を削除

httpd-ssl.confを編集

<VirtualHost _default_:443>ディレクティブ内を編集します。

<VirtualHost _default_:443>
...
# 環境に合わせて編集
DocumentRoot "/usr/local/apache2/htdocs"
ServerName example.com
ServerAdmin you@example.com
ErrorLog /usr/local/apache2/logs/error_log
TransferLog /usr/local/apache2/logs/access_log

# 証明書のパス
  SSLCertificateFile /usr/local/apache2/conf/ssl/serverca.crt

# 秘密鍵のパス
SSLCertificateKeyFile /usr/local/apache2/conf/ssl/server.key

# 中間証明書のパス
SSLCertificateChainFile /usr/local/apache2/conf/pubca.txt
...
</VirtualHost>

編集が完了したら、Apacheを再起動します

# /usr/local/apache2/bin/apachectl configtest
Syntax OK
# /usr/local/apache2/bin/apachectl restart

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-12-24 (水) 12:39:00 (3589d)