文件名称:加密套件-typescript deep dive 无水印原版pdf
文件大小:2.4MB
文件格式:PDF
更新时间:2024-06-30 06:33:09
openssl编程
31.5 加密套件 一个加密套件指明了 SSL 握手阶段和通信阶段所应该采用的各种算法。这些算法包括: 认证算法、密钥交换算法、对称算法和摘要算法等。 在握手初始化的时候,双方都会导入各自所认可的多种加密套件。在握手阶段,由服务 端选择其中的一种加密套件。 OpenSSL 的 ciphers 命令可以列出所有的加密套件。openssl 的加密套件在 s3_lib.c 的 ssl3_ciphers 数组中定义。比如有: /* Cipher 05 */ { 1, SSL3_TXT_RSA_RC4_128_SHA, SSL3_CK_RSA_RC4_128_SHA, SSL_kRSA|SSL_aRSA|SSL_RC4 |SSL_SHA1|SSL_SSLV3, SSL_NOT_EXP|SSL_MEDIUM, 0, 128, 128, SSL_ALL_CIPHERS, SSL_ALL_STRENGTHS, } 其中 1 表示是合法的加密套件;SSL3_TXT_RSA_RC4_128_SHA 为加密套件的名字, SSL3_CK_RSA_RC4_128_SHA 为 加 密 套 件 ID , SSL_kRSA|SSL_aRSA|SSL_RC4 |SSL_SHA1|SSL_SSLV3 表明了各种算法,其中密钥交换采用 RSA 算法(SSL_kRSA),认 证采用 RSA 算法(SSL_aRSA),对称加密算法采用 RC4 算法(SSL_RC4),摘要采用 SHA1, 采用 SSL 协议第三版本,SSL_NOT_EXP|SSL_MEDIUM 表明算法的强度。 在客户端和服务器端建立安全连接之前,双方都必须指定适合自己的加密套件。加密套 件的选择可以通过组合的字符串来控制。 字符串的形式举例:ALL:!ADH:RC4+RSA:+SSLv2:@STRENGTH。 Openssl定义了4中选择符号:“+”,“-”,“!”,“@”。其中,“+”表示取交集;“-” 表示临时删除一个算法;“!”表示永久删除一个算法;“@“表示了排序方法。 多个描述之间可以用“:”、“,”、“ ”、“;”来分开。选择加密套件的时候按照从左到的 顺序构成双向链表,存放与内存中。 ALL:!ADH:RC4+RSA:+SSLv2:@STRENGTH表示的意义是:首先选择所有的加密套件 (不包含eNULL,即空对称加密算法),然后在得到的双向链表之中去掉身份验证采用DH 的加密套件;加入包含RC4算法并将包含RSA的加密套件放在双向链表的尾部;再将支持 SSLV2的加密套件放在尾部; 后得到的结果按照安全强度进行排序。 SSL建立链接之前,客户端和服务器端用openssl函数来设置自己支持的加密套件。主要 的函数有: