Apache/SSL自己証明書の作成とmod sslの設定
目次 |
手順
2017年1月1日以降、SSL 証明書の署名アルゴリズムとして SHA-1 を使用している証明書は SSL 通信ができなくなる。 これは、Windows製品、Google Chrome、Mozilla Firefox における仕様変更なので、自己証明書であっても影響を受ける。 SHA-2 関連情報
|
SHA-2 に対応させるには、オプション -sha256 を付けて実行する。
- openssl コマンドを使って SSL 自己証明書を作成する。
- Apache の ssl.conf を編集する。
秘密鍵の作成 (server.key)
openssl genrsa -aes128 -out server.key 2048
CSR(証明書の基になる情報)の作成 (server.csr)
openssl req -new -key server.key -sha256 -out server.csr
証明書(公開鍵)の作成 (server.crt)
openssl x509 -in server.csr -days 365 -req -signkey server.key -sha256 -out server.crt
これだけで SSL自己証明書が利用できるようになる。
秘密鍵の作成 (server.key)
次のコマンドで秘密鍵(server.key)を作成する。
openssl genrsa -aes128 -out server.key 2048
- genrsa
- RSA形式の秘密鍵を作成するサブコマンド。
- -aes128
- 128ビットAES暗号方式で暗号化する。
- -out 秘密鍵ファイル名
- 秘密鍵のファイル名を指定する。
- 2048
- 2048ビットの秘密鍵にする。ビット数は最後に書く。
パスフレーズの入力を求められるので、任意のパスフレーズを入力する。
Generating RSA private key, 2048 bit long modulus ............................+++ ............................................+++ e is 65537 (0x10001) Enter pass phrase:パスフレーズ Verifying - Enter pass phrase:パスフレーズ
このコマンドで次のような内容の秘密鍵(server.key)が作成できる。ENCRYPTED と記述があり暗号化された鍵であるととが確認できる。
-----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: AES-128-CBC,32BF731BF35BAB90FA63AE09824F4FDC -----END RSA PRIVATE KEY-----
CSR(証明書の基になる情報)の作成 (server.csr)
証明書の基になる情報を記述した CSR ファイル(server.csr)を作成する。
- CSR(Certificate Signing Request)には、証明書の基になる情報を書く。
- 内容は、組織名やサーバのアドレスなど。
次の openssl コマンドで CSR ファイルを作成する。
openssl req -new -key server.key -sha256 -out server.csr
- req
- CSRファイルを作成する。
- -new
- 新規にCSRを作成する。
- -key 秘密鍵ファイル
- 秘密鍵のファイル名を指定する。
- -sha256
- 署名アルゴリズムとして SHA-2 を利用する。(SHA-1 にする場合は、このオプションを付けない。)
- -out CSRファイル名
- 作成する CSR のファイル名を指定する。
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 []:空白 Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:空白 An optional company name []:空白
Common Name の注意点 |
入力項目の例
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 []: | 別の組織名の入力(空欄にする) |
CSR(server.csr)は次のような内容になる。
-----BEGIN CERTIFICATE REQUEST----- -----END CERTIFICATE REQUEST-----
証明書(公開鍵)の作成 (server.crt)
SSL 通信には CA(Certification Authority, 認証局)が発行した証明書が必要だが、自分自身でデジタル証明書(server.crt)作成する。
このデジタル証明書の発行をおこなっている第三者機関が VeriSign などになるが、自分自身でデジタル証明書をつくることもできる。 |
次の openssl コマンドでデジタル証明書(server.crt)を作成する。
openssl x509 -req -days 365 -sha256 -in server.csr -signkey server.key -out server.crt
- x509
- X.509 形式の証明書を作成する。
- -req
- CSRファイルを入力し署名して書き出す。
- -days 日数
- 証明書の有効期限を指定する。
- -sha256
- 署名アルゴリズムとして SHA-2 を利用する。(SHA-1 にする場合はこのオプションを付けない。)
- -in CSRファイル
- CSR ファイル名を指定する。
- -signkey 秘密鍵ファイル
- 自己証明書作成時に使用するオプション。秘密鍵ファイルを指定する。
- -out 証明書のファイル名
- 証明書のファイル名を指定する。
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:パスフレーズ
証明書(server.crt)は次のような内容になる。
-----BEGIN CERTIFICATE----- -----END CERTIFICATE-----
以上で、秘密鍵、証明書(公開鍵)の作成が完了。
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 起動時にパスフレーズの入力を省略する
上記の方法で作成した秘密鍵(server.key)は、作成時に入力たパスフレーズで暗号化された状態になっているので、Apache を起動する時に復号化するためのパスフレーズの入力を求められる。
毎回パスフレーズを入力するのは面倒なので、以下のどちらかの方法で回避することができる。
- 秘密鍵 (server.key) ファイルを復号化し、復号化したファイルを使用するようにする方法。
- Apache起動時のパスフレーズ入力を自動化する方法。
秘密鍵 (server.key) ファイルをあらかじめ復号化しておく方法
- server.key の名前を変更する。
- 次のコマンドでパスフレーズを解除する。(復号化する。)
mv server.key server.key.back
openssl rsa -in server.key.back -out server.key
パスフレーズの入力を求められるので、パスフレーズを入力する。
Enter pass phrase for server.key.back:パスフレーズ
writing RSA key
復号化した秘密鍵の内容は以下のように、ENCRYPTED の記述がなくなる。
-----BEGIN RSA PRIVATE KEY----- -----END RSA PRIVATE KEY-----
Apache起動時のパスフレーズ入力を自動化する方法
SSLPassPhraseDialog ディレクティブで、パスフレーズを標準出力するような外部コマンドを指定し、パスフレーズを自動入力するように設定する。
外部コマンドは何でもよいので、簡単なシェルスクリプトを用意する。
例えば下記のような内容のファイル /etc/httpd/conf.d/pass-phrase.sh を作り、パーミッションを 500 にする。
#!/bin/sh echo "パスフレーズ"
SSLPassPhraseDialog ディレクティブは次のように指定する。
#SSLPassPhraseDialog builtin SSLPassPhraseDialog exec:/etc/httpd/conf.d/pass-phrase.sh
参考ページ
Apache 関連のページ
- Let's EncryptのSSLサーバー証明書を、使用するサーバーとは別のマシンで作成する . . カテゴリ: Apache | セキュリティ
- Apache/ログのローテーション . . カテゴリ: Apache
- ModSecurity のインストール . . カテゴリ: Apache | Webアプリ | セキュリティ
- WAF-FLE(ModSecurity Console)のインストールとセットアップ . . カテゴリ: Apache | Webアプリ | セキュリティ
- Apache/アクセス制御 . . カテゴリ: Apache | アクセス制御
- Apache/バーチャルホストのログをリモートのrsyslogに集約する . . カテゴリ: Apache | syslog
- eAccelerator をインストールする . . カテゴリ: Apache | Webアプリ
- ベリサイン SSL サーバ証明書取得から apache mod ssl 設定までの流れ . . カテゴリ: Apache | セキュリティ
- RT Request Tracker を CentOS 5 にインストールする . . カテゴリ: Apache | CentOS | Webアプリ | メール
- Apache/HTTPユーザー認証の設定 . . カテゴリ: Apache | アクセス制御 | セキュリティ
- Apache/リバースプロキシ . . カテゴリ: Apache
- Apache/WebDAVの設定 . . カテゴリ: Apache | ファイルサーバ
- Apache/HTTP TRACE の無効化 . . カテゴリ: Apache | セキュリティ