赞
踩
在创建context之后,调用符合PFS规范的加密套件,加载完证书之后设置ECDH
- // context 生成
- Context context(SSL_CTX_new(SSLv23_server_method()));
-
- // PFS加密套件,腾讯云,各种检测网站都有推荐
- const char * cipher_list = "ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE";
- int res = SSL_CTX_set_cipher_list(context.context, cipher_list);
- if (res == 0)
- {
- printf("Failed to set cipher list: %s\n", cipher_list);
- }
- else
- {
- printf("load cipher succ res: %d\n", res);
- }
-
- // TLSv1过滤,前向完全设置
- SSL_CTX_set_options(context.context, SSL_OP_NO_TLSv1 | SSL_OP_CIPHER_SERVER_PREFERENCE);
-
- // 加载证书代码
- SSL_CTX_load_verify_locations(context,"ca-certificates.crt证书路径");
- // SSL_CTX_use_certificate_chain_file
- // SSL_CTX_use_PrivateKey_file
-
- // 这一步很重要,设置临时公钥
- EC_KEY *ecdh = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
- if (!ecdh)
- {
- printf("EC_KEY_new_by_curve_name\n");
- }
- SSL_CTX_set_options(context.context, SSL_OP_SINGLE_ECDH_USE);
- SSL_CTX_set_tmp_ecdh (context.context, ecdh);
- EC_KEY_free(ecdh);
// 参考代码nginx源码
一些概念:
TLS:传输层安全性协议(英语:Transport Layer Security,缩写作TLS),及其前身安全套接层(Secure Sockets Layer,缩写作SSL)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。百度链接:https://baike.baidu.com/item/TLS/2979545?fr=aladdin
PFS:(perfect forward secrecy),中文可叫做完全前向保密。要求一个密钥只能访问由它所保护的数据;用来产生密钥的元素一次一换,不能再产生其他的密钥;一个密钥被破解,并不影响其他密钥的安全性。知乎科普:https://www.zhihu.com/question/45203206
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。