ConoHa(コノハ)のVPSでSSL証明書の取得を行いHTTP通信できるようにした構築まとめ

著者:
投稿日:
更新日:

はじめに

ボタンをポチポチ押してSSL化する方法ではなくコマンドを使用して構築する方法を説明いたしますのである程度のサーバサイドの知識がある向けに書きます。

環境

・ConoHaでvpsを作成

・OSはcentOS6.9

・最低限の構築しかしてない(ポート設定、webサーバ構築)


追記

centOS6.10でやるとちょいちょいエラーになります

なので、追記でエラー回避を書きました

その前に・・・この記事は@yoshizaki_kkgkさんが書いた記事をほぼほぼ模範して書きました

それでも足りない部分がございましたので間違いを修正し、足りない箇所を加筆して仕上げました。

SSL証明書購入の前準備

まずSSL証明書を購入といきたいところですが、この前にサーバー側で準備をしておく必要があります。

この準備をしておかないと、手戻りが発生したりするので。


事前に準備する物は CSR(Certificate Signing Request)です。

日本語では、署名要求と呼ばれます。

出典:さくらVPSにSSL証明書を導入しHTTPS通信の構築

	

必要なモジュールのインストール

秘密鍵使い回す際にサーバーを変えた時もmod_ssl、opensslインストールは必須となります。
yum install mod_ssl

yum install openssl

秘密鍵の作成

CSR作成には、まず秘密鍵が必要となります。

秘密鍵を管理しやすいように、ディレクトリを作成します。

※ /etc/httpd/conf はApacheの構成ファイルを格納している場所です。

出典:さくらVPSにSSL証明書を導入しHTTPS通信の構築

	
cd /etc/httpd/conf

mkdir ssl.key

cd ssl.key


$ openssl genrsa -des3 -out server.key 2048

Generating RSA private key, 2048 bit long modulus

.........................................................................+++

...................................+++

e is 65537 (0x10001)

Enter pass phrase for server.key:

Verifying - Enter pass phrase for server.key:

求められるパスワードに関しましてはできるだけ長いランダムなパスワードにしましょう

個人的には1Passwordというアプリで32文字のパスワードを生成しました。


追記一生使用するパスワードなので保存しといてください

CSR作成

CSR用のディレクトリを作成

cd /etc/httpd/conf

mkdir ssl.csr

$ openssl req -new -key ssl.key/server.key -out ssl.csr/server.csr

Enter pass phrase for ssl.key/server.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]:Shinagawa-ku Organization Name (eg, company) [Default Company Ltd]:Carat Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server hostname) []:www.caratinc.jp Email Address []:yourmail@example.com

Please enter the following "extra" attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:
作成されたCSRを確認

ls ssl.csr/

server.csr


cat ssl.csr/server.csr

-----୨୧-----୨୧-----୨୧-----‎
--BEGIN CERTIFICATE REQUEST
-----୨୧-----୨୧-----୨୧-----‎
--

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

-----୨୧-----୨୧-----୨୧-----‎
--END CERTIFICATE REQUEST
-----୨୧-----୨୧-----୨୧-----‎
--
-----୨୧-----୨୧-----୨୧-----‎
--BEGIN CERTIFICATE REQUEST
-----୨୧-----୨୧-----୨୧-----‎
-- から
-----୨୧-----୨୧-----୨୧-----‎
--END CERTIFICATE REQUEST
-----୨୧-----୨୧-----୨୧-----‎
-- までがこれからの申込みに必要なので、エディターあたりにコピーすると後で楽です。

SSL証明書の購入~認証ファイルのダウンロード

認証ファイルをサーバーに配置

つぎに、ダウンロードしたファイルをサーバー上に配置します。

配置する場所は変わる可能性があるので公式の情報を調べてください。

現時点(2019年04月23日)での配置はこちらになっております。

http://example.com/.well-known/pki-validation/ランダムな文字列.txt

or

https://example.com/.well-known/pki-validation/ランダムな文字列.txt

cd /var/www/html/  

ディレクトリ作成

mkdir .well-known


cd .well-known


mkdir pki-validation


cd pki-validation


vi fileauth.txt

ローカルのファイルの中身をコピペ

またはFTPなどのアップロードアプリで作成してもオッケーです。
これでOKです。

一応、アクセスしてみて、ファイルが配置されているか確認しておきましょう。


http://example.com/.well-known/pki-validation/fileauth.txt


これでブラウザ上に、ファイルの中身が表示されれば配置に成功しています。

あとは、さくらインターネット側がこの認証ファイルが配置されていることを自動的に徘徊して確認していますので、3分ほど待ちます。

出典:さくらVPSにSSL証明書を導入しHTTPS通信の構築

自分の場合は15分ほどかかりました。
上記の画面のように、利用中になれば認証ファイルが認証されたことになります。

「サーバー証明書」から「サーバー証明書DL」をクリックし、サーバー証明書をローカルへダウンロードしましょう。

server.crt というファイルがダウンロード出来るはずです。

出典:さくらVPSにSSL証明書を導入しHTTPS通信の構築

	

サーバー証明書の配置

認証ファイルと同様に、ローカルにダウンロードした server.crt をリモートにコピーしていきましょう。

出典:さくらVPSにSSL証明書を導入しHTTPS通信の構築

	

サーバー証明書の配置

cd /etc/httpd/conf

mkdir ssl.crt

サーバー証明書用のディレクトリも作成

cd ssl.crt/

vi server.crt

追記 Apache 2.4.8以降から設定が変更されました
Apache 2.4.8 から中間CA証明書を指定するSSLCertificateChainFile ディレクティブが廃止されました。中間CA証明書、およびクロスルート証明書(オプション)はサーバ証明書と一つの証明書ファイルとしてまとめて、SSLCertificateFileディレクティブに指定してください。

server.crt

サーバー証明書

-----୨୧-----୨୧-----୨୧-----‎
--BEGIN CERTIFICATE
-----୨୧-----୨୧-----୨୧-----‎
--

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

-----୨୧-----୨୧-----୨୧-----‎
--END CERTIFICATE
-----୨୧-----୨୧-----୨୧-----‎
--

中間CA証明書

-----୨୧-----୨୧-----୨୧-----‎
--BEGIN CERTIFICATE
-----୨୧-----୨୧-----୨୧-----‎
--

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

-----୨୧-----୨୧-----୨୧-----‎
--END CERTIFICATE
-----୨୧-----୨୧-----୨୧-----‎
--
これで証明書の配置は完了です。
また、サーバー証明書以外にも中間証明書というものが必要であり、たとえばラピッドSSLの場合は、認証局からメールがくるのですが、こちらから中間証明書を取得でき、同様にサーバー上にファイルを作成します。

出典:さくらVPSにSSL証明書を導入しHTTPS通信の構築

	
target="_blank">中間CA証明書(ラピッドSSL用)ダウンロード(SHA-2)|SSLサーバ証明書 ...

target="_blank">https://www.geotrust.co.jp/resources/rapidssl/repository/intermediate_sha2.html
b

class="matome_content_block_link_description"> SSLならジオトラスト【公式サイト】サポートのご案内ページ。SSLのジオトラストは、SSLサーバ証明書を発行する世界第二位(22万社の導入実績)のSSLプロバイダです。

Apacheに反映

ここの章はvhostを使用する前提で説明してまいります。

最初にhttps.confに記述してあるListen 80をコメントアウトしましょう。

理由としましては、次に作成するvhost.confの中に統一したいからです。※ 重複するとエラーになります

vi /etc/httpd/conf/httpd.conf


Listen 80

Listen 80

追記 Apache 2.4.8以降の設定↓
vi /etc/httpd/conf.d/ssl.conf

LoadModule ssl_module modules/mod_ssl.so


DocumentRoot "/var/www/html"


設定しているドメイン入力

Listen 443

ServerName ドメイン:443


SSLPassPhraseDialog builtin

SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000)

SSLSessionCacheTimeout 300

SSLRandomSeed startup file:/dev/urandom 256

SSLRandomSeed connect builtin

SSLCryptoDevice builtin

SSLEngine on

SSLProtocol all -SSLv2


作成したサーバーと中間証明書のファイル指定

SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt

作成した秘密キーファイル指定

SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key

この設定ファイルを保存し、あとはサーバーを再起動すれば、

https通信ができます。


サーバー再起動時にパスワードの入力を求められるので、最初に作成した秘密鍵のパスワードを入力して下さい。


パスフレーズが求められなくてエラーになる場合はこの記事の一番下に解決手順を書いていますのでそちらを試してください。

サーバーの再起動

service httpd restart

or

systemctl restart httpd

これにて解説終わりです。


初めてやる人はかなりてこずるのではないでしょうか?

conf.dが自動で読み込まれる事は初心者は知らないのでハマるポイントですのでそこさえ気をつければすんなりとできるはずです。

追記 サーバー再起動でエラーになった時の対処法

シャットダウンして再起動するとまだプロセスが生きていて再起動できなくなった時の対処法を説明いたします。

シャットダウンして再起動

shutdown -r now

エラー例

httpd: Could not reliably determine the server"s fully qualified domain name, using localhost.localdomain for ServerName

(98)Address already in use: make_sock: could not bind to address [::]:80

(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80

no listening sockets available, shutting down

プロセスが生きてるか確認

netstat -lnp

netstat -lnp
tcp 0 0 0.0.0.0:80 0.0.0.0:
  • LISTEN 1531/nginx
プロセスが生きていましたら

キルしましょう。

プロセスをキル

kill -9 1531

httpd再起動

service httpd restart

or

systemctl restart httpd

おそらくこれで正常に立ち上がるはずです。
追記

ちなみに Listen を重複しても (98)Address already in use: make_sock: could not bind to address のエラーになります。

追記 http/2にする記述

vi /etc/httpd/conf/httpd.conf
一番下に

LogLevel http2:debug

Protocols h2 h2c http/1.1

追記して再起動を行いましょう。
systemctl restart httpd

追記 秘密鍵使い回しする際の注意点

サーバー変更の際に秘密鍵を使い回す際の注意点です。

上記のまま設定すると何故か、パスフレーズが聞かれない状況になりましたので緊急対応としては手作業でパスフレーズ解除を行ってからhttpd再起動が必要となります。

パスフレーズ解除コマンド

openssl rsa -in /etc/httpd/conf/ssl.key/server.key -out /etc/httpd/conf/ssl.key/server.key

systemctl restart httpd

参考にした記事

著者プロフィール
Sharetube