メモ > サーバ > 構築: Webサーバ設定 > Apache+SSL(有料証明書でSSLを導入する場合)
Apache+SSL(有料証明書でSSLを導入する場合)
※証明書を更新することを想定して、鍵や証明書などの名前には年月日を含めておくといい。
(一年以内に急遽更新する可能性もあるので、年だけでなく年月日にしておくといい。)
※証明書の価格に差はあるが、これは信頼性による差。暗号化の強度に差は無い。
ただし安い証明書は、「証明書に聞き慣れない会社の名前が表示される」「サイトシールがない」などがあるので注意する。
※SSLを購入する際、ワイルドカードとして購入しなければ複数のサブドメインには対応できない。
ただしワイルドカードはフィーチャーフォンに対応できない可能性が上がるので注意する。
ワイルドカードは高額なので注意。
https://www.ssl.ph/globalsign/option/wildcard.html
※証明書の期限は大抵「1年」「2年」など選択できるが、2020年9月1日以降は1年の期限にするべきか。
今後はSafariでエラーになる可能性がある。
更新の際に状況を再度確認する。
https://webtan.impress.co.jp/e/2020/04/10/35728
https://ssl.sakura.ad.jp/column/safari-shortening/
https://www.orangeitems.com/entry/2020/04/11/115401
※証明書については「Certificate.txt」も参照。
■インストール(mod_sslをインストールしていない場合)
Webサーバー間通信内容暗号化(Apache+mod_SSL)
http://centossrv.com/apache-ssl.shtml
CentOS(さくらのVPS)に、mod_sslをインストール
http://havelog.ayumusato.com/develop/server/e168-centos-mod_ssl-install.html
# yum -y install mod_ssl … mod_sslインストール。
# systemctl restart httpd … Apacheを再起動。
■SSL証明書発行(GMOグローバルサインの例)
※以降は有料の証明書を導入する場合。
秘密鍵 … refirio.net.20160130.key … 流出してはいけない鍵ファイル。
CSR … refirio.net.20160130.csr … 証明書を発行するための署名要求(Certificate Signing Request)。秘密鍵があれば、CSRは何度でも生成できる。公開鍵、発行者情報やコモンネーム(FQDN)、電子署名(もとのCSRをハッシュ化し、さらに秘密鍵で暗号化したもの)が含まれる。
証明書 … refirio.net.20160130.crt … 認証局から発行されるSSL証明書。CSRをもとに発行される。
中間証明書 … refirio.net.20160130.ca … 認証局から発行されるSSL証明書。証明書に階層構造を持たせることにより、認証局が攻撃されたときの影響を抑えている。
[CSR生成] Apache 2.x + mod_ssl + OpenSSL(新規・更新)
https://jp.globalsign.com/support/csr/04.html?service=ssl
[インストール] Apache 2.x + mod_ssl + OpenSSL(新規・更新)
https://jp.globalsign.com/support/server/03.html?service=ssl
認証レベルの違い
https://jp.globalsign.com/service/ssl/knowledge/types-of-ssl.html
■秘密鍵の生成
※秘密鍵があれば、CSRは何度でも生成できる。秘密鍵を無くさないように注意。
※秘密鍵は同じものを使えるが、毎回違うものを使うほうがセキュリティ上好ましい。
証明書発行時、同じCSRで複数回の申込みを受け付けないところもあるので、毎回秘密鍵から作る方がいい。
CSRについて教えてください。
https://jp.globalsign.com/support/faq/65.html
# openssl version … OpenSSLがインストールされているか確認。
OpenSSL 1.0.1e-fips 11 Feb 2013
# cd /etc/httpd/conf/ … ディレクトリ移動。
# mkdir ssl.key … 秘密鍵用のディレクトリを作成。
# openssl genrsa -des3 -out ./ssl.key/refirio.net.20160130.key 2048 … 秘密鍵を生成。
Generating RSA private key, 2048 bit long modulus
......+++
.............+++
e is 65537 (0x10001)
Enter pass phrase for ./ssl.key/refirio.net.20160130.key: … 任意のパスワードを設定。(表示はされない。)
Verifying - Enter pass phrase for ./ssl.key/refirio.net.20160130.key: … 任意のパスワードを確認。(表示はされない。)
# cat ssl.key/refirio.net.20160130.key … 秘密鍵の内容を確認。
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA59AjojbAXnDxZvaFaH1IeWS72I/kAzvifE/S8m3nm3bPa3Mh
〜省略〜
vL7hdUQEG+lN0yc/aVlNJ4xMXrKns7TCxrNGCEzBXgdqPXd0baTqNg==
-----END RSA PRIVATE KEY-----
※大抵の解説で「パスワードありの秘密鍵を作成し、その後秘密鍵からパスワードを削除する」としている解説が多いのでそうしている。
ただし以下のように、はじめからパスワードなしの秘密鍵を作成している解説もある。
パスワードを削除するなら、はじめからパスワードなしで作っても良さそう。
検証したい
CSR情報の生成方法 | エンジョイSSLダイレクト
https://www.e-ssldirect.com/order/createcsr.shtml
CSRの生成手順 Apache + ModSSL + OpenSSL - Q&A - SSLOFF
https://www.ssloff.com/members/knowledgebase.php?action=displayarticle&id=1
■CSRの生成
# mkdir ssl.csr … CSR用のディレクトリを作成。
# openssl req -new -key ./ssl.key/refirio.net.20160130.key -out ./ssl.csr/refirio.net.20160130.csr … CSRを生成。
Enter pass phrase for ./ssl.key/refirio.net.20160130.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]:Shibuya … 市区町村名を設定。
Organization Name (eg, company) [Default Company Ltd]:refirio.net … 組織名を設定。(なんでもいい。)
Organizational Unit Name (eg, section) []: … 空Enter。(もしくは部署名を設定。)
Common Name (eg, your name or your server's hostname) []:refirio.net … コモンネーム(Webサーバー名)を設定。SSL購入時に申請するものと一致させる。
Email Address []:refirio@example.com … 空Enter。(もしくは管理者メールアドレスを設定。)
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: … 空Enter。
An optional company name []: … 空Enter。
秘密鍵とCSRの生成については、以下のマニュアルが参考になる。
導入マニュアル/CSRの作成手順 Apache 2.0 + mod_ssl + OpenSSL
https://www.ssl.ph/help/manual/csr/apache.html
※クイック認証の場合、管理者メールアドレスは不要みたい。
※ドメイン refirio.net を保持しているとして、サブドメイン secure.refirio.net で利用するとして、
サーバが複数台構成のために web1.refirio.net のような名前の場合、
「Common Name」には「secure.refirio.net」を入力する。つまり、あくまでも「ブラウザでサーバにアクセスする際に入力するURL」となる。
(SSLは「このURLにアクセスしたいけど、このサイトは本物か?」を証明するためのものなので。)
ワイルドカード証明書を申し込む場合、「*.refirio.net」のように入力する。
コモンネームについて教えてください。
https://jp.globalsign.com/support/faq/67.html
■秘密鍵からパスワードを削除
# openssl rsa -in ssl.key/refirio.net.20160130.key -out ssl.key/refirio.net.20160130.key … サーバ用秘密鍵からパスワード削除。(Webサーバ起動時にパスワードを要求されないように。)
Enter pass phrase for refirio.net.20160130.key: … サーバ用秘密鍵・証明書作成時のパスワードを入力。(表示はされない。)
writing RSA key
# cat ssl.csr/refirio.net.20160130.csr … CSRの内容を確認。
-----BEGIN CERTIFICATE REQUEST-----
MIICxjCCAa4CAQAwgYAxCzAJBgNVBAYTAkpQMQ4wDAYDVQQIDAVPc2FrYTEVMBMG
〜省略〜
bzhh/X0SHFCYaHAHIJYLUx2Ii3265wENEwdsteXVps8zTyuKw6jZaq/1
-----END CERTIFICATE REQUEST-----
■証明書申し込み(GMOグローバルサインの例)
https://system.globalsign.com/au/signon/gacp/login.do
からログインし、「証明書発行」を選択して申し込む。
1. サービス選択
※以下は入力例。
サービス クイック認証SSL
キャンペーン/クーポンコード 使用しない
コモンネームオプション 無し(サブドメインへの対応が不要でよければ。)
署名ハッシュアルゴリズム SHA256
契約期間 1年
乗り換え いいえ
更新 いいえ
期間カスタマイズオプション なし
2. 技術担当者情報入力
自動入力で入力し、必要があれば編集する。
「メール送信先に指定」にチェックしておくと、
技術担当者情報で設定したメールアドレスにも申し込み完了メールなどが届く。
3. CSR DN情報入力
「CSRを利用する」のままで、サーバサイドで生成したCSRを貼り付ける。
次へ進むとCSR内容確認が表示される。以下は例。
CSR解析結果 / スキップ入力内容 審査される証明書の内容
CN refirio.net refirio.net
O refirio.net
OU Domain Control Validated
L Shibuya
S Tokyo
C 日本 - JP 日本 - JP
E refirio@example.com
鍵長 2048 2048
公開鍵情報 RSA RSA
メールでの認証やMETAタグでの認証など、任意の認証方法を選択する。
(ページ認証の場合、申し込み完了時に正式な埋め込みコードが表示される。)
4. 支払い方法入力
クレジットカードか銀行振込を選択する。
5. 確認
内容を確認し、同意して完了する。
6. 完了
オーダーIDと、以降の流れが表示される。
同時に「サーバ証明書お申し込み受付」メールが送信されるので確認する。
ページ認証の場合、以下のように埋め込みコードの案内が表示される。
お申し込みありがとうございました。申請が完了しました。
オーダーIDは、XXXX0123456789です。
GSパネルにログイン後、「証明書一覧」より現在のステータス等、詳細な情報をご確認いただけます。
<meta name="_globalsign-domain-verification" content="XXXXX-XXXXX" />
上記、ドメイン審査コードを、下記のページのgsdv.txtにテキストファイルとして設置してください。
yourdomain.com/.well-known/pki-validation/gsdv.txt
お申し込み以降の流れ
証明書発行までの流れは、以下のURLよりご確認ください。
http://jp.globalsign.com/introduce/new/quickssl_page.html
なおGlobalSignで
「証明書一覧 → 編集 → メール送信一覧」
から、送信されたメールを確認できる。(承認リンクや証明書なども確認できる。)
■証明書申し込み(ドメインキーパーでCSRありの例)
ドメインキーパー https://www.domain-keeper.net/usr/ssl/ にログイン。
→「新規申込」をクリック。
→内容を確認して「各サービス規約および注意事項に同意する」にチェックを入れて「承諾する」をクリック。
→コモンネームに「www.refirio.net」と入力して、「クイック認証」をクリック。
・ドメイン名ではなくコモンネームなので注意。
・ワイルドカード証明書の場合は *.refirio.net のようになるので注意。また、ワイルドカードのページ認証は www.refirio.net ではなく refirio.net で行うので注意。
→取得年数で「1年」を選択して「次へ進む」をクリック。
→「オプションサービスを申し込む」の内容を確認する。今回は「CSR発行サービス 」を選択して「次へ進む」をクリック。
→CSR情報を入力して「次へ進む」をクリック。以下は入力内容。
Organization(組織名): refirio.net
Organization Unit(部署名):
Locality(市区町村): Shibuya
State(都道府県): Tokyo
Country(国コード): JP
→認証方法で「DNS認証希望」を選択して「次へ進む」をクリック。
→申請情報を入力して「次へ進む」をクリック。以下は入力内容。
組織名: 株式会社テスト
部署名:
担当者氏名: 山田 太郎
担当者氏名(英字): Yamada Taro
電話番号: 090-1234-5678
→確認画面が表示されるので、「この内容で申し込む」をクリック。
→完了画面が表示され、秘密鍵の内容が表示されるので保存しておく。
→「お申し込みありがとうございます」のメールが届くので、いったん待つ。
■証明書インストール
※AWSでロードバランサに証明書を設定する場合の手順は AWS.txt を参照。
# mkdir /etc/httpd/conf/ssl.crt/ … 証明書用のディレクトリを作成。
# vi /etc/httpd/conf/ssl.crt/refirio.net.20160130.crt … 証明書用のファイルを作成。
使ったことはないが、SSL関連の設定を書く際に以下は参考にできるかもしれない。
Generate Mozilla Security Recommended Web Server Configuration Files
https://mozilla.github.io/server-side-tls/ssl-config-generator/
■確認
念のため、再度opensslコマンドやhttpsアクセスでテストし、HTTP接続やSSL接続に問題がないか確認する。
-----BEGIN CERTIFICATE----- … 証明書の内容を全てコピーして貼り付ける。
MIIE4DCCA8igAwIBAgISESFyQfmhMxTM6H2txGeH/YImMA0GCSqGSI
〜略〜
TlmDVg==
-----END CERTIFICATE-----
# vi /etc/httpd/conf/ssl.crt/refirio.net.20160130.ca … 中間証明書用のファイルを作成。
-----BEGIN CERTIFICATE----- … 中間証明書の内容を全てコピーして貼り付ける。
MIIEYzCCA0ugAwIBAgILBAAAAAABRE7wPiAwDQYJKoZIhvcNAQELBQ
〜略〜
EjxS1QSCVS1npd+3lXzuP8MIugS+wEY=
-----END CERTIFICATE-----
# vi /etc/httpd/conf.d/ssl.conf … ApacheSSL設定ファイル編集。
バーチャルホストを指定している場合、virtualhost.conf で設定する。詳細は Etcetera.txt を参照。
SSLCertificateFile /etc/httpd/conf/ssl.crt/refirio.net.20160130.crt … 証明書用の設定を確認&編集。
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/refirio.net.20160130.key … 秘密鍵用の設定を確認&編集。
SSLCertificateChainFile /etc/httpd/conf/ssl.crt/refirio.net.20160130.ca … 中間証明書用の設定を追加。
#DocumentRoot "/var/www/html"
DocumentRoot "/var/www/html" … #を削除。(コメントを解除。)
#SSLProtocol all -SSLv2
SSLProtocol all -SSLv2 -SSLv3 … SSLv2、SSLv3を無効化する。(POODLE SSLv3.0 脆弱性問題対処。)
#SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:!RC4:!3DES:!RSA … RC4暗号化を外す。(弱い暗号を除外 / ここでの指定でいいかは検証したい。)
# systemctl stop httpd … Apacheを停止。(restartでは正常に読み込まれないことがある。)
# systemctl start httpd … Apacheを起動。
# openssl s_client -connect refirio.net:443 -showcerts … SSLが正しく設定されているか確認。
CONNECTED(00000003)
depth=2 C = BE, O = GlobalSign nv-sa, OU = Root CA, CN = GlobalSign Root CA … CN(この場合はGlobalSign)を確認。
verify return:1
depth=1 C = BE, O = GlobalSign nv-sa, CN = GlobalSign Domain Validation CA - SHA256 - G2
verify return:1
depth=0 OU = Domain Control Validated, CN = refirio.net
verify return:1
〜以下略〜
サーバに https:// でアクセスして、SSL接続に問題がないか確認する。
(必要に応じて、ファイヤーウォールも設定する。)
# systemctl restart httpd … Apacheを再起動して、パスワードを要求されないことを確認。
サイトにSSLのサイトシールを掲載する(サイトが信頼できることを示すもの)
https://jp.globalsign.com/service/ssl/siteseal/
■バーチャルホスト
バーチャルホストでSSLを使用する場合は Etcetera.txt も参照。