無料SSL証明書発行しセキュリティでA+を取る! 〜Apache編〜

概要

ベリトランスモジュールバージョンアップに際して
SHA256で発行したSSL証明書が必須となりました。

テスト環境でベリトランスモジュールバージョンアップ試験を行う際に
SSL証明書導入する必要が生じました。

本番環境と同じ有料SSLを導入するまでとはいかずとも
近しい状況を構築する必要があったので無料SSL証明書を発行し導入しました。

上記の手順をまとめましたので以下に記載します。

環境

AWS Marketplace: CentOS 6 (x86_64) - with Updates HVM を利用しています。

  • CentOS release 6.7 (Final)
  • Apache 2.4.12

手順

CSR生成

事前準備として、SSLインストール対象サーバで
CSRを生成しておきます。

SHA256 対応のCSR生成方法について以下ご参考ください。

StartComに登録

ヘッダーメニューの Sign-up クリック

StartSSL

必要事項登録し「send verification code」ボタンクリック

登録E-mail宛に verification codeが送付されます。

こんな感じのメールが来ます。

verfication codeを入力し登録完了

SSL発行手続き

無料版選択

SSLのWeb Server 用を選択

Domain Validation

SSLインストール対象サーバのドメイン入力

メール送信による認証

startSSL側で指定するメールアドレスで受信可能な状態にする必要があります。

ec2インスタンスのメール受信設定は以下記事が参考になりました。ありがとうございます。

AWS上のpostfixでメールを受信してみる

上記記事中の注意点として
インスタンス作成直後に yum update 分にはいいですが
時にAWSで yum update をするとkernel panicを起こすことがあります。
pythonをyumでなくソースから独自に入れ直したり、色々してたせいか…

原因は追い切れていませんが、経年運用したインスタンスについては yum update は控えたいと思います。

うまく受信設定できない場合
  • /var/log/maillog を 常に tailしてログ確認。

  • 受信可能なメールアドレスが既にあれば aliases で向け先変える。
    postmaster@(domain) → root@(domain)

  • メールボックスで Permission denied で
    受信メールを保存できない場合は以下強引にメールディレクトリを変更する。

1
2
3
4
/etc/postfix/main.cf

- home_mailbox = Maildir/
+ home_mailbox = ../home/ec2-user/Maildir/

SSL証明書 注文へ進む

メール受信による認証がクリア後、SSL証明書注文へ進みます。

認証情報作成

情報入力後、 (domain).zip がダウンロードされる。
※ 今回は WebServer が Apache なので ApacheServer を参照します。

解凍した zipファイルの ApacheServer 内の以下2ファイルを任意のディレクトリにアップしましょう。

  • 1_root_bundle.crt
  • 2_(domain).crt

今回アップ先ディレクトリは server.key 等のあるパス (/etc/httpd/conf/ssl.csr/) にします。

ssl.conf設定

SSL証明書のインストールとは
Apacheの設定ファイルとして指定ディレクティブで読み込ませる
ことです。

主な設定は以下です。

| Item | Value | Explain |
| ———————– | —————————————– |
| SSLCertificateChainFile | /etc/httpd/conf/ssl.csr/1_root_bundle.crt | 中間証明書 |
| SSLCertificateFile | /etc/httpd/conf/ssl.csr/2_(domain).crt | SSLサーバ証明書 |
| SSLCertificateKeyFile | /etc/httpd/conf/ssl.csr/server.key | SSLサーバ証明書とペアになる秘密鍵 |

以下URLで各WebServerとopensslバージョンにより最適な設定方法を示唆いただけます。

https://ssl-config.mozilla.org/

/etc/httpd/conf.d/ssl.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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
Mutex default ssl-cache

SSLRandomSeed startup file:/dev/urandom 256
SSLRandomSeed connect builtin
#SSLRandomSeed startup file:/dev/random 512
#SSLRandomSeed connect file:/dev/random 512
#SSLRandomSeed connect file:/dev/urandom 512

SSLCryptoDevice builtin

<VirtualHost _default_:443>

DocumentRoot "/var/www/html"
ServerName (domain):443

ErrorLog /var/log/ssl_error_log
TransferLog /var/log/ssl_access_log
LogLevel warn

SSLEngine on
SSLCertificateFile /etc/httpd/conf/ssl.csr/2_(domain).crt
SSLCertificateKeyFile /etc/httpd/conf/ssl.csr/server.key
SSLCertificateChainFile /etc/httpd/conf/ssl.csr/1_root_bundle.crt


<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"

<Directory "/var/www/html">
AllowOverride All
Options -Indexes +FollowSymLinks +Includes +ExecCGI
Order allow,deny
Allow from all
</Directory>

</VirtualHost>

SSLProtocol all -SSLv2 -SSLv3

SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS

SSLHonorCipherOrder on

SSLCompression off
SSLSessionTickets off

パフォーマンスチューニングを一切していません。
あくまで SSL証明書インストールを対象としていますのでご注意ください。

設定ファイルの構文確認

1
2
3
4
5
// 構文チェック
# httpd -t

// 構文エラーがない場合は以下のように表示されます。
Syntax OK

構文エラーが発生している場合は対象箇所が表示されますのでチェックし直してください。
但し、構文エラーがないからと言ってApache再読み込み時にエラーが発生しないとは限らないので
万が一の為、即元に戻せるようなコマンドを作っておくと良いでしょう。

例えば
ssl.conf を ssl.conf.bk にリネームして Apacheの設定ファイルとして見ないようにさせるなど。

Apache 設定ファイル再読み込み

1
2
# service httpd reload
Reloading httpd: [ OK ]

ブラウザからアクセス

Chromeでアクセスしました。

  • 認証の詳細な情報

セキュリティチェック

以下サイトで診断できます。
QUALYS SSL LABS

「A」が取れました!

ちなみに
常に https通信で問題ないサイトであれば以下のように設定すると

1
2
3
4
5
<VirtualHost *:443>
...
Header always set Strict-Transport-Security "max-age=15768000"
...
</VirtualHost>

「A+」取得できました!

常時httpsはセキュアではありますがサイトの仕様次第なところもあるので状況によりけりです。

以上

無料SSL証明書発行しセキュリティでA+を取る! 〜Apache編〜

https://kenzo0107.github.io/2016/02/24/2016-02-25-get-a-plus-ssl-quality/

Author

Kenzo Tanaka

Posted on

2016-02-25

Updated on

2020-05-07

Licensed under

コメント