cipher加密套件(openssl)

一个加密套件指明了SSL握手阶段和通信阶段所应该采用的各种算法。这些算法包括:认证算法、密钥交换算法、对称算法和摘要算法等。
在握手初始化的时候,双方都会导入各自所认可的多种加密套件。在握手阶段,由服务端选择其中的一种加密套件。
OpenSSL的ciphers命令可以列出所有的加密套件。openssl的加密套件在s3_lib.c 的
ssl3_ciphers数组中定义。比如有:

  1. /* Cipher 05 */
  2. {
  3. 1,
  4. SSL3_TXT_RSA_RC4_128_SHA,
  5. SSL3_CK_RSA_RC4_128_SHA,
  6. SSL_kRSA|SSL_aRSA|SSL_RC4 |SSL_SHA1|SSL_SSLV3,
  7. SSL_NOT_EXP|SSL_MEDIUM,
  8. 0,
  9. 128,
  10. 128,
  11. SSL_ALL_CIPHERS,
  12. SSL_ALL_STRENGTHS,
  13. }


其中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函数来设置自己支持的加密套件。主要
的函数有: 

  1. int SSL_set_cipher_list(SSL *s,const char *str)
  2. int SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str)

比如只设置一种加密套件:
int ret=SSL_set_cipher_list(ssl,"RC4-MD5"); 
如果服务端只设置了一种加密套件,那么客户端要么接受要么返回错误。加密套件的选
择是由服务端做出的。

http://blog.chinaunix.net/uid-24709751-id-4050413.html


  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值