#
ドキュメント

Document

自分のための備忘録です。

証明書取得の流れ

  1. サーバーで秘密鍵・公開鍵を作成(秘密鍵の拡張子は.key.pemにする場合が多い)
  2. ↑に作成した鍵に対してCSR(証明書署名要求)を作成(拡張地は.csr.pemにする場合が多い)
  3. 認証局(CA:Certificate Authority)にCSR(証明書署名要求)を送りデジタル署名を受ける
  4. 認証局から証明書(サーバー公開鍵を認証局がデジタル署名したファイル)を受け取る(拡張子は.crt.pemが多い)

※ 中間認証局が証明書を発行する場合は、ルート認証局が中間認証局を認証して発行される中間証明書も必要。 ※ 中間証明書と証明書をあわせた証明書が発行される場合もある。

前提

  • Ubuntu 18.04
  • Server version: Apache/2.4.29 (Ubuntu)

関連ファイル

  • サーバ秘密鍵: /etc/ssl/example.com/privkey.pem
  • 中間証明書:/etc/ssl/example.com//chain.pem
  • 証明書:/etc/ssl/example.com/cert.pem

ディレクトリは任意だが/etc/sslに配置するのが慣習。

Apacheの設定

SSL関連ディレクティブ

  • SSLEngine
  • SSLCertificateKeyFile 秘密鍵
  • SSLCertificateChainFile 中間証明書
  • SSLCertificateFile SSL証明書

※ 注意事項

  • SSL証明書に中間証明書が含まれている場合は(fullchain.pemといった形式で配布される場合がある)、それをSSLCertificateFileに設定すればよい(SSLCertificateChainFileは必要ない)
  • SSL証明書に秘密鍵が含まれている場合はSSLCertificateKeyFileは必要ない(しかし秘密鍵は証明書と分離することが推奨されている
    • この場合もクライアントに配布されるものからは当然秘密鍵は削除されている

confファルを設定

exsample.com-ssl.confをSSL用の設定ファイルとする。

<VirtualHost *:443>
        ServerAdmin webmaster@example.com
        ServerName example.com
        DocumentRoot /var/www/html/example.com/public


        ErrorLog ${APACHE_LOG_DIR}/example.com-error.log
        CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined

        SSLEngine on

        SSLCertificateKeyFile /etc/ssl/example.com/privkey.pem
        SSLCertificateChainFile /etc/ssl/example.com//chain.pem
        SSLCertificateFile    /etc/ssl/ecample.com/cert.pem
</VirtualHost>

HTTPSサイトを有効化

exsample.com-ssl.confをSSL用の設定ファイルとする。

$ cd /etc/apache2/sites-availables
$ a2ensite example.com-ssl.conf

注意

CertbotでLet's Encryptを設定する場合、以下自動で作成

  • exsample.com--le-ssl.conf
  • /etc/letsencrypt/options-ssl-apache.conf

/etc/letsencrypt/options-ssl-apache.confの中でSSLEngine onを設定

$ grep -n "SSLEngine on" /etc/letsencrypt/options-ssl-apache.conf
7:SSLEngine on