エンジニア、オールインも辞さない

スタートアップやってます。Web系、アプリ系の話題多し。好きなことはポーカー、ウイスキー、アウトドア。

WebサーバにSSL証明書をインストールする方法(Apacheを使っている人向け)

近年WebサイトのHTTPS対応が話題になっています。Googleが公式にHTTPS対応サイトのインデックス順位を上げることを表明したことは記憶に新しいです。

www.seohacks.net

またAppleも2017年1月以降、iOSアプリのwebviewでwebサイトに接続する場合、HTTPSを使うことが絶対条件になると語っていることから、もはやこの流れには抗えようもありません。

jp.techcrunch.com

端的に言うと、HTTPSに未対応のサイトは今後順次淘汰されていく流れである、ということでしょう。これはWebサイトを運営している諸兄においては対応しないわけにはいかない状況だということです。

 

だからといって、そんな簡単にHTTPS対応できるのかといえばそんなことはありません。SSL証明書の設置代行が商売になってしまうくらいですからね。日頃からサーバの構築を行っている人はともかくとして、独自ドメインを使ってなんらかのサイトを運営しているような一般的な方にとってはまあまあハードルが高いものと思います。

 

というわけで、今回は私が実際に行ったHTTPS対応について手順を記載していきますので、お困りの方はどうか参考にしてください。なお私は下記条件で構築を行いましたのでそれに近い環境の方を対象としています。ご了承ください。

*HTTPS対応とは、WebサーバにSSL証明書をインストールしhttps://aaa.example.comようなURLにアクセスできるようにする一連の作業を指します。

 

対象の環境について

さくらVPSサーバ

 - Apache2.2

 - CentOS6.6

 

SSL証明書について

証明書はどのように機能し、どういう効果があるのかについては下記が詳しいです。

SSL サーバー証明書の基礎知識|サイバートラスト

 

また証明書の代理店は色々あるのですが、個人的には下記がおすすめです。とにかく値段が安いのと、担当の方のレスポンスが早いのがよいです。

www.slogical.co.jp

 

手順

では早速設定を行っていきましょう。

まずSSL証明書をインストールするサーバにログインして、適当なパスに移動してください。特にこだわりがなければ、httpdのパスで良いのではないのでしょうか。今回は下記を使います。

 

#証明書を配置するパスに移動します

cd /etc/httpd/conf

 

#秘密鍵を作成します。この時パスワードが要求されるので適当に入力します。あとで使いますので忘れないように。

*keyname.keyは任意の名前に置き換えて問題ありません

openssl genrsa -des3 2048 > keyname.key

 

#パスワード付き秘密鍵も作成しておきます

* keyname.withpass.keyは任意の名前に置き換えて問題ありません

openssl rsa < keyname.key > keyname.withpass.key

 

#CSRを作成します

CSRとは、「Certificate Signing Request」 のことで認証局に対し、SSLサーバ証明書への署名を申請する内容を指します

*csrname.csrは任意の名前に置き換えて問題ありません

openssl req -new -key keyname.key -out csrname.csr

この時色々必要な情報を問われるので適宜入力します。

Enter pass phrase for keyname.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) : Tokyo // 適宜変更してよいでしょう
Locality Name (eg, city) [Default City]: Marunouchi // 適宜変更してよいでしょう
Organization Name (eg, company) [Default Company Ltd]:My Company Name // 適宜組織名を入れてください
Organizational Unit Name (eg, section)
:My Section Name // 適宜担当部署名を入れてください。空でもおそらく大丈夫です
Common Name (eg, your name or your server's hostname) :yourdomainname.jp // *重要*httpsにしたいドメイン名を入力します。ここで入力を誤ると全てが台無しになるので注意してください。
Email Address
:info@yourdomainname.jp // 適宜メールアドレスを入力します

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password : // 何も入力せずEnterで問題ありません
An optional company name
: // 何も入力せずEnterで問題ありません

 

#CSRの中身をcatし、コピーします

この内容を証明書の代理店に提出することで、証明書ファイルが発行されます。

cat csrname.csr

中身はこのようになっているので、BEGINからENDまで全てをコピーし、求められた方法に従って提出してください。

*下記内容は適当なのでご自分のCSRをご使用ください

-----BEGIN CERTIFICATE REQUEST-----
MIIC5jCCAc4CAQAwgaAxCzAJBgNVBAYTAkpQMQ4wDAYDVQQIDAVUb2t5bzESMBAG
A1UEBwdsawgdsJU2hpbmFnYXdhMRUwEwYDVQQKDAxISURFT1VUIENMVUIxFTATBg
DEhJREVPVVQgQ0xVQjEaMBgGA1UEAwwRbWcuaGlkZW91dGNsdWIuanAxIzAhBgkq
(中略)
XADXXrMm5kCbPgdsBZXhecHkjgGrflJOzUkugk9TECu1BelsePnEpFTKeOcB4kQE
ym3N70SsaZyXBiFyNrfVUo8BgPbhbsvJiS6Kdadsap3CTr3ABYsVPlxEqo7KOXwf
zv45FQSOS9MyuGsPdsgjo;uD917Aoi7wfhhBHpFoMCEqm8QDNW+DOO71I3H/DH2Q
TL5JpEedNm+trroMrqNrb17r0plHS7T7eho=
-----END CERTIFICATE REQUEST-----

 

決済完了後、しばらくすると証明書ファイルが通知されます。上記Geo Trustの場合はメールにて証明書が送付されてきます。下記のような文字列が送られてきますのでそれをコピーします。

-----BEGIN CERTIFICATE-----
MIIGVjCCBT6gAwIBAgIQaGETvf5acG7rgihcHOsQwzANBgkqhkiG9w0BAQsFADBC
MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjE
(中略)
Y3Tc5aIJgjuuBLoahsPGM5w3K/vHV5WMAHzFwCwp5U1fp5zR3VXlN1HZ
-----END CERTIFICATE-----

 

上記でコピーした内容を下記に保存し証明書ファイルを作ります

*ファイル名は任意です。

vi crtname.crt

 

また必要に応じて別途メールにて通知される中間証明書ファイルもコピーしてサーバに配置します。(SHA2(クロスルート)という名前のものを使います)

*ファイル名は任意です。

vi cstname.cst

 

これにて必要なファイルが出揃いました。最後にこれらをApacheにロードさせて完了となります。下記パスにvhosts.confというファイルがあるので、そこを編集します。

#pwd
/etc/httpd/conf.d
#ls -ld vhost.conf
-rw-r--r-- 1 root root 2629  8月 17 15:24 2016 vhost.conf

#vi vhost.conf

 

特定のドメインにアクセスしたときにhttpsでロードさせるために、443ポートに対してこのような設定を行います。下記を追加後apacheを再起動すると証明書が有効になります。

NameVirtualHost *:443
<VirtualHost *:443>
    DocumentRoot /var/www/html/yourdomainname.jp
    ServerName yourdomainname.jp:443
    SSLEngine on
    SSLProtocol all -SSLv2
    SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
    SSLCertificateFile /etc/httpd/conf/csrname.crt
    SSLCertificateChainFile /etc/httpd/conf/cstname.cst
    SSLCertificateKeyFile /etc/httpd/conf/keyname.withpass.key
    SSLOptions +StdEnvVars
    SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
</VirtualHost>

 

ブラウザでアクセスしたときにアドレスバーに鍵マークがかかっていればうまく反映されたということになります。