SSL証明書をインストールする(自分でやればこんなに激安!)

Google が HTTPS(SSL/ TLS) を検索順位を決めるシグナルとして使用することが発表されてからSSL対応が気になる今日この頃ですが、まさにサーバ立ち上げのこのタイミングこそがSSL導入のベストタイミングと言えるのではないでしょうか?

VPSサーバならば自分でSSL証明書をインストールすることが出来ますので(と言うか自分でインストールするしかないんだけど)、格安の証明書を購入して一年わずか数百円でサイトをSSL化してしまいましょう!

サーバ内での事前準備

秘密鍵を生成する

まずはVPSサーバ内で秘密鍵というものを作ります。

Apache の設定ファイルのパスに移動します。

cd /etc/httpd/conf/

秘密鍵、CSR、証明書などを格納するディレクトリを作っておきます。

mkdir ssl.key
mkdir ssl.csr
mkdir ssl.crt

秘密鍵を生成します。(新規ではなく更新の場合は既存のファイルを上書きをしないように注意!)
秘密鍵のファイル名は任意で良いのですが、ドメイン名とその年の年号などを含めると、分かりやすいし上書き防止になるのでお勧めです。
例)hogehoge.com.2015.key

openssl genrsa -des3 -out ./ssl.key/hogehoge.com.2015.key 2048

パスワードを決めるよう求められますので、パスワードを入力します。
確認のため、再度同じパスワードを入力します。
※ ここで入力するパスワードを忘れてしまうと証明書を使用することができなくなるのでご注意を。

CSRを生成する

CSRとは、ドメイン所有者が認証局に提出する署名リクエスト(Certificate Signing Request)です。

次のようにコマンドを入力するとCSRが生成されます。
./ssl.key/hogehoge.com.2015.key という秘密鍵から、./ssl.csr/hogehoge.com.2015.scr というCSRファイルを作る例です。

openssl req -new -key ./ssl.key/hogehoge.com.2015.key -out ./ssl.csr/hogehoge.com.2015.csr

パスワードを入力後、以下の項目を入力するよう求められますので、半角英数字で入力していきます。

フィールド 説明
Country Name 国を示す2文字のISO略語を入力。 JP
State or Province Name 組織が置かれている都道府県を入力。 Tokyo
Locality Name 組織が置かれている市区町村を入力。 Shibuya-ku
Organization Name 組織の名称を入力。 HogeHoge Corp.
Organization Unit Name 組織での部署名。 指定がない場合は – (ハイフン)を入力。 Sales
Common Name ウェブサーバのFQDNを入力。
King SSL で購入する場合、「www」付きを指定しておくと、「www」有りと無しの両方に対応できるので「www」付きが吉。
www.hogehoge.com
Email Addres 入力不要。
A challenge password 入力不要。
An optional company name 入力不要。

生成されたCSRファイルの内容を Webmin で開いてコピーします。
例)/etc/httpd/conf/ssl.csr/hogehoge.com.2015.csr

↓これはCSRの一例です。これをコピーしないでください。

-----BEGIN CERTIFICATE REQUEST-----
MIICnjCCAYYCAQAwWTELMAkGA1UEBhMCSlAxDjAMBgNVBAgMBUFpY2hpMRAwDgYD
VQQHDAdPa2F6YWtpMREwDwYDVQQKDAhIT0dFSE9HRTEVMBMGA1UEAwwMaG9nZWhv
Z2UuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2ZDDMj71wAQ+
oSHaWrwLWb2XgaYOclYz+U12Rqe1mZ50btrhdwd4/aTwO8qUjWM+FwQSHuhmt90D
3CLMZj90eGsorcR5aiY1M8Dh3BLUUTaZl+LJf9UCY0dthxFWqHJrQkjjsGekcKPK
A23Wp3OSm6wfTnpUXFhHhqqnuUsHel5wcqvelvStL5rK28+GoJH3ZZ2Ed4h9l9JX
JmZfMBF+4xeAf+LOLjngVnR3N9Wlwzx2EcXR70npVMDU9rkNyqzMhI7pSfeMM7PY
Ze/OJKuxxvZ45e2Fgl3ZqH2gbWbF1UZzV5a5RAUybjZgdPBezAOIQPp2KiEf2/9U
qijN2gnQ4wIDAQABoAAwDQYJKoZIhvcNAQEFBQADggEBALqYh7otS4fQzaZMxfyk
W3w4sp/Nr/F6UYtZEmsN2EzgPzzHmbSgDIM0yIsAXN3kJNZecmFYh9Ev84LDek9U
TN27IsRHjD0SzjCXKmSz9asxxX9NOwihgSaZ2OsPHx9RjtjxfW/wDCjcoGAUoXEE
F96d6LbEtB8DUmyYMbR1Heapn+zN41L3E1wpM1cqQa1mqYaL4Vk/ph2niHC9y8/L
v4F+JT8ziq2ZyqxwHmDdrkZVUxKIYzdRzeKr/oi+Cp8CC2Fb2YDoGZSKnoeRUqP9
vNqyjuE03HduGi8VfjKI3N0vXpqmUA57JyToyFXAou297giGCQSKc/89xn6ys1oB
VLQ=
-----END CERTIFICATE REQUEST-----

CSRは破線の行も含めて全てコピーする必要があります。

SSL証明書を購入する

SSL証明書の購入を申し込む

わずか年額900円(3年契約なら717円!)でSSL証明書が購入できる KingSSL を利用してみましょう。
暗号強度256bit&ブラウザ対応率99%以上と、格安ですが機能は十分です。
24時間対応の上、約2分程で証明書を受け取れる点も魅力です。

KingSSLの申込ページに進みます。

KingSSL

いろいろなプランがありますが、大抵は年額900円のSHA-2を新規で申し込めば良いと思います。(10個以上のサブドメインに対してSSLを導入したい場合は、ワイルドカードを選択する方がお値打ちになると思います。)

先程コピーしたCSRをペーストします。

KingSSL申込ページ

CSRをペーストして次へ進みます。

下段の「乗り換え元証明書」は空白のままでOKです。
(乗り換えの場合は、使用中の証明書をペーストします。有効期限が引き継がれ延長されますのでお得です。)

CSRをペーストしたら次の画面に進みます。

内容を確認して問題が無ければさらに次に進みます。
もし誤りがあれば、秘密鍵の生成からやり直します。

kingssl

内容を確認して誤りがないかチェックします。

証明書を取得するには、ドメイン所有者の承諾が必要なので、ドメイン所有者宛に承認の手続きに関するメールが届きます。

リストの中から、ドメイン所有者のメールアドレスを選択します。

先の記事でメールアドレスを取得する際に、adminなどのメールアドレスを取得する必要があると書いたのですが、それがここで必要になるわけです。)

承認メールを受信するメールアドレスを選択します。あらかじめ、いずれかのメールアドレスを受信可能にしておく必要があります。

承認メールを受信するメールアドレスを選択します。あらかじめ、いずれかのメールアドレスを受信可能にしておく必要があります。

契約期間とお客様情報を入力します。

お客様情報を入力します。

お客様情報を入力します。個人でも購入できますのでご安心を。

その後、クレジットカード情報を入力し、内容を確認したら申込完了となります。

承認メールを受信して承認する

ドメイン所有者宛に「KingSSL/承認手続きのお知らせ」というメールが届きますので、本文に書かれたURLにアクセスして承認ボタンを押します。

証明書をサーバに保存する

承認後、しばらくすると申込者の元へ「[KingSSL]サーバ証明書発行のお知らせ」というメールが届きます。

証明書というと、何か特殊なデータのように思われるかも知れませんが、英数字が連なった文字情報です。メールの本文には、「証明書」と「中間証明書」と「証明書+中間証明書」が記載されています。

今回は「証明書」と「中間証明書」をサーバにインストールしていきます。

Webmin で Apache の設定ファイルの置かれたディレクトリ内に、ssl.crt というディレクトリを作ります。

/etc/httpd/conf/ssl.crt/

このディレクトリ内に、証明書を保管することにします。

Webmin で新規ボタンを押して新しいテキストファイルを作り、ファイル名は「hogehoge.com.2015.crt」とします。(ドメイン名はあなたの所有するドメイン名に変更してください。)

メールの本文から証明書をコピーして、作成したファイルに張り付けて保存します。

続いて中間証明書をインストールします。同じ場所に「intermediate_sha256_G2.cer」というファイルを作ります。先程と同じように、メールから中間証明書をコピーして貼り付けます。

ここまで作業を行うと以下のような構成になっていると思います。

 etc
  |
  |-httpd
    |
    |-conf
      |
      |-ssl.key
      |  |
      |  |-hogehoge.com.2015.key
      |
      |-ssl.csr
      |  |
      |  |-hogehoge.com.2015.csr
      |
      |-ssl.crt
      |  |
      |  |-hogehoge.com.2015.crt
      |  |-intermediate_sha256_G2.cer

Apacheの設定ファイルを書き換える

名前ベースのバーチャルホストでSSLを使う

今回は、複数のドメインでSSL通信を実現するために、名前ベースのバーチャルホストでSSLを使用できるようにします。

この方法は、ひとつのIPアドレスで複数のドメインをSSL化できますが、ブラウザがSNIに対応している必要があります。WindowsXPのIE8や、古いアンドロイドはSNIに対応していませんので、「信頼できない通信~~」という類の警告が表示されてしまいます。(WindowsXPでも、ChromeやSafariを使えば問題ないようです)

SNIに対応していないブラウザであっても、複数のドメインの内最初にSSLを設定したドメインだけは警告表示されることなくアクセスできますので、ドメインが1つだけの場合は問題ありません。また、重要なメインサイトが最初に読み込まれるよう設定して、その他のドメインについてはXP+IE8のSSLをあきらめるという選択も有りかと思います。

今のところ(2015年2月現在)さくらVPSはグローバルIPが1個しか付与されませんので、複数のドメイン全部についてXP+IE8+SSL通信したいという場合は、ドメインの数だけVPSサーバをレンタルするか、複数IPが追加できる他のサービスを探す必要があります。

ssl.conf を編集する

Apache の SSL設定ファイルを編集します。

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

  1. <VirtualHost _default_:443> 以降をザックリ全部削除します。
    (後で別ファイルでVirtualHostを設定します。)
  2. SNIに未対応のブラウザ対策として、以下の一行を追加します。
    SSLStrictSNIVHostCheck off
  3. 名前ベースのバーチャルホストを使用できるように宣言します。
    NameVirtualHost *:443
#
# This is the Apache server configuration file providing SSL support.
# It contains the configuration directives to instruct the server how to
# serve pages over an https connection. For detailing information about these 
# directives see <URL:http://httpd.apache.org/docs/2.2/mod/mod_ssl.html>
# 
# Do NOT simply read the instructions in here without understanding
# what they do.  They're here only as hints or reminders.  If you are unsure
# consult the online docs. You have been warned.  
#

LoadModule ssl_module modules/mod_ssl.so

#
# When we also provide SSL we have to listen to the 
# the HTTPS port in addition.
#
Listen 443

##
##  SSL Global Context
##
##  All SSL configuration in this context applies both to
##  the main server and all SSL-enabled virtual hosts.
##

#   Pass Phrase Dialog:
#   Configure the pass phrase gathering process.
#   The filtering dialog program (`builtin' is a internal
#   terminal dialog) has to provide the pass phrase on stdout.
#SSLPassPhraseDialog  builtin
SSLPassPhraseDialog exec:/etc/httpd/conf.d/pass-phrase.sh

#   Inter-Process Session Cache:
#   Configure the SSL Session Cache: First the mechanism 
#   to use and second the expiring timeout (in seconds).
SSLSessionCache         shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout  300

#   Semaphore:
#   Configure the path to the mutual exclusion semaphore the
#   SSL engine uses internally for inter-process synchronization. 
SSLMutex default

#   Pseudo Random Number Generator (PRNG):
#   Configure one or more sources to seed the PRNG of the 
#   SSL library. The seed data should be of good random quality.
#   WARNING! On some platforms /dev/random blocks if not enough entropy
#   is available. This means you then cannot use the /dev/random device
#   because it would lead to very long connection times (as long as
#   it requires to make more entropy available). But usually those
#   platforms additionally provide a /dev/urandom device which doesn't
#   block. So, if available, use this one instead. Read the mod_ssl User
#   Manual for more details.
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

#
# Use "SSLCryptoDevice" to enable any supported hardware
# accelerators. Use "openssl engine -v" to list supported
# engine names.  NOTE: If you enable an accelerator and the
# server does not start, consult the error logs and ensure
# your accelerator is functioning properly. 
#
SSLCryptoDevice builtin
#SSLCryptoDevice ubsec


# offに設定(SNIに未対応のブラウザ用)
SSLStrictSNIVHostCheck off

NameVirtualHost *:443

バーチャルホスト設定ファイルを編集する

バーチャルホストの設定ファイルをSSLに対応させます。
先程の hogehoge.com 用に作成した hogehoge.com.conf を編集します。

/etc/httpd/conf.vh/hogehoge.com.conf

SSL用のバーチャルホスト設定を書き足します。

<VirtualHost *:80>
    ServerName hogehoge.com
    ServerAlias www.hogehoge.com
 
    DocumentRoot /var/www/hogehoge.com
 
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^(www\.hogehoge\.com)(:80)? [NC]
    RewriteRule ^/(.*) http://hogehoge.com/$1 [R=301,L]
 
    ErrorLog logs/error_log
    CustomLog logs/access_log combined
 
    <Directory "/var/www/hogehoge.com">
        DirectoryIndex index.html index.htm index.php index.cgi index.html.var
        Options -Indexes ExecCGI FollowSymLinks
        AllowOverride All
      #mod_deflate設定
      <IfModule mod_deflate.c>
        SetOutputFilter DEFLATE
        AddOutputFilterByType DEFLATE text/html text/plain text/xhogehogeml application/x-javascript text/css
      </IfModule>
        Order deny,allow
        Allow from all
    </Directory>
</VirtualHost>

<VirtualHost *:443>
    ServerName hogehoge.com
    ServerAlias www.hogehoge.com
 
    DocumentRoot /var/www/hogehoge.com
 
    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^(www\.hogehoge\.com) [NC]
    RewriteRule ^/(.*) https://hogehoge.com/$1 [R=301,L]
 
    ErrorLog logs/error_log
    CustomLog logs/access_log combined
 
    SSLEngine on

    SSLCertificateChainFile /etc/httpd/conf/ssl.crt/intermediate_sha256_G2.cer
    SSLCertificateFile      /etc/httpd/conf/ssl.crt/hogehoge.com.2015.crt
    SSLCertificateKeyFile   /etc/httpd/conf/ssl.key/hogehoge.com.2015.key

    SSLProtocol             all -SSLv2 -SSLv3
    SSLCipherSuite          ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
    SSLHonorCipherOrder     on

    <Directory "/var/www/hogehoge.com">
        DirectoryIndex index.html index.htm index.php index.cgi index.html.var
        Options -Indexes ExecCGI FollowSymLinks
        AllowOverride All
      #mod_deflate設定
      <IfModule mod_deflate.c>
        SetOutputFilter DEFLATE
        AddOutputFilterByType DEFLATE text/html text/plain text/xhogehogeml application/x-javascript text/css
      </IfModule>
        Order deny,allow
        Allow from all
    </Directory>

    SetEnvIf User-Agent ".*MSIE.*" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0
</VirtualHost>
  • 40行目: SSLを有効にする
  • 42~44行: 秘密鍵と証明書、中間証明書を指定する
  • 46行目: セキュリティに問題があるSSL2とSSL3を無効にする
  • 47行目: OpenSSL や Apache のバージョンによって最適値が異なります。以下のジェネレータを活用すべし。

SSL用の設定ファイルを作る場合は、こちらのジェネレータがとても便利です。Apache のバージョンや OpenSSL のバージョンを入力すると適切な設定例を提示してくれます。
Mozilla SSL Configuration Generator

Mozilla SSL Configuration Generator

Mozilla SSL Configuration Generator

尚、Apache と OpenSSL のバージョンの調べ方は以下の通りです。

httpd -v ← Apacheのバージョンを調べるコマンド
Server version: Apache/2.2.15 (Unix) ← 得られたバージョン情報
Server built:   Oct 16 2014 14:48:21

openssl version ← OpenSSLのバージョンを調べるコマンド
OpenSSL 1.0.1e-fips 11 Feb 2013 ← 得られたバージョン情報

HSTSとは以下のような仕組みです。特に理由がなければ、Enabledにチェックを入れて良いと思います。

「このサイトにはHTTPではなくHTTPSで必ず接続するように」と、サーバーがブラウザに指示するHTTPヘッダー。この指示を受け取ったブラウザは、その情報を記録しておき、以降は、そのサイトに対してアクセスするのにHTTPを使わず自動的にHTTPSで接続するようにする。

「Modern」「Intermediate」「Old」のどれを選択するかによって、セキュリティの強度が変わります。それに伴ってサポートするブラウザが変わります。Modern を選択するとセキュリティは高まりますが、最近のブラウザしか対応できなくなりますので、Intermediate あたりが適当なのではと思います。

Apache を再起動する

設定ファイルの書き換えが完了したら、Apache を再起動します。
restartでは正常に読み込まれない場合があるので、一度止めてから起動し直します。

apachectl stop
apachectl start

SSL証明書のパスフレーズの入力を求められますので、秘密鍵を作った時のパスワードを入力します。

無事に再起動が成功すれば完了です!

再起動の度に毎回パスフレーズの入力が必要なのですが、それが面倒だという場合は自動化することも可能です。「SSL パスフレーズ 省略」というキーワードでググってみてください。

設定後のセキュリティチェックは以下のページからどうぞ。

Qualys SSL Labs – SSL Server Test

以上で、ウェブサーバの設定は完了です!

KingSSL以外にも、格安のSSL証明書はあります。

以下の格安SSL証明書もお勧めです↓

  1. さくらのVPSでウェブサーバ、インストールマニュアル
  2. さくらVPSを申し込んで起動する
  3. パソコンにターミナルエミュレータをインストールする
  4. ユーザーを登録する
  5. ファイヤーウォールを設定する
  6. Webminをインストールする
  7. ApacheとPHPをインストールする
  8. MySQL、phpMyAdminをインストールする
  9. Apache + PHP を FPM/FastCGI で動かす
  10. ApacheをWorkerモードに切り替え&APCをインストールする
  11. 独自ドメインの取得&メールアドレスを設定する
  12. Apache の VirtualHost を編集する
  13. SSL証明書をインストールする(自分でやればこんなに激安!)
  14. SFTPでファイルを転送する
  15. DropboxでVPSサーバを丸ごと全自動バックアップする

シェアする

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

フォローする

コメント

  1. […] SSL証明書をインストールする(自分でやればこんなに激安!) […]