SSL (TLS) 対応プロトコルのリスト

御社の常時SSL (TLS) への対応はお済みですか。というわけで本稿ではRFCで標準化されているプロトコルのうち、SSL (TLS) に対応済みのものを列挙していきたいと思います。

# 用語の定義
本稿では、以下の用語を使います。

- __Implicit TLS__ （暗黙のTLS）
TCPコネクション開始と同時にTLSセッションがいきなり始まる方式です。httpsなどはこれです。平文通信用と暗号通信用に別々のポートを割り当てる必要がありますが、そのぶん低レイテンシーを実現できます。

- __Explicit TLS__ （明示的TLS）
TCPコネクションが確立すると、最初は平文で通信が始まり、そこからTLSへ移行する方式です。STARTTLSとか、そんな感じのコマンドが用意されているのがこれです。特徴としては、平文通信と暗号通信を同じポートでカバーできます。平文で始まって暗号へ切り替わるという手順を踏む分、レイテンシーは大きくなります。

- __DTLS__
TCPではなくUDP上で動くTLSです。TLS1.1に対応するDTLS1.0が[RFC4347](https://tools.ietf.org/html/rfc4347) ([Google翻訳](https://rfcs.web.fc2.com/rfc4347.html))、TLS1.2に対応するDTLS1.2が[RFC6347](https://tools.ietf.org/html/rfc6347) ([Google翻訳](https://rfcs.web.fc2.com/rfc6347.html))として定義されています。TLS1.3に対応するDTLS1.3は2022年になって[RFC9147](https://tools.ietf.org/html/rfc9147) ([Google翻訳](https://rfcs.web.fc2.com/rfc9147.html))として定義されました。
UDPですので、パケットロスすることもあるしパケット到着順序の入れ替わりもあります。ただし、UDPのくせにブロードキャストは使えません。
本稿では特に断らない限り、暗号ポートでudpとなっているポート番号はDTLSを使っていることを指します。ただし、HTTPについては、DTLSではなくQUICを使っています。

- __SCTP__
TCPともUDPとも別の、レイヤ4（トランスポート層）のプロトコルです。[RFC3286](https://tools.ietf.org/html/rfc3286) ([Google翻訳](https://rfcs.web.fc2.com/rfc3286.html)), [RFC4960](https://tools.ietf.org/html/rfc4960) ([Google翻訳](https://rfcs.web.fc2.com/rfc4960.html)) で定義されています。輻輳制御や再送がサポートされますが、TCPと異なり、バイトストリーム指向ではなくデータグラム指向のプロトコルです。
SCTP上でもDTLS ([RFC6083](https://tools.ietf.org/html/rfc6083), [Google翻訳](https://rfcs.web.fc2.com/rfc6083.html)) による暗号通信が可能です。本稿では特に断らない限り、暗号ポートでsctpとなっているポート番号はDTLSを使っていることを指します。

- __DCCP__
TCPともUDPともSCTPとも別の、レイヤ4（トランスポート層）のプロトコルです。これもデータグラム指向のプロトコルです。[RFC4340](https://tools.ietf.org/html/rfc4340) ([Google翻訳](https://rfcs.web.fc2.com/rfc4340.html)) で定義されます。
DCCP上でもDTLS ([RFC5238](https://tools.ietf.org/html/rfc5238), [Google翻訳](https://rfcs.web.fc2.com/rfc5238.html)) による暗号通信が可能です。本稿では特に断らない限り、暗号ポートでdccpとなっているポート番号はDTLSを使っていることを指します。

# メール送受信プロトコル
メールのMTA・MUA間の通信プロトコルであるSMTP (Submission), POP3, IMAP4にはいずれもSTARTTLSコマンドが用意されていてExplicit TLSが可能ですが、それとは別にImplicit TLS用のポートもあり、両方が使われている状況です。[RFC8314](https://tools.ietf.org/html/rfc8314) ([Google翻訳](https://rfcs.web.fc2.com/rfc8314.html)) では、STARTTLSよりもImplicit TLSのほうを推奨する方針が打ち出されています。

## SMTP
MTA・MUA間通信 (Submission) については前述の通りです。MTA・MTA間のSMTP（ポート25）は、従来どおり平文またはSTARTTLSが使われます。

- __平文ポート：__ 25/tcp, 587/tcp (Submission)
- __暗号ポート__
  - Implicit TLS: 465/tcp (Submission)
  - Explicit TLS: 25/tcp, 587/tcp (Submission)
- __RFC__
  - [RFC3207](https://tools.ietf.org/html/rfc3207) ([Google翻訳](https://rfcs.web.fc2.com/rfc3207.html)) SMTP Service Extension for Secure SMTP over Transport Layer Security
  - [RFC5321](https://tools.ietf.org/html/rfc5321) ([Google翻訳](https://rfcs.web.fc2.com/rfc5321.html)) Simple Mail Transfer Protocol
  - [RFC6409](https://tools.ietf.org/html/rfc6409) ([Google翻訳](https://rfcs.web.fc2.com/rfc6409.html)) Message Submission for Mail
  - [RFC8314](https://tools.ietf.org/html/rfc8314) ([Google翻訳](https://rfcs.web.fc2.com/rfc8314.html)) Cleartext Considered Obsolete: Use of Transport Layer Security (TLS) for Email Submission and Access

## POP3
あまり知られていませんが、POP3にもRFC上はSTARTTLSコマンドがあってExplicit TLSが可能です。

- __平文ポート：__ 110/tcp
- __暗号ポート：__ 110/tcp (STARTTLS), 995/tcp
- __RFC__
  - [RFC1939](https://tools.ietf.org/html/rfc1939) ([Google翻訳](https://rfcs.web.fc2.com/rfc1939.html)) Post Office Protocol - Version 3
  - [RFC2595](https://tools.ietf.org/html/rfc2595) ([Google翻訳](https://rfcs.web.fc2.com/rfc2595.html)) Using TLS with IMAP, POP3 and ACAP
  - [RFC8314](https://tools.ietf.org/html/rfc8314) ([Google翻訳](https://rfcs.web.fc2.com/rfc8314.html)) Cleartext Considered Obsolete: Use of Transport Layer Security (TLS) for Email Submission and Access

## IMAP4

- __平文ポート：__ 143/tcp
- __暗号ポート：__ 143/tcp (STARTTLS), 993/tcp
- __RFC__
  - [RFC3501](https://tools.ietf.org/html/rfc3501) ([Google翻訳](https://rfcs.web.fc2.com/rfc3501.html)) INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1
  - [RFC8314](https://tools.ietf.org/html/rfc8314) ([Google翻訳](https://rfcs.web.fc2.com/rfc8314.html)) Cleartext Considered Obsolete: Use of Transport Layer Security (TLS) for Email Submission and Access
  - [RFC9051](https://tools.ietf.org/html/rfc9051) ([Google翻訳](https://rfcs.web.fc2.com/rfc9051.html)) Internet Message Access Protocol (IMAP) - Version 4rev2

# その他Implicit TLSとExplicit TLSが両方とも使われているプロトコル

## FTP
[RFC4217](https://tools.ietf.org/html/rfc4217) ([Google翻訳](https://rfcs.web.fc2.com/rfc4217.html)) として標準化されているのはExplicit TLSです。Implicit TLSはポートは割り当てられていますがRFCにはなっていません。現実には、Explicit TLSとImplicit TLSの両方が使われています。

- __平文ポート：__ 21/tcp (ftp), 20/tcp (ftp-data)
- __暗号ポート__
  - Implicit TLS: 990/tcp (ftps), 989/tcp (ftps-data)
  - Explicit TLS: 21/tcp (ftp), 20/tcp (ftp-data)
- __RFC__
  - [RFC959](https://tools.ietf.org/html/rfc959) ([Google翻訳](https://rfcs.web.fc2.com/rfc959.html)) FILE TRANSFER PROTOCOL (FTP)
  - [RFC2228](https://tools.ietf.org/html/rfc2228) ([Google翻訳](https://rfcs.web.fc2.com/rfc2228.html)) FTP Security Extensions
  - [RFC4217](https://tools.ietf.org/html/rfc4217) ([Google翻訳](https://rfcs.web.fc2.com/rfc4217.html)) Securing FTP with TLS

## LDAP
LDAPはTCP上のプロトコルですが、[Active DirectoryではUDPも使うらしいです。](http://msdn.microsoft.com/en-us/library/cc717362(v=prot.10).aspx)
LDAPにもStartTLSがあってImplicit TLSとExplicit TLSの両方が使えますが、Active Directoryなどのメジャーな製品はどちらを使っているんでしょうか。知りません。というわけで、この件恐れ入りますが緩募とさせていただきます。

- __平文ポート：__ 389/tcp
- __暗号ポート：__ 389/tcp (StartTLS), 636/tcp
- __RFC__
  - [RFC4511](https://tools.ietf.org/html/rfc4511) ([Google翻訳](https://rfcs.web.fc2.com/rfc4511.html)) Lightweight Directory Access Protocol (LDAP): The Protocol

## NNTP
- __平文ポート：__ 119/tcp
- __暗号ポート：__ 119/tcp (STARTTLS), 563/tcp
- __RFC__
  - [RFC3977](https://tools.ietf.org/html/rfc3977) ([Google翻訳](https://rfcs.web.fc2.com/rfc3977.html)) Network News Transfer Protocol (NNTP)
  - [RFC4642](https://tools.ietf.org/html/rfc4642) ([Google翻訳](https://rfcs.web.fc2.com/rfc4642.html)) Using Transport Layer Security (TLS) with Network News Transfer Protocol (NNTP)

## HTTP
HTTPは低レイテンシーを非常に重視する世界なので、Explicit TLSのような高レイテンシー技術は~~もちろん使いません~~。。。と思っていたのですが、コメントでご指摘いただいた情報によると、[RFC2817](https://tools.ietf.org/html/rfc2817) ([Google翻訳](https://rfcs.web.fc2.com/rfc2817.html)) というものが、あるにはあります。誰も使っていないようですが。。。
また、UDP上ではQUICの導入が進みつつあります。

- __平文ポート：__ 80/tcp
- __暗号ポート：__ 443/tcp, 443/udp (QUIC)
- __RFC__
  - [RFC7230](https://tools.ietf.org/html/rfc7230) ([Google翻訳](https://rfcs.web.fc2.com/rfc7230.html)) Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing
  - [RFC7540](https://tools.ietf.org/html/rfc7540) ([Google翻訳](https://rfcs.web.fc2.com/rfc7540.html)) Hypertext Transfer Protocol Version 2 (HTTP/2)
  - [RFC9000](https://tools.ietf.org/html/rfc9000) ([Google翻訳](https://rfcs.web.fc2.com/rfc9000.html)) QUIC: A UDP-Based Multiplexed and Secure Transport
  - [RFC9001](https://tools.ietf.org/html/rfc9001) ([Google翻訳](https://rfcs.web.fc2.com/rfc9001.html)) Using TLS to Secure QUIC
  - [RFC9114](https://tools.ietf.org/html/rfc9114) ([Google翻訳](https://rfcs.web.fc2.com/rfc9114.html)) HTTP/3

# 平文とImplicit TLSだけのプロトコル

## DNS
DNSにはクライアント・プロキシサーバー間の通信（再帰的DNSクエリー）とプロキシサーバー・オーソリティーサーバー間の通信（非再帰的DNSクエリー）がありますが、TLSで暗号化されるのは前者です。後者は従来通り平文です。

- __平文ポート：__ 53/tcp, 53/udp
- __暗号ポート：__ 853/tcp, 853/udp
- __RFC__
  - [RFC883](https://tools.ietf.org/html/rfc883) ([Google翻訳](https://rfcs.web.fc2.com/rfc883.html)) DOMAIN NAMES - IMPLEMENTATION and SPECIFICATION
  - [RFC7858](https://tools.ietf.org/html/rfc7858) ([Google翻訳](https://rfcs.web.fc2.com/rfc7858.html)) Specification for DNS over Transport Layer Security (TLS)
  - [RFC8094](https://tools.ietf.org/html/rfc8094) ([Google翻訳](https://rfcs.web.fc2.com/rfc8094.html)) DNS over Datagram Transport Layer Security (DTLS)

## RADIUS
RADIUSといえば普通はUDPですが、RFC上はTCPも用意されています。暗号化も、TCPのTLSとUDPのDTLSの2種類が用意されています。
平文の場合、普通のRADIUSとRADIUS AccountingとRADIUS Dynamic Authorizationそれぞれに別のポートが割り当てられていますが、TLSはそんなことはなく、ポート2083一つで全部処理します。

- __平文ポート__
  - 1812/tcp, 1812/udp
  - 1813/tcp, 1813/udp (Accounting)
  - 3799/tcp, 3799/udp (Dynamic Authorization)
- __暗号ポート：__ 2083/tcp (TLS), 2083/udp (DTLS)
- __RFC__
  - [RFC2865](https://tools.ietf.org/html/rfc2865) ([Google翻訳](https://rfcs.web.fc2.com/rfc2865.html)) Remote Authentication Dial In User Service (RADIUS)
  - [RFC2866](https://tools.ietf.org/html/rfc2866) ([Google翻訳](https://rfcs.web.fc2.com/rfc2866.html)) RADIUS Accounting
  - [RFC5176](https://tools.ietf.org/html/rfc5176) ([Google翻訳](https://rfcs.web.fc2.com/rfc5176.html)) Dynamic Authorization Extensions to Remote Authentication Dial In User Service (RADIUS)
  - [RFC6613](https://tools.ietf.org/html/rfc6613) ([Google翻訳](https://rfcs.web.fc2.com/rfc6613.html)) RADIUS over TCP
  - [RFC6614](https://tools.ietf.org/html/rfc6614) ([Google翻訳](https://rfcs.web.fc2.com/rfc6614.html)) Transport Layer Security (TLS) Encryption for RADIUS
  - [RFC7360](https://tools.ietf.org/html/rfc7360) ([Google翻訳](https://rfcs.web.fc2.com/rfc7360.html)) Datagram Transport Layer Security (DTLS) as a Transport Layer for RADIUS

## Diameter
- __平文ポート：__ 3868/tcp, 3868/sctp
- __暗号ポート：__ 5868/tcp, 5868/sctp (DTLS)
- __RFC__
  - [RFC6733](https://tools.ietf.org/html/rfc6733) ([Google翻訳](https://rfcs.web.fc2.com/rfc6733.html)) Diameter Base Protocol

## SNMP
SNMPといえば普通はUDPですが、RFC上はTCPも用意されています。暗号化も、TCPのTLSとUDPのDTLSの2種類が用意されています。

- __平文ポート__
  - 161/tcp, 161/udp (snmp)
  - 162/tcp, 162/udp (snmptrap)
- __暗号ポート__
  - 10161/tcp, 10161/udp (snmptls)
  - 10162/tcp, 10162/udp (snmptls-trap)
- __RFC__
  - [RFC1157](https://tools.ietf.org/html/rfc1157) ([Google翻訳](https://rfcs.web.fc2.com/rfc1157.html)) A Simple Network Management Protocol (SNMP)
  - [RFC3430](https://tools.ietf.org/html/rfc3430) ([Google翻訳](https://rfcs.web.fc2.com/rfc3430.html)) Simple Network Management Protocol (SNMP) over Transmission Control Protocol (TCP) Transport Mapping
  - [RFC6353](https://tools.ietf.org/html/rfc6353) ([Google翻訳](https://rfcs.web.fc2.com/rfc6353.html)) Transport Layer Security (TLS) Transport Model for the Simple Network Management Protocol (SNMP)

## Syslog
Syslogの平文ポートに514/tcpを含むかどうかは微妙な問題で、RFCでも微妙な書きっぷりになっています。[IANAの番号表](https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml)では、514/tcpはshell （rshのこと）に割り当てられています。514/udpの方は、間違いなくSyslogに割り当てられています。

- __平文ポート：__ 514/udp
- __暗号ポート：__ 6514/tcp, 6514/udp, 6514/dccp
- __RFC__
  - [RFC3164](https://tools.ietf.org/html/rfc3164) ([Google翻訳](https://rfcs.web.fc2.com/rfc3164.html)) The BSD syslog Protocol
  - [RFC5424](https://tools.ietf.org/html/rfc5424) ([Google翻訳](https://rfcs.web.fc2.com/rfc5424.html)) The Syslog Protocol
  - [RFC5425](https://tools.ietf.org/html/rfc5425) ([Google翻訳](https://rfcs.web.fc2.com/rfc5425.html)) Transport Layer Security (TLS) Transport Mapping for Syslog
  - [RFC6012](https://tools.ietf.org/html/rfc6012) ([Google翻訳](https://rfcs.web.fc2.com/rfc6012.html)) Datagram Transport Layer Security (DTLS) Transport Mapping for Syslog
  - [RFC6587](https://tools.ietf.org/html/rfc6587) ([Google翻訳](https://rfcs.web.fc2.com/rfc6587.html)) Transmission of Syslog Messages over TCP

## STUN, TURN
- __平文ポート：__ 3478/tcp, 3478/udp
- __暗号ポート：__ 5349/tcp, 5349/udp
- __RFC__
  - [RFC5389](https://tools.ietf.org/html/rfc5389) ([Google翻訳](https://rfcs.web.fc2.com/rfc5389.html)) Session Traversal Utilities for NAT (STUN)
  - [RFC5766](https://tools.ietf.org/html/rfc5766) ([Google翻訳](https://rfcs.web.fc2.com/rfc5766.html)) Traversal Using Relays around NAT (TURN): Relay Extensions to Session Traversal Utilities for NAT (STUN)
  - [RFC5780](https://tools.ietf.org/html/rfc5780) ([Google翻訳](https://rfcs.web.fc2.com/rfc5780.html)) NAT Behavior Discovery Using Session Traversal Utilities for NAT (STUN)
  - [RFC7350](https://tools.ietf.org/html/rfc7350) ([Google翻訳](https://rfcs.web.fc2.com/rfc7350.html)) Datagram Transport Layer Security (DTLS) as Transport for Session Traversal Utilities for NAT (STUN)

## SIP
- __平文ポート：__ 5060/tcp, 5060/udp, 5060/sctp
- __暗号ポート：__ 5061/tcp, 5061/udp, 5061/sctp
- __RFC__
  - [RFC3261](https://tools.ietf.org/html/rfc3261) ([Google翻訳](https://rfcs.web.fc2.com/rfc3261.html)) SIP: Session Initiation Protocol
  - [RFC3263](https://tools.ietf.org/html/rfc3263) ([Google翻訳](https://rfcs.web.fc2.com/rfc3263.html)) Session Initiation Protocol (SIP): Locating SIP Servers
  - [RFC4168](https://tools.ietf.org/html/rfc4168) ([Google翻訳](https://rfcs.web.fc2.com/rfc4168.html)) The Stream Control Transmission Protocol (SCTP) as a Transport for the Session Initiation Protocol (SIP)

## MPLS-in-UDP

- __平文ポート：__ 6635/udp
- __暗号ポート：__ 6636/udp
- __RFC__
  - [RFC7510](https://tools.ietf.org/html/rfc7510) ([Google翻訳](https://rfcs.web.fc2.com/rfc7510.html)) Encapsulating MPLS in UDP

## GRE-in-UDP

- __平文ポート：__ 4754/udp
- __暗号ポート：__ 4755/udp
- __RFC__
  - [RFC8086](https://tools.ietf.org/html/rfc8086) ([Google翻訳](https://rfcs.web.fc2.com/rfc8086.html)) GRE-in-UDP Encapsulation

# その他

## SCTP
DTLS over SCTPが [RFC6083](https://tools.ietf.org/html/rfc6083) ([Google翻訳](https://rfcs.web.fc2.com/rfc6083.html)) で定義されていることは上記「用語の定義」のところで説明しましたが、それとは別に、SCTP over DTLSが [RFC8261](https://tools.ietf.org/html/rfc8261) ([Google翻訳](https://rfcs.web.fc2.com/rfc8261.html)) で定義されています。

- __RFC__
  - [RFC8261](https://tools.ietf.org/html/rfc8261) ([Google翻訳](https://rfcs.web.fc2.com/rfc8261.html)) Datagram Transport Layer Security (DTLS) Encapsulation of SCTP Packets

。。。他にもまだまだありますが、残りは気が向いた時に書き足していきたいと思います。

# リファレンス

Service Name and Transport Protocol Port Number Registry
https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml