*Apache+mod_sslでSSLサーバのセットアップ[#hede7d2a]
**はじめに [#g4efe38a]
Apacheのmod_sslを有効にしておいてください。今回はhttpd-2.2.8を使用しました。

**ソースの取得 [#qab9341b]
http://www.openssl.org/source/ から最新版取得(2008/4/30現在 0.9.8が最新)
 $ wget http://www.openssl.org/source/openssl-0.9.8g.tar.gz

**インストール [#g9553418]
 $ 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)の構築 [#wd784a72]
ローカルの開発環境で使う場合のみ構築します。実際のサービスを稼動させる環境ではベリサインなどきちんとしたCAを使いますのでここは飛ばしてください。


***秘密鍵と証明書の作成 [#qa375623]
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サーバの構築 [#ud82b02d]
まずCAに証明書を発行してもらいます。そのために鍵のペアと証明書著名要求(CSR)を作成します。

***鍵の生成 [#vf27d622]
 # openssl genrsa -out server.key 1024

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

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

***証明書著名要求(CSR)を作成 [#x922d1a3]
上記で作成した鍵をもとに証明書著名要求(CSR)を作成します。
作成時に入力する内容は、外部のCAを利用する場合、CAのホームページなどに入力する内容が書いてあります~
作成時に入力する内容は、外部の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に送り証明書を発行してもらいます。

***証明書に署名を行う [#y5d59831]
通常は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のディレクトリに配置 [#d29dfc3b]
 # mkdir /usr/lodal/apache2/conf/ssl
 # mv server.key /usr/local/apache2/conf/ssl   (←秘密鍵)
 # mv serverca.crt /usr/local/apache2/conf/ssl (←証明書)

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

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

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

***httpd-ssl.confを編集 [#da1deee4]
<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

IP:220.215.178.31 TIME:"2010-07-28 (水) 11:22:08" REFERER:"http://wadslab.net/wiki/index.php?cmd=edit&amp;page=Apache%2Bmod_ssl%A4%C7SSL%A5%B5%A1%BC%A5%D0%A4%CE%A5%BB%A5%C3%A5%C8%A5%A2%A5%C3%A5%D7" USER_AGENT:"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_8; ja-jp) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16"

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS