TLS関連のRFCリンク集メモ

TLS関連のRFCのメモです。
時を経るごとに、過去のRFCがupdateされたりobsoleteされたりと動きが激しいです。
そこでポイントになりそうなものを主観で選び、obsolete には注記を入れてみました。
その中でも CipherSuite についてはなるべく網羅できるよう努力してみました（が、抜けてるものもあるかもです）。
なお主要なTLSバージョンに対応するRFCは太字タイトルにしてます。

※RFCタイトルについては読みやすいよう若干省略したりしてます。

## SSL/TLS本体仕様 RFC

- **RFC 6101 : SSLv3.0**
  - https://datatracker.ietf.org/doc/html/rfc6101
  - 歴史的なドキュメントとして、2011年になってRFC化されたらしい。
- **RFC 2246 : TLSv1.0**
  - https://datatracker.ietf.org/doc/html/rfc2246
- **RFC 4346 : TLSv1.1**
  - https://datatracker.ietf.org/doc/html/rfc4346
- **RFC 5246 : TLSv1.2**
  - https://datatracker.ietf.org/doc/html/rfc5246
- **RFC 8446 : TLSv1.3**
  - https://datatracker.ietf.org/doc/html/rfc8446

## Cipher Suite の拡張系 RFC

- RFC 2712 : Addition of Kerberos Cipher Suites to Transport Layer Security (TLS)
  - https://datatracker.ietf.org/doc/html/rfc2712
- ~~RFC 3268 : Advanced Encryption Standard (AES) Ciphersuites for Transport Layer Security (TLS)~~
  - https://datatracker.ietf.org/doc/html/rfc3268
  - RFC 5246(= TLSv1.2) により obsoleted された
- ~~RFC 4132 : Addition of Camellia Cipher Suites to Transport Layer Security (TLS)~~
  - https://datatracker.ietf.org/doc/html/rfc4132
  - RFC 5932 により obsoleted された
- RFC 4162 : Addition of SEED Cipher Suites to Transport Layer Security (TLS)
  - https://datatracker.ietf.org/doc/html/rfc4162
- RFC 4279 : Pre-Shared Key Ciphersuites for Transport Layer Security (TLS)
  - https://datatracker.ietf.org/doc/html/rfc4279
- ~~RFC 4492 : TLSv1.0/1.1 向け Elliptic Curve Cryptography (ECC) Cipher Suites 拡張~~
  - https://datatracker.ietf.org/doc/html/rfc4492
  - RFC 8422 により obsoleted された
- RFC 4785 : Pre-Shared Key (PSK) Ciphersuites with NULL Encryption for Transport Layer Security (TLS)
  - https://datatracker.ietf.org/doc/html/rfc4785
- RFC 5054 : Using the Secure Remote Password (SRP) Protocol for TLS Authentication
  - https://datatracker.ietf.org/doc/html/rfc5054
- RFC 5288 : TLSv1.2 向け AES Galois Counter Mode (GCM) Cipher Suites 拡張
  - https://datatracker.ietf.org/doc/html/rfc5288
- RFC 5289 : TLSv1.2 向け Elliptic Curve Cipher Suites with HA-256/384 and AES Galois Counter Mode Cipher Suites 拡張
  - https://datatracker.ietf.org/doc/html/rfc5289
- ~~RFC 5469 : TLSv1.2 で外されたDES/IDEA系暗号スイートでなぜ外されたのかの理由紹介~~
  - https://datatracker.ietf.org/doc/html/rfc5469
  - RFC 8996 で obsoleted された
- RFC 5487 : Pre-Shared Key Cipher Suites for TLS with SHA-256/384 and AES Galois Counter Mode
  - https://datatracker.ietf.org/doc/html/rfc5487
- RFC 5489 : ECDHE_PSK Cipher Suites for Transport Layer Security (TLS)
  - https://datatracker.ietf.org/doc/html/rfc5489
- RFC 5932 - Camellia Cipher Suites for TLS
  - https://datatracker.ietf.org/doc/html/rfc5932
