CentOS7 Apache+OpenSSL

スポンサーリンク

■OpenSSLのインストール


個人情報がうるさく言われる現在、SSLで暗号化をかけることはよくあります。ベリサインなどの認証局などで発行される証明書は有料となりますので自分で署名する自己証明書でSSL暗号化をかけてみます。まず必要なモジュールをインストールします。

# yum install mod_ssl
# rpm -qa | grep mod_ssl
mod_ssl-2.4.6-80.el7.centos.1.x86_64


まず最初にopenssl.cnfファイルを編集しサーバ証明書の有効期限に関する設定を行っておきます。

 

# vi /etc/pki/tls/openssl.cnf

<一部抜粋>
default_days    = 3650                  # how long to certify for


秘密鍵を作成するための乱数ファイルを作成します。下記では/var/log/messagesを指定しています が、/etc/*としてもOKですし何でもOKだと思います。

 

# cd /etc/pki/tls/
# openssl md5 /var/log/messages* > rand.dat
# more rand.dat
MD5(/var/log/messages)= 8335a10c5ce431648989ab9824ee286a
MD5(/var/log/messages-20180805)= e99a16ac446e255057accc7412a6e995
MD5(/var/log/messages-20180812)= 846299effaab492fd16308f04e28a299
MD5(/var/log/messages-20180819)= a38e2599530c749c4d60fa8ebcef26a9
MD5(/var/log/messages-20180826)= aa81d5d78bf22aea7dcf425475e5612d

乱数ファイルができましたのでこれを用いて秘密鍵を作成します。

 

# openssl genrsa -rand rand.dat -des3 2048 > ./private/test.key
321 semi-random bytes loaded
Generating RSA private key, 2048 bit long modulus
...........+++
...........................+++
e is 65537 (0x10001)
Enter pass phrase: [パスワード入力]
Verifying - Enter pass phrase:[再度パスワード入力]


上記にて秘密鍵ができましたので、これを用いて証明書発行要求(Certificate Signing Request)を作成します。

 

# openssl req -new -key ./private/test.key -out ./test.csr
Enter pass phrase for /etc/pki/tls/private/test.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) []:Kagawa
Locality Name (eg, city) [Default City]:Takamatsu-shi
Organization Name (eg, company) [Default Company Ltd]:Hogehoge
Organizational Unit Name (eg, section) []:Tech
Common Name (eg, your name or your server's hostname) []:www.unix-power.net
Email Address []:webmaster@unix-power.net

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: [何も入力しない]
An optional company name []:[何も入力しない]


上記でCSRが作成されましたので今度はこれを用いて証明書を発行します。有効期限は任意に決めることができますが下の例では10年にしています。

 

# openssl req -x509 -days 3650 -in test.csr -key private/test.key -out ./test.crt
Enter pass phrase for private/test.key:[秘密鍵のパスフレーズを入力]


これでWebサーバに設定する秘密鍵および証明書が作成されましたのでこれをApacheに組み込みます。編集するファイルは/etc/httpd/conf.d/ssl.confになります。

 

# vi /etc/httpd/conf.d/ssl.conf

# 証明書ファイルの指定
SSLCertificateFile /etc/pki/tls/test.crt
# 秘密鍵ファイルの指定
SSLCertificateKeyFile /etc/pki/tls/private/test.key
# ベリサインなどを利用する際は下記の中間証明書を設定する必要あり
#SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt


あとはapacheを起動すればhttpsが起動しますが、起動の際に秘密鍵のパスフレーズを聞かれます。セキュリティ上の観点からはこのままでも良いのですが都度入力するのが面倒くさい場合は以下のコマンドで外すことも可能です。

# openssl rsa -in private/test.key -out private/test-nopass.key
# vi /etc/httpd/conf.d/ssl.conf
SSLCertificateKeyFile /etc/pki/tls/private/test-nopass.key

SSLは通常443番を待ち受けているバーチャルサーバという形で実現されます。このためSSLに対する設定の他、SSLサーバに関する設定が必要となります。以下、デフォルトでインストールされているhttpd.confのSSLに関連する設定ファイルの抜粋です。

# vi /etc/httpd/conf.d/ssl.conf

<一部抜粋>
<VirtualHost _default_:443>
#DocumentRoot "/var/www/html"
#ServerName www.example.com:443

ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn

SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:3DES:!aNULL:!MD5:!SEED:!IDEA

SSLCertificateFile /etc/pki/tls/test.crt
SSLCertificateKeyFile /etc/pki/tls/private/test-nopass.key
#SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt

<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
SSLOptions +StdEnvVars
</Directory>

BrowserMatch "MSIE [2-5]" \
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>

最近のWebサイトは全てのコンテンツをhttpsでアクセスさせるのが主流となりつつあります。そうさせたい場合はhttpd.confに以下を追記してください。

# vi /etc/httpd/conf/httpd.conf

<以下を追記>
RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*)?$ https://%{HTTP_HOST}/$1 [L,R]

これでApacheを再起動させるとhttpでアクセスがあっても自動でhttpsにリダイレクトされます。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする