Apache/SSL自己証明書の作成とmod sslの設定
目次 |
手順
-
openssl コマンドを使って SSL 自己証明書を作成する。
- 秘密鍵(server.key)の作成
openssl genrsa -aes128 1024 > server.key- 公開鍵(server.csr)の作成
openssl req -new -key server.key > server.csr- デジタル証明書(server.crt)の作成
openssl x509 -in server.csr -days 365 -req -signkey server.key > server.crt - Apache の ssl.conf を編集する。
これだけ。/etc/httpd/conf/ ディレクトリ内で作業すると楽。
秘密鍵(server.key)の作成
次のコマンドで秘密鍵(server.key)を作成する。
# openssl genrsa -aes128 1024 > server.key
- genrsa
- RSA形式の秘密鍵を作成する
- -aes128
- 128ビットの AES 方法で暗号化する。
- 1024
- 1024バイトの鍵を作成する。
パスフレーズの入力を求められるので、任意のパスフレーズを入力する。
Generating RSA private key, 1024 bit long modulus ..................++++++ ..........................................++++++ unable to write 'random state' e is 65537 (0x10001) Enter pass phrase:パスフレーズ Verifying - Enter pass phrase:パスフレーズ
公開鍵(server.csr)の作成
WebサーバのCSRファイル(server.csr)を作成する。
- CSR(Certificate Signing Request)とは、SSL 証明書を作成する元になる情報が書かれている。
- 内容は、組織名やサーバのアドレスなどの情報を含む公開鍵のファイル。
次の openssl コマンドで CSR ファイルを作成する。
# openssl req -new -key server.key > server.csr
- req
- CSRファイルを作成する。
- -new
- 新規にCSRを作成する。
- -key 秘密鍵ファイル
- 秘密鍵のファイル名を指定する。
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) [AU]:JP State or Province Name (full name) [Some-State]:Osaka Locality Name (eg, city) []:Osaka-shi,Chuo-ku Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example Inc. Organizational Unit Name (eg, section) []:Example Section Common Name (eg, YOUR name) []:example.com Email Address []:webmaster@example.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:空白 An optional company name []:空白
|
|
Common Name (eg, YOUR name) []:の部分は、サイトの名前を入力することになるので、IPアドレスで運用しているWebサーバの場合は IP アドレスを入力しておく。 |
入力項目の説明
| Country Name (2 letter code) [AU]: | 国名 |
| State or Province Name (full name) [Some-State]: | 都道府県名 |
| Locality Name (eg, city) []: | 市町村名 |
| Organization Name (eg, company) [Internet Widgits Pty Ltd]: | 組織名 |
| Organizational Unit Name (eg, section) []: | 部門名 |
| Common Name (eg, YOUR name) []: | サイトの名前 |
| Email Address []: | メールアドレス(空欄でもよい) |
| A challenge password []: | 証明書を破棄する時に必要になるパスワード(空欄でもよい) |
| An optional company name []: | 別の組織名の入力(空欄でもよい) |
デジタル証明書(server.crt)の作成
SSL 通信には CA(Certification Authority, 認証局)が発行した証明書が必要だが、自分自身でデジタル証明書(server.crt)作成する。
|
|
このデジタル証明書の発行をおこなっている第三者機関が VeriSign などになるが、自分自身でデジタル証明書をつくることもできる。 |
次の openssl コマンドでデジタル証明書(server.crt)を作成する。
# openssl x509 -in server.csr -days 365 -req -signkey server.key > server.crt
- x509
- X.509 形式のデジタル証明書を作成する。
- -in CSRファイル
- CSR ファイル名を指定する。
- -days 日数
- 証明書の有効期限を指定する。
- -req
- 入力ファイルがCSRファイルであることを指定する。
- -signkey 秘密鍵ファイル
- 自己証明書作成時に使用するオプション。秘密鍵ファイルを指定する。
Signature ok
subject=/C=JP/ST=Osaka/L=Osaka-shi,Chuo-ku/O=Example Inc./OU=Example Section/CN=example.com/emailAddress=webmaster@example.com
Getting Private key
Enter pass phrase for server.key:パスフレーズ
unable to write 'random state'
以上で、鍵、証明書の作成は完了。
Apache mod_ssl の設定
Apache で SSL 暗号化通信をおこなうには、mod_ssl モジュールを使用する。
CentOS 5 の Apache 2.2.3 では、/etc/httpd/conf.d/ssl.conf に mod_ssl の基本的な設定があらかじめ用意されているので、それを使う。
(ソースコードからビルドした場合、conf/extra/httpd-ssl.conf を使う。)
SSLCertificateFile と SSLCertificateKeyFile の設定で、上記で作成した server.crt と server.key を指定する。
LoadModule ssl_module modules/mod_ssl.so Listen 443 AddType application/x-x509-ca-cert .crt AddType application/x-pkcs7-crl .crl SSLPassPhraseDialog builtin SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000) SSLSessionCacheTimeout 300 SSLMutex default SSLRandomSeed startup file:/dev/urandom 256 SSLRandomSeed connect builtin SSLCryptoDevice builtin <VirtualHost _default_:443> ErrorLog logs/ssl_error_log TransferLog logs/ssl_access_log LogLevel warn SSLEngine on SSLProtocol all -SSLv2 SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW # SSLCertificateFile /etc/pki/tls/certs/localhost.crt # SSLCertificateKeyFile /etc/pki/tls/private/localhost.key SSLCertificateFile /etc/httpd/conf/server.crt SSLCertificateKeyFile /etc/httpd/conf/server.key <Files ~ "\.(cgi|shtml|phtml|php3?)$"> SSLOptions +StdEnvVars </Files> <Directory "/var/www/cgi-bin"> SSLOptions +StdEnvVars </Directory> SetEnvIf User-Agent ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 CustomLog logs/ssl_request_log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost>
Apache 起動時にパスフレーズの入力を省略する
上記の方法で作成した鍵は、Apache起動時にパスフレーズの入力が求められる。 この秘密鍵のパスフレーズを解除して利用する方法。
1. server.key の名前を変更する。
# mv server.key server.key.back
2. 次のコマンドでパスフレーズを解除する。
# openssl rsa -in server.key.back > server.key
パスフレーズの入力を求められるので、パスフレーズを入力する。
Enter pass phrase for server.key.back:パスフレーズ
writing RSA key
参考ページ
Think IT 第7回:Apache+SSL環境を構築しよう!
Apache 関連のページ
- Apache/HTTP TRACE の無効化 . . カテゴリ: Apache | セキュリティ
- Apache/HTTPユーザー認証の設定 . . カテゴリ: Apache | アクセス制御 | セキュリティ
- Apache/WebDAVの設定 . . カテゴリ: Apache | ファイルサーバ
- Apache/アクセス制御 . . カテゴリ: Apache | アクセス制御
- Apache/バーチャルホストのログをリモートのrsyslogに集約する . . カテゴリ: Apache | syslog
- Apache/リバースプロキシ . . カテゴリ: Apache
- Apache/ログのローテーション . . カテゴリ: Apache
- RT Request Tracker を CentOS 5 にインストールする . . カテゴリ: Apache | CentOS | Webアプリ | メール
- eAccelerator をインストールする . . カテゴリ: Apache | Webアプリ
- ベリサイン SSL サーバ証明書取得から apache mod ssl 設定までの流れ . . カテゴリ: Apache | セキュリティ