SSLの基本についてのメモ

Pocket

サイトを構築する際にSSLの設定は必ず必要になるが、それほど頻繁にあるわけではないので、いつも忘れてしまうので備忘録としてメモする。

役割

  • サーバーの証明
  • 通信の暗号化
  • 改竄の検出

必要ファイル

  1. 秘密鍵(KEY: Certificate Key File)
    暗号化の鍵
  2. 証明書署名要求(CSR: Certificate Signing Request)
    認証局(Certificate Authority)へ提出
  3. 証明書(CRT: Certificate)
      SSL証明書(公開鍵を内包)
  4. 中間証明書
    ルート認証局に中間認証局を署名した証明書

現在ではルート認証局ではなく中間認証局が署名することが多い。よって中間証明書も必要な場合が一般的。
シマンテック、ジオトラストなどは、ルート認証局のほかに中間認証局も運営している。

秘密鍵からSSL証明書(公開鍵 + 認証局のデジタル署名)を作成する手順1

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

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

秘密鍵のパーミッションはオーナー以外に操作権限のない600または400。

SSL通信

ブラウザーは認証局の公開鍵でサーバのデジタル証明書(公開鍵証明書)の正当性を確認してから通信を開始する。
その後は共通鍵で暗号化する。

ref.

認証局の分類

  • 自己認証局
  • 公開認証局

OpenSSL

秘密鍵を作成するための暗号化モジュール。
(※ 秘密鍵からは必ず同じ公開鍵を作成できる。)

暗号化方式

RSA

公開鍵認証のための暗号化アルゴリズム。

HMAC

改竄防止に使用。改ざん防止機能MAC(Message Authentication Code)にハッシュアルゴリズムを使用するもの

HMAC (Hash-basedz) とは、メッセージ認証符号 (MAC; Message Authentication Code) の一つであり、秘密鍵とメッセージ(データ)とハッシュ関数をもとに計算される。
— https://ja.wikipedia.org/wiki/HMAC

SHA-256

上記位の(H)MACのアルゴリズムで使用されるハッシュアルゴリズム。

AES

共通鍵のための暗号化アルゴリズム。

  • Advanced Encryption Standard(AES:高度暗号化標準) はアメリカ合衆国の新暗号規格として規格化された共通鍵暗号方式である。 wiki
  • CRYPTREC(Cryptography Research and Evaluation Committees)の暗号リスト推奨

ワイルドカード証明書

  • https://en.wikipedia.org/wiki/Wildcard_certificate

ルートドメイン(例:example.com)に限ってwwwあり・なしの両方に対応するためにWildcard certificateをする必要はない。

例えばwww以外のtext1.example.comtest2.example.comを一括で対応使用する場合は、Wildcard certificateが必要。

Apacheの設定例

  • 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

  1. 暗号化モジュール:OpenSSL、秘密鍵暗号化アルゴリズム:RSA、共通鍵暗号化アルゴリズム:AESを仮定する(Takuya Kojima,Ami Nakajima,Emi Yoshihara,Jun Nakatsuka. Introducing to SSL – Implements HTTPS environment (Japanese Edition) (Kindle の位置No.1139-1141). Kindle 版. ) 

  2. 入力に秘密鍵を使用しているがCSRは公開鍵だけを含む。秘密鍵が認証局に渡るわけではない。あくまで渡るのは公開鍵。秘密鍵からは常に同じ公開鍵がさく制されることを忘れない。CSRを作成するコマンドは以下のとおり。server.keyが秘密鍵。
    opensslreqnewkey/etc/httpd/conf/server.key>/etc/httpd/conf/server.csr(Takuya Kojima,Ami Nakajima,Emi Yoshihara,Jun Nakatsuka. Introducing to SSL – Implements HTTPS environment (Japanese Edition) (Kindle の位置No.1228-1229). Kindle 版. 

  3. 認証局に用って発行されるデジタル証明書(公開鍵証明書)はSSL/TLSの証明書の規格X.509に準拠している。 

  4. CSRからデジタル証明書を作成するコード(「openssl x 509-req-signkey server. key < server. csr > server. crt」 —『食べる!SSL! ―HTTPS環境構築から始めるSSL入門』小島 拓也, 中嶋 亜美, 等著) 例ではserver.keyが秘密鍵 

コメント

No comments yet.

コメントの投稿

改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。