いきなりですが、なんでなんすかねー。
無料の「Let’s Encrypt」があるのに、理解されずに有料のSSL証明書を利用する必要があるのは。
「SSL証明書をWebサーバーに設定する方法を知りたい」
「ブランドもののSSL証明書で安心してサイトをSSL化したい」
「『Let’s Encrypt』との違いを知りたい」
こんな悩みをお持ちのあなたのために「コピペ可能」なコード付きで解説します。
Apache、Nginx、Poundの3つのWebサーバー(OSはCentOSです)それぞれの設定方法と有効期限の更新方法も解説してます。
SSL証明書の作成と設定にフォーカスして説明してるよ。
- サーバーへSSHでの接続方法や、Linuxコマンドを理解している方向けの内容が含まれます。
- 「ドメイン認証SSL(DV SSL)」についての設定方法を解説しています
SSL3つの認証レベルについてはこちらの記事で解説しています。
有料のSSL証明書について
数年前まではSSL証明書といえは、有料だったのです。
それが、「Let’s Encrypt」という素敵な無料SSL証明書サービスが利用できるようになりました。
そのため「有料」か「無料」かで呼び方をすみわけするようになったんですね。
「Let’s Encrypt」を使ったSSLの設定についてはこちらの記事で解説しています。
SSL証明書にはドメインが必要
ドメインを取得してないなら、まずはドメインを取得しましょう。
ドメイン販売サイトから簡単に購入できます。
無料ドメインとかもありますが、僕はおすすめしません。
なぜなら、そのサービスいつまで続くかわかりませんので、テスト用とかじゃないかぎりは利用はやめときましょう。
ブログ開設などで利用する場合は、必ず独自ドメインを購入するようにしましょう。
おすすめは安心のGoogle Domainsです。
とにかく安く取得したいならお名前.comもいいですね。
他にも購入できるサイトは多々ありますが、上記がおすすめのサイトです。
NTTの名づけてネットとかもありますが、少し高いですね。
ドメイン名のドット以降をなににするか、迷うと思います。
僕のおすすめは「.com」ですね。
なぜなら、怪しくないでしょ。
※ドメインとグローバルアドレスの設定についてはここでは省かせていただきます。
これについては、ケースによって方法がいろいろあるので、ググって調べてください。
SSL証明書はいくらする?
有料といっても「ドメイン認証SSL(DV SSL)」の証明書は、安いです。
年間で1500円とかです。
高い証明書だと1万円以上のものもありますが、
僕の場合は、お客さん(ユーザー)がブランド物で担保されたい企業相手の場合に利用します。
こだわりがない場合や、それ以外は使わないですね。
「Let’s Encrypt」の方が自動更新ができて技術者目線だとすごい楽なんですよね。
有料SSL証明書は年単位で更新作業が必要なので。
値段の差でなにが違うのかといえば、対応しているブラウザの範囲が大きいか小さいかです。
とはいっても最近のブラウザはどれもほぼ対象なので、安い証明書でも問題ないです。
この点は自身で判断しましょう。
古いブラウザや、ニッチなブラウザも対応する必要があれば、費用の高いものを購入する必要があるでしょう。
今回は安価なSSLをおすすめします。
こちらが僕がいつも使う購入サイトです。
※安いだけあってこのサイト、スマホではうまく表示できないかもしれません。
この記事では一番安いCoreSSLを利用します。
Let’s Encryptもここで0円購入できるようですが、こちらの記事で自動更新方法も含めて解説してます。
0円購入などしなくても、自分でできるので参照してください。
3種類のWEBサーバーの設定方法
今回は、
を利用する場合の手順を解説します。
別のサイトで購入する場合でもやることはほぼ一緒です。
ドメイン名を「example.com」解説してます。
実際のあなたのドメインに置き換えて読んでください。
有料SSL証明書を発行する
下記手順を順番に説明します。
- ソルト作成
- 秘密鍵作成
- CSR作成
- SSL証明書を購入(購入時にCSRの貼り付け作業があります)
- ながくて数日。早くて数時間待つとメールでSSL証明書が発行されます。
- 中間証明書を作成
ソルト作成
僕がいつもやっている方法です。
ランダムな文字列を作成しています。
ここは例としてnginx.confをソルトとして設定していますが、ユニークになるソルトならなんでもいいです。
ちなみに、ソルトとは
暗号理論におけるソルトとは、パスワードやパスフレーズなどのデータをハッシュ化する際に、一方向性関数の入力に加えるランダムなデータのことである。
引用元:https://ja.wikipedia.org/wiki/ソルト_(暗号)
作業フォルダを今回は下記にしてますが、任意で変更してください。
(※root権限になっておきます。)
mkdir /etc/ssl/biz2020
cd /etc/ssl/biz2020
openssl md5 /etc/nginx/nginx.conf > rand.dat
opensslがない場合は
yum install -y openssl openssl-devel
でインストールしましょう。
秘密鍵作成
『2020key_org.pem』という名称で作成してます。
openssl genrsa -rand rand.dat -des3 2048 > 2020key_org.pem
パスフレーズ入力を2回促されるので、入力します。
(ここはコピペせず、ちゃんと自身で考えて入力してね。)
password-ha-daiji-2020
CSR生成
『2020csr.pem』という名称で作成してます。
openssl req -new -key 2020key_org.pem -out 2020csr.pem
先ほどのパスフレーズを促されるので間違えずに入力します。
password-ha-daiji-2020
ディスティングイッシュネーム情報を順に入力します。
下記のような感じで指定します。
コモンネームがドメイン名になるので、間違えないように。
コモンネームのあとのEmail Addressとかは空白でOKです。
Country Name | 国コード |
---|---|
State or Province Name | 都道府県 |
Locality Name | 市区町村 |
Organization Name | 組織名とかだけどなんでもいい |
Organizational Unit Name | 部署名とかだけどなんでもいい |
Common Name | コモンネーム(ドメイン名) |
こんな感じ↓
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Osaka
Locality Name (eg, city) []:Chuo-ku
Organization Name (eg, company) [Internet Widgits Pty Ltd]:EXAMPLE Co.,ltd.
Organizational Unit Name (eg, section) []:Example System
Common Name (e.g. server FQDN or YOUR name) []:example.com
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
秘密鍵をバックアップし、別の媒体に持っておきましょう。
(僕はこれ使ったことないですが、念のためらしいです。)
cp 2020key_org.pem 2020key_org.pem.bak
出来上がったCSRはこんな感じです。
-----BEGIN CERTIFICATE REQUEST-----
MIICvjCCAaYCAQAweTELMAkGA1UEBhMCSlAxDjAMBgNVBAgTBU9zYWthMRAwDgYD
VQQHEwdDaHVvLWt1MRkwFwYDVQQKExBFWEFNUExFIENvLixsdGQuMRcwFQYDVQQL
Ew5FeGFtcGxlIFN5c3RlbTEUMBIGA1UEAxMLZXhhbXBsZS5jb20wggEiMA0GCSqG
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDDScdN3w/hqClnXOjSEE0dCB64Ku7krRQF
tFhdvMOPWZ7/mb16GB4yuK1v75MU2mDN0H1zUKeeL9B5r4Bt/c52+i5re9DSBm1w
mZ6Z53KE6189cMX3twfhZLTMTsMEJyz+vfJv+GhbdPa38tZktvNV5RbgJ9YwjgUu
4+66/FLPjEIsn9Gg/FWmWNFIlOGqAklwxmdSPdH67EbT4HfwzWyFHQeEutS4vPHR
uGopkzmQoXD2nOXvRRJHT22x9tKM72L/ROzpy6sEMNS3yMKyPQDKiBnY1JAuryLQ
dY9bUE5kaFkrg4JBH34CdMJlb6/vJSLCKO34Z3tzY7naLOd7ZdlLAgMBAAGgADAN
BgkqhkiG9w0BAQUFAAOCAQEACktRt6GAwa33qvuVQPq0DrcUjTEvVKFHyJkadcGJ
rzDb8dEhSpLxEbaGMt2yDPXajA8hh8cISnB7Ouls1LheEWV8bIfrXos2cbZN47cj
I0/jtbPUDrC3C3E/dFt4wFNOvqJ4ESytfoIYL9HGjw9bIramgiEOxeT0RUBmpFNg
25Y0rcY4/s3aY0MugKcdBBA/dpp2rH4ClrB0gtxs2oXXor3WvMjAH9Ki3EPGG6Q0
clSvZmYFYAE4lzbj9YuxqB8QtWVkMCOAf1kuZ5yfaCtGvTXt14tmIrsl3DoFtBut
FDw+NuaYqWq+MQ4SWXojFeT3/3UazY+Tbe+eDqxBnorXDA==
-----END CERTIFICATE REQUEST-----
SSL証明書を購入
※購入時にCSRの貼り付け作業があります。
SSLボックスが始めてなら、ユーザー登録します。
ログイン後、購入したいSSL証明書を選択し(ここ税込み表示になるから高くなった感めっちゃありますよね。)
支払方法入力と、利用規約をチェックします。
購入確定後、取得申請フォームが表示されるので、「他社サーバーで利用する」を選択すること。
- コモンネーム(ドメイン名)
- 署名アルゴリズム(SHA-2でOK)
- CSR
それぞれを入力し、登録します。
CSRは↓
-----BEGIN CERTIFICATE REQUEST-----
から
-----END CERTIFICATE REQUEST-----
までの内容をそのままコピペします。
次に進むと、CSRの内容と、申請者の情報入力画面が表示されます。
- 承認用メールアドレス
- 組織名
- 役職
- 郵便番号
- 国コード
- 都道府県
- 市区町村
- 住所
- 電話番号
- FAX番号
- メールアドレス
をそれぞれ入力し、次へ進んで、最終確認後、登録して完了です。
イメージが見たい場合は、SSLボックス内のマニュアル で確認できるので見てください。
SSL証明書発行までは長くて数日、早くて1,2時間待つとメールでSSL証明書が発行されます。
承認用メールアドレス宛にSSL証明書が送付されます。
ちなみにSSL証明書は
-----BEGIN CERTIFICATE-----
MIIGdDCCBVygAwIBAgIQILJGgDIGGzDyOSFbrVnhvDANBgkqhkiG9w0BAQsFADBh
省略(30行以上あるよ)
m6qK5kpTLWjb+2OaVVvDjdR4iYcOHo4I
-----END CERTIFICATE-----
のような文字列です。
vi 2020cert.pem
で届いた内容をそのまま貼り付けて作成します。
あとは、これをWEBサーバーに設定します。
中間証明書を作成
そのまえに、中間証明書をコピーしておきます。
CORE SSLの場合は、ここの「SHA-2の証明書をご利用の場合」の中間証明書をそのままコピーして、作成します。
-----BEGIN CERTIFICATE-----
MIIF6zCCA9OgAwIBAgIQFJx2uEGduVODYGLKRraNNjANBgkqhkiG9w0BAQwFADCB
省略(30行以上あるよ)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
省略(30行以上あるよ)
0fKtirOMxyHNwu8=
-----END CERTIFICATE-----
のような文字列です。
vi 2020inca.pem
そのまま、貼り付けるだけです。
Apacheでの設定方法(CentOS編)
CentOS 7 + Apache 2.4での解説です。
mod_sslパッケージのインストール
yum install -y mod_ssl
既にインストール済みの場合は、その旨のメッセージが表示されます。
証明書に中間証明書を追記します。
※Apache httpdのバージョンが2.4.8以降の場合のみ。
cat 2020inca.pem >> 2020cert.pem
これでできあがり。
SSL証明書をそのままサーバーに設定してもいいし、運用を考えると
cp /etc/ssl/biz2020/2020cert.pem /etc/ssl/cert.pem
秘密鍵もコピー
cp /etc/ssl/biz2020/2020key.pem /etc/ssl/key.pem
中間証明書もコピー
cp /etc/ssl/biz2020/2020inca.pem /etc/ssl/inca.pem
として、来年の更新時に証明書を上書きするだけで、サーバーの設定を変更しなくていいようにするのもありです。
来年同じ作業を行うときは、2020を年度にしてるので、そこを変更して実行すればいいです。
vhost-ssl.confの設定
vi /etc/httpd/conf.d/vhost-ssl.conf
※環境によってパスは変わります。
以下のように設定を追加します
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/ssl/cert.pem # SSL証明書のパス
SSLCertificateChainFile /etc/ssl/inca.pem # 中間証明書のパス
SSLCertificateKeyFile /etc/ssl/key.pem # 秘密鍵のパス
または、Apacheが2.4.8以降のバージョンであれば中間証明書はまとめてるので下記にします。
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/ssl/cert.pem # SSL証明書+中間証明書のパス
SSLCertificateKeyFile /etc/ssl/key.pem # 秘密鍵のパス
Apacheを再起動します
systemctl restart httpd
これで、あなたのサイトにアクセスし、https://example.com アドレス部分に鍵マークが表示されていれば成功です。
Nginxでの設定方法(CentOS編)
CentOS 7 + Nginx 1.17 での解説です。
前提として、NginxでSSLを利用するには “-with-http_ssl_module” 付きでコンパイルしてインストールしておく必要があります。
証明書に中間証明書を追記します。
cat 2020inca.pem >> 2020cert.pem
これでできあがり。
SSL証明書をそのままサーバーに設定してもいいし、運用を考えると
cp /etc/ssl/biz2020/2020cert.pem /etc/ssl/cert.pem
秘密鍵もコピー
cp /etc/ssl/biz2020/2020key.pem /etc/ssl/key.pem
として、来年の更新時に証明書を上書きするだけで、サーバーの設定を変更しなくていいようにするのもありです。
来年同じ作業を行うときは、2020を年度にしてるので、そこを変更して実行すればいいです。
nginx.confを設定
vi /etc/nginx/nginx.conf
※環境によってパスは変わます。
以下のように該当箇所に設定を追加します。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
server {
listen 443;
ssl on;
server_name example.com;
ssl_certificate /etc/ssl/cert.pem # SSL証明書+中間証明書のパス
ssl_certificate_key /etc/ssl/key.pem # 秘密鍵のパス
Nginxを再起動します。
systemctl restart nginx
これで、あなたのサイトにアクセスし、https://example.com アドレス部分に鍵マークが表示されていれば成功です。
Poundでの設定方法(CentOS編)
CentOS 7 + Pound 2.6 での解説です。
ググってもPoundサーバーってあまり記事でてこないけど、ロードバランサーとして優秀です。
ApacheやNginx+Tomcatなどと使うと便利なサーバーです。
SSL証明書に鍵情報を追記します。
cat 2020key.pem >> 2020cert.pem
SSL証明書に中間証明書を追記します。
cat 2020inca.pem >> 2020cert.pem
これでできあがり。
SSL証明書をそのままサーバーに設定してもいいし、運用を考えると
cp /etc/ssl/biz2020/2020cert.pem /etc/ssl/cert.pem
として、来年の更新時に証明書を上書きするだけで、サーバーの設定を変更しなくていいようにするのもありです。
来年同じ作業を行うときは、2020を年度にしてるので、そこを変更して実行すればいいです。
pound.cfgを設定
vi /etc/pound.cfg
※環境によってパスは変わります。
以下のように該当箇所に設定を追加します。
ListenHTTPS
Address XXX.XXX.XXX.XXX
Port 443
Cert "/etc/ssl/cert.pem" # SSL証明書+中間証明書+秘密鍵のパス
End
Poundを再起動します。
systemctl restart pound
これで、あなたのサイトにアクセスし、https://example.com アドレス部分に鍵マークが表示されていれば成功です。
有効期限と更新作業
有料の証明書は有効期限が1年単位が基本です。
2年更新とかもあります。
有効期限が切れる数か月前に同じ作業をして、都度更新作業を行う必要があります。
証明書の有効期限が近づいてくると、更新通知が送付されます。
SSLボックスの場合は、メンバー管理ツールの「SSLボックス管理」上より更新手続を選んで、新規登録時と同じ作業を行ってください。
ユウキでした。