ConoHa(コノハ)のVPSでSSL証明書の取得を行いHTTP通信できるようにした構築まとめ
はじめに ボタンをポチポチ押してSSL化する方法ではなくコマンドを使用して構築する方法を説明いたしますのである程度のサーバサイドの知識がある向けに書きます。
ConoHa(コノハ)のVPSでSSL証明書の取得を行いHTTP通信できるようにした構築まとめ
このまとめを見て、ある程度サーバを構築できればオッケーです。
centOS6.10でやるとちょいちょいエラーになります
なので、追記でエラー回避を書きました
その前に・・・この記事は@yoshizaki_kkgkさんが書いた記事をほぼほぼ模範して書きました。
それでも足りない部分がございましたので間違いを修正し、足りない箇所を加筆して仕上げました。
さくらVPSにSSL証明書を導入しHTTPS通信の構築- SSL証明書購入の前準備 mod_ssl、opensslインストール
- 秘密鍵作成
- CSR作成
- SSL証明書の購入~認証ファイルのダウンロード
- 認証ファイルをサーバーに配置
- ディレクトリ作成
- サーバー証明書(server.crt)の配置
- 証明書の確認
- Apacheに反映
- webサーバーの再起動
- サーバー再起動でエラーになった時の対処法
- シャットダウンして再起動
- エラー例
- プロセスが生きてるか確認
- 確認結果 例
- プロセスをキル 例
- httpd再起動
- http/2にする記述
- 秘密鍵使い回しする際の注意点
- 参考にした記事
SSL証明書購入の前準備 mod_ssl、opensslインストール
まずSSL証明書を購入といきたいところですが、この前にサーバー側で準備をしておく必要があります。
この準備をしておかないと、手戻りが発生したりするので。
事前に準備する物は CSR(Certificate Signing Request)です。
日本語では、署名要求と呼ばれます。
必要なモジュールのインストール 秘密鍵使い回す際にサーバーを変えた時もmod_ssl、opensslインストールは必須となります。
# mod_sslインストール
dnf install mod_ssl
# opensslインストール
dnf install openssl
秘密鍵作成
CSR作成には、まず秘密鍵が必要となります。
秘密鍵を管理しやすいように、ディレクトリを作成します。
※ /etc/httpd/conf はApacheの構成ファイルを格納している場所です。
# 移動
cd /etc/httpd/conf
# ディレクトリ作成
mkdir ssl.key
# 移動
cd ssl.key
# 秘密鍵作成
openssl genrsa -des3 -out server.key 2048
求められるパスワードに関しましてはできるだけ長いランダムなパスワードにしましょう
個人的には1Passwordというアプリで32文字のパスワードを生成しました。
一生使用するパスワードなので保存しといてください
CSR作成
# 移動
cd /etc/httpd/conf
# ディレクトリ作成
mkdir ssl.csr
# 移動
cd ssl.csr
# CSR作成
openssl req -new -key /etc/httpd/conf/ssl.key/server.key -out /etc/httpd/conf/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を確認
# ファイル内容確認
cat server.csr
-----BEGIN CERTIFICATE REQUEST-----
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-----END CERTIFICATE REQUEST-----
となっているはずです。
-----BEGIN CERTIFICATE REQUEST-----
-----END CERTIFICATE REQUEST-----
SSL証明書の購入~認証ファイルのダウンロード
さくらVPSにSSL証明書を導入しHTTPS通信の構築この章に関しましては、引用元をご覧になってください。
認証ファイルをサーバーに配置
つぎに、ダウンロードしたファイルをサーバー上に配置します。
配置する場所は変わる可能性があるので公式の情報を調べてください。
現時点(2023年11月02日)での配置はこちらになっております。
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
# fileauth.txt作成
vi fileauth.txt # ローカルのファイルの中身をコピペ
またはFTPなどのアップロードアプリで作成してもオッケーです。
これでOKです。
一応、アクセスしてみて、ファイルが配置されているか確認しておきましょう。
http://example.com/.well-known/pki-validation/fileauth.txt
これでブラウザ上に、ファイルの中身が表示されれば配置に成功しています。
あとは、さくらインターネット側がこの認証ファイルが配置されていることを自動的に徘徊して確認していますので、3分ほど待ちます。 出典:さくらVPSにSSL証明書を導入しHTTPS通信の構築自分の場合は15分ほどかかりました。
上記の画面のように、利用中になれば認証ファイルが認証されたことになります。
「サーバー証明書」から「サーバー証明書DL」をクリックし、サーバー証明書をローカルへダウンロードしましょう。
server.crt というファイルがダウンロード出来るはずです。
認証ファイルと同様に、ローカルにダウンロードした server.crt をリモートにコピーしていきましょう。
サーバー証明書(server.crt)の配置
Apache 2.4.8以降から設定が変更されました Apache 2.4.8 から中間CA証明書を指定するSSLCertificateChainFile ディレクティブが廃止されました。中間CA証明書、およびクロスルート証明書(オプション)はサーバ証明書と一つの証明書ファイルとしてまとめて、SSLCertificateFileディレクティブに指定してください。
[CertCentral] ルート証明書/中間CA証明書の階層構造について
こちらのリンクから中間CA証明書をダウンロードできるので製品に合った中間CA証明書をダウンロードをして下さい。(重要)
その次にサーバー証明書用のディレクトリを作成致します。
# 移動
cd /etc/httpd/conf
# ディレクトリ作成
mkdir ssl.crt
その次に移動致しまして
cd ssl.crt
server.crtを作成致します。
# server.crt作成
vi server.crt
上記でダウンロードした「サーバー証明書」と「中間CA証明書」の中身をこのような順序でペーストして下さい。
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-----
これで証明書の配置は完了です。
証明書の確認
単独ファイルのみでの確認になりますが
# 秘密キーと証明書は合っているか確認
openssl x509 -in /etc/httpd/conf/ssl.crt/server.crt -noout -modulus | openssl md5
openssl rsa -in /etc/httpd/conf/ssl.key/server.key -noout -modulus | openssl md5
# 証明書の有効期限確認
openssl x509 -enddate -noout -in /etc/httpd/conf/ssl.crt/server.crt
# ドメインが正しいか
openssl x509 -in /etc/httpd/conf/ssl.crt/server.crt -text -noout | grep "Subject:"
Apacheに反映
ここの章はvhostを使用する前提で説明してまいります。
最初にhttps.confに記述してあるListen 80をコメントアウトしましょう。
理由としましては、次に作成するvhost.confの中に統一したいからです。※ 重複するとエラーになります
vi /etc/httpd/conf/httpd.conf
Listen 80
↓
# Listen 80
続きまして、 etc/httpd/conf.d/ssl.conf の設定を行なっていきます。
vi /etc/httpd/conf.d/ssl.conf
Listen 443
↓
LoadModule ssl_module modules/mod_ssl.so
DocumentRoot "/var/www/html"
Listen 443 https
ServerName ドメイン名:443
# ファイルの一番下にペースト
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
SSLCryptoDevice builtin
#SSLCryptoDevice ubsec
SSLPassPhraseDialog builtin
SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout 300
SSLRandomSeed startup file:/dev/urandom 256
SSLRandomSeed connect builtin
SSLEngine on
SSLProtocol all -SSLv2
# 作成したサーバーと中間証明書のファイル指定
SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt
# 作成した秘密キーファイル指定
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key
# 中間証明書も必要であれば
SSLCertificateChainFile /etc/httpd/conf/ssl.crt/intermediate.crt
最後に
VirtualHost 内に記載されている
SSLCertificateFile
SSLCertificateKeyFile
SSLCertificateChainFile
も念のため、変更する
この設定ファイルを保存し、あとはサーバーを再起動すれば、
https通信ができます。
サーバー再起動時にパスワードの入力を求められるので、最初に作成した秘密鍵のパスワードを入力して下さい。
パスフレーズが求められなくてエラーになる場合は
この記事の一番下に解決手順を書いていますのでそちらを試してください。
webサーバーの再起動
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 あとで grep :443
netstat -lnp あとで grep :80
確認結果 例
tcp6 0 0 :::80 :::* LISTEN 29196/httpd
プロセスが生きていましたら
キルしましょう。
プロセスをキル 例
kill -9 29196
httpd再起動
systemctl restart httpd
おそらくこれで正常に立ち上がるはずです。
ちなみに Listen を重複しても (98)Address already in use: make_sock: could not bind to address のエラーになります。
http/2にする記述
vi /etc/httpd/conf/httpd.conf
一番下に
<IfModule mod_http2.c>
LogLevel http2:debug
Protocols h2 h2c http/1.1
</IfModule>
systemctl restart httpd
秘密鍵使い回しする際の注意点
サーバー変更の際に秘密鍵を使い回す際の注意点です。
上記のまま設定すると何故か、パスフレーズが聞かれない状況になりましたので緊急対応としては手作業でパスフレーズ解除を行ってからhttpd再起動が必要となります。
パスフレーズ解除コマンド
openssl rsa -in /etc/httpd/conf/ssl.key/server.key -out /etc/httpd/conf/ssl.key/server.key
# httpd再起動
systemctl restart httpd
参考にした記事
さくらVPSにSSL証明書を導入しHTTPS通信の構築VPSの構築をマスターする手順書 in ボクとサーバの2週間戦争。
VirtualHostの設定でエラー発生
突然Apacheが再起動できなくなった時のメモ
- 完全無料Basicはオープンソースで運営されています。誰しもが自由にBasicを利用できます。
- 超軽量化で超高速配信通常のCMSよりページ容量を70%以上を自動で圧縮を行い更に自動で静的化・圧縮化されたページが配信されます。
- SEOにつよつよ70%以上軽量化に加えて最新SEOに対応した構造で静的化・圧縮化されたページはライバルサイトより圧倒的に評価されます
ライバルサイトより一歩前にいけるCMSでサイトを構築しませんか?