- RFC 6209 : Addition of the ARIA Cipher Suites to Transport Layer Security (TLS)
  - https://datatracker.ietf.org/doc/html/rfc6209
- RFC 6367 : Addition of the Camellia Cipher Suites to Transport Layer Security (TLS)
  - https://datatracker.ietf.org/doc/html/rfc6367
- RFC 6655 : AES-CCM Cipher Suites for Transport Layer Security (TLS)
  - https://datatracker.ietf.org/doc/html/rfc6655
- RFC 7251 : AES-CCM Elliptic Curve Cryptography (ECC) Cipher Suites for TLS
  - https://datatracker.ietf.org/doc/html/rfc7251
- RFC 7905 : TLSv1.2 以降向け ChaCha20-Poly1305 Cipher Suites 拡張
  - https://datatracker.ietf.org/doc/html/rfc7905
- RFC 8422 : Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS) Versions 1.2 and Earlier
  - https://datatracker.ietf.org/doc/html/rfc8422
- RFC 8442 : ECDHE_PSK with AES-GCM and AES-CCM Cipher Suites for TLS 1.2 and DTLS 1.2
  - https://datatracker.ietf.org/doc/html/rfc8442
- RFC 8492 : Secure Password Ciphersuites for Transport Layer Security (TLS)
  - https://datatracker.ietf.org/doc/html/rfc8492
- RFC 8998 : ShangMi (SM) Cipher Suites for TLS 1.3
  - https://datatracker.ietf.org/doc/html/rfc8998
- RFC 9150 : TLS 1.3 Authentication and Integrity-Only Cipher Suites
  - https://datatracker.ietf.org/doc/html/rfc9150
- RFC 9189 : GOST Cipher Suites for Transport Layer Security (TLS) Protocol Version 1.2
  - https://datatracker.ietf.org/doc/html/rfc9189
- RFC 9367 : GOST Cipher Suites for Transport Layer Security (TLS) Protocol Version 1.3
  - https://datatracker.ietf.org/doc/html/rfc9367

## 細かいTLS拡張系RFC

- ~~RFC 3546 : ClientHello, ServerHello 等のTLS拡張(SNIなど)~~
  - https://datatracker.ietf.org/doc/html/rfc3546
  - RFC 4366 により obsoleted された
- ~~RFC 4366 : TLSv1.0/1.1 向けに TLS 拡張を再整理(SNIなど)~~
  - https://datatracker.ietf.org/doc/html/rfc4366
  - RFC 6066 により obsoleted された
- ~~RFC 4507 : TLS Session Resumption without Server-Side State~~
  - https://datatracker.ietf.org/doc/html/rfc4507
  - RFC 5077 により osboleted された
- RFC 5077 : TLS Session Resumption without Server-Side State
  - https://datatracker.ietf.org/doc/html/rfc5077
- RFC 5746 : TLS Renegotiation Indication Extension
  - https://datatracker.ietf.org/doc/html/rfc5746
- RFC 6066 : TLSv1.2 向けTLS拡張を再整理(SNIなど)
  - https://datatracker.ietf.org/doc/html/rfc6066
  - maximum fragment length 拡張については RFC 8449 で再定義された
- ~~RFC 6961 : The Transport Layer Security (TLS) Multiple Certificate Status Request Extension~~
  - https://datatracker.ietf.org/doc/html/rfc6961
  - RFC 8446 により obsoleted された
- RFC 7301 : Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension (ALPN)
  - https://datatracker.ietf.org/doc/html/rfc7301
- ~~RFC 7507 : TLS Fallback Signaling Cipher Suite Value (SCSV) for Preventing Protocol Downgrade Attacks~~
  - https://datatracker.ietf.org/doc/html/rfc7507
  - RFC 8996 により obsoleted された
- RFC 7627 : TLS Session Hash and Extended Master Secret Extension
  - https://datatracker.ietf.org/doc/html/rfc7627
- RFC 8449 : TLSv1.2 向け maximum fragment length 拡張の再定義
  - https://datatracker.ietf.org/doc/html/rfc8449

## ベストプラクティス系RFC

- ~~RFC 7525 : TLS/DTLS の安全な使い方の推奨ガイド~~
  - https://datatracker.ietf.org/doc/html/rfc7525
  - RFC 9325 により obsoleted された
- RFC 8996 : TLS1.0/1.1 の非推奨勧告(deprecation)
  - https://datatracker.ietf.org/doc/html/rfc8996
- RFC 9325 : TLS/DTLS の安全な使い方の推奨ガイド
  - https://datatracker.ietf.org/doc/html/rfc9325

## Datagram Transport Layer Security - DTLS 系RFC

- ~~RFC 4347 : Datagram Transport Layer Security (DTLS)~~
  - https://datatracker.ietf.org/doc/html/rfc4347
  - RFC 6347 により obsoleted された
- ~~RFC 6347 : Datagram Transport Layer Security Version 1.2~~
  - https://datatracker.ietf.org/doc/html/rfc6347
  - RFC 9147 により obsoleted された
- RFC 9147 : The Datagram Transport Layer Security (DTLS) Protocol Version 1.3
  - https://datatracker.ietf.org/doc/html/rfc9147

## 鍵パラメータ系RFC

- RFC 2631 : Diffie-Hellman Key Agreement Method (DH鍵交換)
  - https://datatracker.ietf.org/doc/html/rfc2631
- RFC 5114 : Additional Diffie-Hellman Groups for Use with IETF Standards
  - https://datatracker.ietf.org/doc/html/rfc5114
- RFC 7027 : Elliptic Curve Cryptography (ECC) Brainpool Curves for Transport Layer Security (TLS)
  - https://datatracker.ietf.org/doc/html/rfc7027
- RFC 7919 : Negotiated Finite Field Diffie-Hellman Ephemeral Parameters for Transport Layer Security (TLS)
  - https://datatracker.ietf.org/doc/html/rfc7919

## Online Certificate Status Protocol - OCSP 関連RFC

- ~~RFC 2560 : X.509 Internet Public Key Infrastructure Online Certificate Status Protocol - OCSP~~
  - https://datatracker.ietf.org/doc/html/rfc2560
  - RFC 6960 により obsoleted された
- RFC 6277 : Online Certificate Status Protocol Algorithm Agility
  - https://datatracker.ietf.org/doc/html/rfc6277
- RFC 6960 : X.509 Internet Public Key Infrastructure Online Certificate Status Protocol - OCSP
  - https://datatracker.ietf.org/doc/html/rfc6960
- RFC 8954 : Online Certificate Status Protocol (OCSP) Nonce Extension
  - https://datatracker.ietf.org/doc/html/rfc8954

## 未分類RFC

- ~~RFC 2818 : HTTP Over TLS~~
  - https://datatracker.ietf.org/doc/html/rfc2818
  - RFC 9110 により obsoleted された
- RFC 8447 : IANA Registry Updates for TLS and DTLS
  - https://datatracker.ietf.org/doc/html/rfc8447
- RFC 9110 : HTTP Semantics
  - https://datatracker.ietf.org/doc/html/rfc9110
  - 以下のセクションで https scheme とその使い方について再定義している。
    - 4.2.2. https URI Scheme
    - 4.2.3. http(s) Normalization and Comparison
    - 4.3.3. https Origins
    - 4.3.4. https Certificate Verification

## RFC以外

- https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-4
  - IANAの CipherSuite 名一覧
  - CSVデータとして次のURLからDLできる（らしい）
    - https://www.iana.org/assignments/tls-parameters/tls-parameters-4.csv
- openssl-ciphers - OpenSSL Documentation
  - https://docs.openssl.org/master/man1/openssl-ciphers/
  - openssl がサポートする cipher 名の規則や、TLSバージョンや暗号技術毎にグルーピングされた cipher 一覧を確認できる
  - 利用中の openssl でサポートしている全ての ciphersuite について、番号とIANA名, OpenSSL での名前を一覧表示するコマンド:
    - `$ openssl ciphers -V -stdname "ALL:eNULL" | sort`
- Ciphersuite Info
  - https://ciphersuite.info/
  - cipher suite を検索したり、詳細な情報を調べられるサイト
- Mapping OpenSSL cipher suite names to IANA names
  - https://testssl.sh/openssl-iana.mapping.html
- https://wiki.mozilla.org/Security/Cipher_Suites
  - IANA/GnuTLS/NSS/OpenSSL それぞれの主要 CipherSuite 名が整理された一覧
- https://docs.oracle.com/en/java/javase/11/docs/specs/security/standard-names.html#jsse-cipher-suite-names
  - Java11 でサポートされている Cipher Suite 名一覧

### OpenSSL の CHANGELOG で振り返る、CipherSuite の取り扱い

参考: https://github.com/openssl/openssl/blob/master/CHANGES.md

- 0.9.8 [05 Jul 2005]
  - Change ./Configure so that certain algorithms can be disabled by default. The new counterpiece to "no-xxx" is "enable-xxx".
    - The patented RC5 and MDC2 algorithms will now be disabled unless "enable-rc5" and "enable-mdc2", respectively, are specified.
    - → RC5, MDC2 アルゴリズムがデフォルトで無効化
- 1.0.0r [19 Mar 2015]
  - Removed the export ciphers from the DEFAULT ciphers
    - → EXPORT cipher が DEFAULT cipher 一覧から除外
- 1.0.1 [14 Mar 2012]
  - Initial TLS v1.2 support.
- 1.0.1m [19 Mar 2015]
  - Removed the export ciphers from the DEFAULT ciphers
    - → EXPORT cipher が DEFAULT cipher 一覧から除外
- 1.0.1s [1 Mar 2016]
  - Disable SSLv2 default build, default negotiation and weak ciphers. SSLv2 is by default disabled at build-time. Builds that are not configured with "enable-ssl2" will not support SSLv2.
    -  (...) Specifically, the SSLv2 40-bit EXPORT ciphers, and SSLv2 56-bit DES are no longer available. (CVE-2016-0800)
    -  → SSLv2 および SSLv2 の 40bit EXPORT, 56bit DES cipher が完全に消滅。ビルド時の設定で "enable-ssl2" を指定しても、サポートしない。
- 1.0.2a [19 Mar 2015]
  - Removed the export ciphers from the DEFAULT ciphers
    - → EXPORT cipher が DEFAULT cipher 一覧から除外
- 1.0.2g [1 Mar 2016]
  - Disable SSLv2 default build, default negotiation and weak ciphers. SSLv2 is by default disabled at build-time. Builds that are not configured with "enable-ssl2" will not support SSLv2.
    -  (...) Specifically, the SSLv2 40-bit EXPORT ciphers, and SSLv2 56-bit DES are no longer available. (CVE-2016-0800)
    -  → SSLv2 および SSLv2 の 40bit EXPORT, 56bit DES cipher が完全に消滅。ビルド時の設定で "enable-ssl2" を指定しても、サポートしない。
- 1.1.0 [25 Aug 2016]
  - To mitigate the SWEET32 attack (CVE-2016-2183), 3DES cipher suites have been disabled by default and removed from DEFAULT, just like RC4. See the RC4 item below to re-enable both.
  - Remove DSS, SEED, IDEA, CAMELLIA, and AES-CCM from the default cipherlist.
  - RC4 based libssl ciphersuites are now classed as "weak" ciphers and are disabled by default. They can be re-enabled using the enable-weak-ssl-ciphers option to Configure.
  - The GOST engine was out of date and therefore it has been removed.
  - Removed DES and RC4 ciphersuites from DEFAULT. Also removed RC2 although in 1.0.2 EXPORT was already removed and the only RC2 ciphersuite is also an EXPORT one. COMPLEMENTOFDEFAULT has been updated accordingly to add DES and RC4 ciphersuites.
  - Support for Kerberos ciphersuites in TLS (RFC2712) has been removed.
  - SSLv2 support has been removed.
  - → RC4と3DESがデフォルトで無効化。 有効にするには "enable-weak-ssl-ciphers" をビルド時に設定。
  - → DSS, SEED, IDEA, CAMELLIA, AEC-CCM が DEFAULT cipher list から除外。
  - → GOST エンジンが削除
  - → Kerberos cipher のサポートが削除
  - → SSLv2 サポートが削除
