跳到主要内容

Appendix A. Protocol Data Structures and Constant Values (协议数据结构和常量值)

本附录汇总 TLS 1.2 protocol 中使用的数据结构和常量值.

A.1. Record Layer (记录层)

struct {
uint8 major;
uint8 minor;
} ProtocolVersion;

ProtocolVersion version = { 3, 3 }; /* TLS v1.2 */

enum {
change_cipher_spec(20), alert(21), handshake(22),
application_data(23), (255)
} ContentType;

struct {
ContentType type;
ProtocolVersion version;
uint16 length;
opaque fragment[TLSPlaintext.length];
} TLSPlaintext;

struct {
ContentType type;
ProtocolVersion version;
uint16 length;
opaque fragment[TLSCompressed.length];
} TLSCompressed;

struct {
ContentType type;
ProtocolVersion version;
uint16 length;
select (SecurityParameters.cipher_type) {
case stream: GenericStreamCipher;
case block: GenericBlockCipher;
case aead: GenericAEADCipher;
} fragment;
} TLSCiphertext;

A.2. Change Cipher Specs Message

struct {
enum { change_cipher_spec(1), (255) } type;
} ChangeCipherSpec;

A.3. Alert Messages (告警消息)

enum { warning(1), fatal(2), (255) } AlertLevel;

enum {
close_notify(0),
unexpected_message(10),
bad_record_mac(20),
decryption_failed_RESERVED(21),
record_overflow(22),
decompression_failure(30),
handshake_failure(40),
no_certificate_RESERVED(41),
bad_certificate(42),
unsupported_certificate(43),
certificate_revoked(44),
certificate_expired(45),
certificate_unknown(46),
illegal_parameter(47),
unknown_ca(48),
access_denied(49),
decode_error(50),
decrypt_error(51),
export_restriction_RESERVED(60),
protocol_version(70),
insufficient_security(71),
internal_error(80),
user_canceled(90),
no_renegotiation(100),
unsupported_extension(110),
(255)
} AlertDescription;

struct {
AlertLevel level;
AlertDescription description;
} Alert;

A.4. Handshake Protocol (握手协议)

enum {
hello_request(0), client_hello(1), server_hello(2),
certificate(11), server_key_exchange (12),
certificate_request(13), server_hello_done(14),
certificate_verify(15), client_key_exchange(16),
finished(20),
(255)
} HandshakeType;

struct {
HandshakeType msg_type;
uint24 length;
select (HandshakeType) {
case hello_request: HelloRequest;
case client_hello: ClientHello;
case server_hello: ServerHello;
case certificate: Certificate;
case server_key_exchange: ServerKeyExchange;
case certificate_request: CertificateRequest;
case server_hello_done: ServerHelloDone;
case certificate_verify: CertificateVerify;
case client_key_exchange: ClientKeyExchange;
case finished: Finished;
} body;
} Handshake;

A.5. The Cipher Suite (密码套件)

TLS 1.2 定义的 cipher suite identifier 包括 RSA, DH, DHE 和 anonymous DH 组合, 使用 NULL, RC4, 3DES, AES-CBC, SHA, SHA256 等算法. TLS_RSA_WITH_AES_128_CBC_SHA 是 mandatory-to-implement cipher suite.

A.6. The Security Parameters (安全参数)

SecurityParameters 描述当前 connection state 所需的 PRF algorithm, bulk cipher algorithm, cipher type, MAC algorithm, compression algorithm, master secret, client random 和 server random.