apacheにSSLを導入する方法
最近、ApacheのBasic認証を使いたいページをSSL化することがあったのでメモしておきます。 Basic認証でhttpだと丸見えですからね・・・。今回はオレオレ証明書で実装します。サービス用途にはしっかりとした認証局に署名してもらうようにしてください。
事前準備
opensslをインストールする
mod_sslをインストールする
openssl.cnfをベースにopenssl-ca.cnf、openssl-server.cnfを作成
この3つだけは事前に実施しておいてください。
証明書作成
認証局のCA証明書を作成
$ sudo CADAYS="-days 3650" SSLEAY_CONFIG="-config /etc/pki/tls/openssl-ca.cnf" /etc/pki/tls/misc/CA -newca
以下、パスフレーズの入力や証明書のSubjectの入力があります。 証明書のSubjectはあらかじめ/etc/httpd/conf.d/ssl.confに設定を入れておけば2度手間はなくなります。今回は都度入れる事としています。
CA certificate filename (or enter to create) ←EnterでOK Making CA certificate ... Generating a 2048 bit RSA private key ...................................................+++ ........................+++ writing new private key to '/etc/pki/CA/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) [XX]:JP State or Province Name (full name) []:Tokyo Locality Name (eg, city) [Default City]: Organization Name (eg, company) [Default Company Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []: ←サーバ名を入力 Email Address []: (略) Write out database with 1 new entries Data Base Updated
CSR作成
続いてCSRの作成です。 こちらもパスフレーズや各種パラメータを入力する箇所があります。
sudo DAYS="-days 3650" SSLEAY_CONFIG="-config /etc/pki/tls/openssl-server.cnf" /etc/pki/tls/misc/CA -newreq Generating a 2048 bit RSA private key ................................................+++ ..............+++ writing new private key to 'newkey.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) [XX]:JP State or Province Name (full name) []:Tokyo Locality Name (eg, city) [Default City]: Organization Name (eg, company) [Default Company Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:サーバ名を記入 Email Address []: (略) Request is in newreq.pem, private key is in newkey.pem
Tips:証明書の作成に失敗した場合
証明書の作成に失敗した場合、同じコマンドを叩いても何も出力がなく再作成ができません。 その場合は、/etc/pki/CA/を消す必要があるので注意してください。
$ sudo CADAYS="-days 3650" SSLEAY_CONFIG="-config /etc/pki/tls/openssl-ca.cnf" /etc/pki/tls/misc/CA -newca $ $ ls /etc/pki/CA/ certs crl index.txt newcerts private $ sudo cp -r /etc/pki/CA/ /etc/pki/CA.org/ $ ls -ld /etc/pki/CA drwxr-xr-x. 6 root root 4096 6月 16 00:00 2014 /etc/pki/CA $ ls -ld /etc/pki/CA.org drwxr-xr-x 6 root root 4096 6月 16 00:00 2014 /etc/pki/CA.org $ sudo rm -rf /etc/pki/CA $ ls -ld /etc/pki/CA ls: cannot access /etc/pki/CA: そのようなファイルやディレクトリはありません
認証局で署名する
$ sudo SSLEAY_CONFIG="-config /etc/pki/tls/openssl-server.cnf" /etc/pki/tls/misc/CA -sign Using configuration from /etc/pki/tls/openssl-server.cnf Enter pass phrase for /etc/pki/CA/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: (略) Signed certi ficate is in newcert.pem
※(2014/07/09追記)TXT_DB errorが出た場合は/etc/pki/CA/index.txtを消すかrevokeしてやり直してください。
サーバ証明書と鍵ファイルを生成
まず鍵ファイルを作成します。今回、2048bitで作成しております。
$ pwd /etc/pki/tls/certs $ sudo make server.key umask 77 ; \ /usr/bin/openssl genrsa -aes128 2048 > server.key Generating RSA private key, 2048 bit long modulus .....................................................+++ ..........................................................+++ e is 65537 (0x10001) Enter pass phrase: Verifying - Enter pass phrase:
続いてサーバ証明書を作成します。
$ sudo make server.crt umask 77 ; \ /usr/bin/openssl req -utf8 -new -key server.key -x509 -days 365 -out server.crt -set_serial 0 Enter pass phrase for server.key: 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) [XX]:JP State or Province Name (full name) []:Tokyo Locality Name (eg, city) [Default City]: Organization Name (eg, company) [Default Company Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []: Email Address []:
鍵ファイルとサーバ証明書の設定
先ほど作成した鍵ファイルとサーバ証明書を指定します。 その後、httpdを再起動します。
$sudo service httpd restart
パスが間違っているとhttpdが起動しませんので注意してください。
$vi /etc/httpd/conf.d/ssl.conf # Server Certificate: # 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 -HUP will prompt again. A new # certificate can be generated using the genkey(1) command. SSLCertificateFile /etc/pki/tls/certs/server.crt # Server Private Key: # If the key is not combined with the certificate, use this # directive to point at the key file. Keep in mind that if # you've both a RSA and a DSA private key you can configure # both in parallel (to also allow the use of DSA ciphers, etc.) SSLCertificateKeyFile /etc/pki/tls/certs/server.key
おまけ httpアクセスをhttpsへリダイレクトする方法
今回、/var/www/html/graph/配下にBasic認証をかけてSSLアクセスのみ許可するよう実装を考えていたため以下も合わせて実施しました。logはレベル0で新たにrewite_logに書き出すようにしてます。
LoadModule rewrite_module modules/mod_rewrite.so <IfModule mod_rewrite.c> RewriteEngine On RewriteLog "/var/log/rewrite_log" RewriteLogLevel 0 RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^/graph/(.*)?$ https://%{HTTP_HOST}/graph/$1 [L,R] </IfModule>
どうでしょうか?できましたかね。割と簡単ですが、だからこそサッとできないといけない実装ですね。また細かいtipsがあれば書いておきたいと思います。
できるPRO Apache Webサーバー 改訂版 Version 2.4/2.2/2.0対応 (できるPROシリーズ)
- 作者: 辻秀典,渡辺高志,鈴木幸敏,できるシリーズ編集部
- 出版社/メーカー: インプレスジャパン
- 発売日: 2013/01/25
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る
サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design plus)
- 作者: 鶴長鎮一
- 出版社/メーカー: 技術評論社
- 発売日: 2012/03/23
- メディア: 単行本(ソフトカバー)
- 購入: 6人 クリック: 109回
- この商品を含むブログ (12件) を見る
シェアして頂けると嬉しいです。
もし参考になったよという方がいれば是非お願いします。
モチベーション維持の観点で非常に励みになります。