#
ドキュメント

Document

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

SSL/TLS(Secure Socket Layer/Transport Layer Security)の基礎

対応するOSIの階層

TLSは多くの場合、コネクション型のトランスポート層プロトコル(通常はTCP)とアプリケーション層の間で使われる。

https://ja.wikipedia.org/wiki/Transport_Layer_Security

  • TCP/IPプロトコルスイーツはセッション層がないのでアプリケーション層に分類
  • OSI参照モデルではセッション層に分類
    TCPとアプリケーションの間で動作

アプリケーション層のHTTPプロトコルをTLSでセキュアにしたアプリケーション層のプロトコルがHTTPS。   同様にFTPをTLSでセキュアにしたプロトコルがFTPS。

ref. https://hogetech.info/network/osi/layer5

役割

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

必要ファイル

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

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

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

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

※ 中間認証局が証明書を発行する場合は、ルート認証局が中間認証局を認証して発行される中間証明書も必要。
※ 暗号化モジュール:OpenSSL、秘密鍵暗号化アルゴリズム:RSA、共通鍵暗号化アルゴリズム:AESを仮定する(Takuya Kojima,Ami Nakajima,Emi Yoshihara,Jun Nakatsuka. Introducing to SSL - Implements HTTPS environment (Japanese Edition) (Kindle の位置No.1139-1141). Kindle 版. )

[^step1]: $ opensslgenrsa2048>/etc/httpd/conf/server.key(Takuya Kojima,Ami Nakajima,Emi Yoshihara,Jun Nakatsuka. Introducing to SSL - Implements HTTPS environment (Japanese Edition) (Kindle の位置No.1167). Kindle 版. )。server.keyが秘密鍵。

[^step2]: $ 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 版.) 。入力に秘密鍵を使用しているが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 版.

[^step3]: 自己認証局でCSRからデジタル証明書を作成するコード。$openssl x 509-req-signkey server. key < server.csr > server.crt( —『食べる!SSL! ―HTTPS環境構築から始めるSSL入門』小島 拓也, 中嶋 亜美, 等著) ここでのserver.keyは認証局の秘密鍵。自己認証局の場合は1と同じ場合も。)。認証局に用って発行されるデジタル証明書(公開鍵証明書)はSSL/TLSの証明書の規格X.509に準拠している。

SSL証明書は.crtの他に.pemの拡張子も使われる(中身は同じ)。

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)の暗号リスト推奨

ワイルドカード証明書

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

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

AWSに導入

Let's Encryptで発行したSSL証明書をACMで使用

英語

  • certificate: 証明書
  • certification:
    • 証明書(証明書の意味ではcertificateを使うほうが多いがcertificationも証明書の意味で使用することがある
    • 認証 https://end0tknr.hateblo.jp/entry/20130127/1359283200 が分かりやすい(Authentication、authorization)
    • (認定)資格(qualificationは概念的な資格にくわえて(認定)資格という具体的な場合にも使用される)
  • certificate/certification authority:認証局は
  • confidentiality 機密性
  • confidential 機密
  • cipher/crypto どちらも暗号