Memo

メモ > サーバ > 構築: 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 … 証明書用のファイルを作成
-----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を起動
使ったことはないが、SSL関連の設定を書く際に以下は参考にできるかもしれない Generate Mozilla Security Recommended Web Server Configuration Files https://mozilla.github.io/server-side-tls/ssl-config-generator/ ■確認 念のため、再度opensslコマンドやhttpsアクセスでテストし、HTTP接続やSSL接続に問題がないか確認する
# 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 も参照

Advertisement