- 1.1.1 [11 Sep 2018]
  - Support for TLSv1.3 added.

### CentOS 5 - 8 における OpenSSL バージョン

| CentOS バージョン | OpenSSL バージョン | 参考資料 |
|------------------|-------------------|----------|
| 5.0 | 0.9.7a -> 0.9.8b | [VaultのSRPM](https://vault.centos.org/5.0/os/SRPMS/) |
| 5.11 | 0.9.8e | [VaultのSRPM](https://vault.centos.org/5.11/updates/SRPMS/) |
| 6.0 | 0.9.8e -> 1.0.0 | [VaultのSRPM](https://vault.centos.org/6.0/os/SRPMS/Packages/) |
| 6.10 | 1.0.1e | [VaultのSRPM](https://vault.centos.org/6.10/updates/Source/SPackages/) |
| 7.0.1406 | 0.9.8e -> 1.0.1e| [VaultのSRPM](https://vault.centos.org/7.0.1406/os/Source/SPackages/) |
| 7.9.2009 | 1.0.2k | [VaultのSRPM](https://vault.centos.org/7.9.2009/updates/Source/SPackages/) |
| 8-stream | 1.1.1g -> 1.1.1k | [VaultのSRPM](https://vault.centos.org/8-stream/BaseOS/Source/SPackages/) |

- OpenSSL で昔の CipuerSuite (RC4, MD5, SSLv2/v3/TLSv1.0 時代の EXPORT 用など) を使いたい時は CentOS 5.11 までを利用するのが確実。(5.11 で 0.9.8e )
  - [CentOS 5 の Dockerイメージ](https://hub.docker.com/layers/library/centos/centos5/images/sha256-1ae98b2c895d1ceeba8913ff79f422f005b7f967a311da520a88ac89180b4c39?context=explore)
  - [CentOS 5.11 の Dockerイメージ](https://hub.docker.com/layers/library/centos/centos5.11/images/sha256-b424fba01172292ee3b8b5dad6c6618b066e9196ecfaa8cf30baf11dfe530ff9?context=explore)
- OpenSSL 1.1.0 で SSLv2 等古いプロトコルや cipher をごっそり削ってる。
  - CentOS 7 までは max 1.0.2k なので、SSLv2 と 40bit EXPORT/56bit DES 以外ならまだRC4や3DESなどは使える。
- TLSv1.3 を使いたいなら OpenSSL 1.1.1g 以降になった CentOS Stream 8 を使う。

## TLSや暗号鍵の日本語ガイドライン

- CRYPTREC | 暗号運用ガイドライン
  - https://www.cryptrec.go.jp/op_guidelines.html
  - CRYPTREC ガイドラインのいくつかは IPA でさらにわかりやすくした設定ガイドなどを公開中
- IPA 公開ガイドライン集
  - TLS暗号設定ガイドライン 安全なウェブサイトのために（暗号設定対策編）
    - https://www.ipa.go.jp/security/crypto/guideline/ssl_crypt_config.html
  - 暗号鍵設定ガイダンス〜暗号鍵の鍵長選択方法と運用方法〜
    - https://www.ipa.go.jp/security/crypto/guideline/ckms_setting.html
  - 暗号鍵管理ガイドライン
    - https://www.ipa.go.jp/security/crypto/guideline/ckms.html

## その他参考にした資料

- sec-it/tls-map: CLI & library for mapping TLS cipher algorithm names: IANA, OpenSSL, GnuTLS, NSS
  - https://github.com/sec-it/tls-map
- tomcat - How to map a OpenSSL's cipher list to Java JSSE - Stack Overflow
  - https://stackoverflow.com/questions/19846020/how-to-map-a-openssls-cipher-list-to-java-jsse
- ciphersについて整理してみた。 - labunix's blog
  - https://labunix.hateblo.jp/entry/20200120/1579448642