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

サムネイル出典:

殿堂

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

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

はじめに

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

環境

・ConoHaでvpsを作成
・OSはcentOS6.9
・最低限の構築しかしてない(ポート設定、webサーバ構築)

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

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

SSL証明書購入の前準備

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

事前に準備する物は CSR(Certificate Signing Request)です。
日本語では、署名要求と呼ばれます。

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

	

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

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:

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 #{日本在住なら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) []: #{部署名(特になければ空白でOK)}
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 []: #{必要に応じて入力(特になければ空白でOK)}
An optional company name []: #{必要に応じて入力(特になければ空白でOK)}
作成された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-----

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

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

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

配置する場所は変わる可能性があるので公式の情報を調べてください。
現時点(2018年07月12日)での配置はこちらになっております。
http://example.com/.well-known/pki-validation/fileauth.txt
or
https://example.com/.well-known/pki-validation/fileauth.txt
cd /var/www/html/ #例えばここが指定のディレクトリとする
# ディレクトリ作成
mkdir .well-known

cd .well-known

mkdir pki-validation

cd pki-validation

vi fileauth.txt # ローカルのファイルの中身をコピペ
これで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
# 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-----
また、サーバー証明書以外にも中間証明書というものが必要であり、たとえばラピッドSSLの場合は、認証局からメールがくるのですが、こちらから中間証明書を取得でき、同様にサーバー上にファイルを作成します。

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

	
# 中間証明書の配置
touch internal.crt
vi internal.crt
# internal.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-----
これで証明書の配置は完了です。

Apacheに反映

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

/etc/httpd/conf.d/ に vhost.conf というファイルを作成します。
vi /etc/httpd/conf.d/vhost.conf

# setting for ssl
LoadModule ssl_module modules/mod_ssl.so
Listen 80
Listen 443
NameVirtualHost *:80
NameVirtualHost *:443

SSLPassPhraseDialog  builtin
SSLSessionCache         shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout  300
SSLMutex default
SSLRandomSeed startup file:/dev/urandom  256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin

# example.com
# setting for caratinc.jp domain
<VirtualHost *:80>
  DocumentRoot /var/www/html/
  ServerName example.com
#  CustomLog /var/www/html/access.log common
#  ErrorLog  /var/www/html/error.log
  AddDefaultCharset UTF-8
  <Directory "/var/www/html/">
    AllowOverride All
    Options Indexes FollowSymLinks
  </Directory>
</VirtualHost>

<VirtualHost *:443>
  SSLEngine on
  SSLProtocol all -SSLv2
  SSLCertificateKeyFile   /etc/httpd/conf/ssl.key/server.key
  SSLCertificateChainFile /etc/httpd/conf/ssl.crt/internal.crt
  SSLCertificateFile      /etc/httpd/conf/ssl.crt/server.crt

  DocumentRoot /var/www/html/
  ServerName example.com
#  CustomLog /var/www/html/access.log common
#  ErrorLog  /var/www/html/error.log
  AddDefaultCharset UTF-8
  <Directory "/var/www/html/">
    AllowOverride All
    Options Indexes FollowSymLinks
  </Directory>
</VirtualHost>


# example.comの箇所を申請したURLにしましょう。
httpd.confの中に
Include conf.d/*.conf
があれば
conf.d配下のconfが全てインクルードされます。
ない場合は
上記で作成した
/etc/httpd/conf.d/vhost.conf
を読み込ませるために
vi /etc/httpd/conf/httpd.conf

一番下に
include /etc/httpd/conf.d/vhost.conf
を記述しましょう。
なお、
Include conf.d/*.conf
がある場合

conf.d配下にある
ssl.confが自動的に読み込まれてしまいますので
ssl.confをリネームいたしましょう。
# リネーム

mv /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf_no
この設定ファイルを保存し、あとはサーバーを再起動すれば、
http・https共に通信ができます。


サーバー再起動時にパスワードの入力を求められるので、最初に作成した秘密鍵のパスワードを入力して下さい。
# サーバーの再起動
service httpd restart
これにて解説終わりです。

初めてやる人はかなりてこずるのではないでしょうか?
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 | grep :443
netstat -lnp | grep :80 
# 確認結果
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      1531/nginx
プロセスが生きていましたら
キルしましょう。
# プロセスをキル
kill -9 1531
# httpd再起動
service httpd restart
おそらくこれで正常に立ち上がるはずです。

参考にした記事

この記事が気に入ったら

いいね!しよう

Sharetubeの最新記事をお届けします

著者プロフィール
Programmerbox

Sharetube中の人「マツオカソウヤ」がプログラミング・webデザインなどの情報をまとめるチャンネル。