(52) CentOS7上のApacheで自己証明SSL設定
最初にApache関係をインストールしてWebサイトを構築します。
apacheをインストールします。
# yum install httpd httpd-devel mod_ssl
apacheを起動します。
# systemctl start httpd
apacheが自動起動するように設定します。
# systemctl enable httpd
必要ならapacheの設定を行います。
# cd /etc/httpd/conf
# vi httpd.conf
http,https,cstpなどがFirewallを通るように設定します。
# firewall-cmd --add-service=http --zone=public --permanent
# firewall-cmd --add-service=https --zone=public --permanent
# firewall-cmd --add-service=smtp --zone=public --permanent
# firewall-cmd --reload
--------------
ここからSSLの設定です。
・秘密鍵を置くディレクトリへ移動します。
# cd /etc/pki/tls/certs
・最初にサーバー用の秘密鍵を生成します。2048bit RSA鍵とします。
# openssl genrsa -aes256 2048 > server.key
この時にパスフレーズの入力が求められます。
Enter pass phrase: <適当なパスワード>
Verifying - Enter pass phrase: <適当なパスワード>
先ほど設定したパスワードを削除します。
秘密鍵からパスワードを削除するのはapache起動時に毎回パスワードを要求されないようにするためです。
# openssl rsa -in server.key -out server.key
Enter pass phrase for server.key:<設定されているパスワード>
・サーバー用の公開鍵を作成します。いくつか質問されるので入力します。
# openssl req -new -key server.key -days 3650 -out server.csr
Country Name (2 letter code) [GB]:JP
State or Province Name (full name) [Berkshire]:Tokyo
Locality Name (eg, city) [Newbury]:Roppongi
Organization Name (eg, company) [My Company Ltd]:Totsusangyo
Organizational Unit Name (eg, section) []::(そのままENTER)
Common Name (eg, your name or your server s hostname) []:<サーバー名を入力>
Email Address []:(mailaddr):(そのままENTER)
A challenge password []:(そのままENTER)
An optional company name []:(そのままENTER)
・サーバー用証明書を作成します。 3650日の有効期限を設定しました。
# openssl x509 -in server.csr -out server.pem -req -signkey server.key -days 3650
・ちゃんとできたか確認します。
# openssl x509 -in /etc/ssl/certs/server.pem -text
Certificate:
Data:
Version: 1 (0x0)
Serial Number:
86:e1:49:52:99:2d:e6:8a
Signature Algorithm: sha256WithRSAEncryption
以下省略しますが、こんな感じで表示されればOKです。
・セキュリティーを配慮して、各ファイルを所有者(root)のみ参照できるようにパーミッション変更しました。
# chmod 400 server.*
・httpdの設定を修正します。
# vi /etc/httpd/conf.d/ssl.conf
コメント解除してドキュメントルートを指定します。
DocumentRoot "/data/html"
コメント解除しサーバー名を指定します。
ServerName (FQDN):443
変更します。
SSLProtocol all -SSLv2
↓
SSLProtocol all +TLSv1 +TLSv1.1 +TLSv1.2
証明書を指定します。
SSLCertificateFile /etc/pki/tls/certs/server.pem
鍵ファイルを指定します。
SSLCertificateKeyFile /etc/pki/tls/certs/server.key
SSLのエンジンをオンします。
SSLEngine on
・Apacheをリスタートします
# systemctl restart httpd
SSLの自己証明書の期限が切れた場合には、SSH接続後、以下のようなコマンドで期限を延長することができます。
# openssl x509 -days $days -signkey $key_path -in $in_crt_path -out $out_crt_path
daysは日単位での証明書の有効期間、pathはそれぞれのファイルパスとなります。例えば、ssl.keyの 秘密鍵で作成されたssl.crtの期限を1年間延長してssl.crt.newとして保存したい場合には、
# openssl x509 -days 365 -signkey ssl.key -in ssl.crt -out ssl.crt.new
のように実行します。
また、証明書の中身をコマンドラインから閲覧したい場合は、
# openssl x509 -noout -text -in $in_crt_path