当前位置:   article > 正文

openssl完美前向安全(PFS)支持C++实现_ssl_ctx_set_options

ssl_ctx_set_options

在创建context之后,调用符合PFS规范的加密套件,加载完证书之后设置ECDH

  1. // context 生成
  2. Context context(SSL_CTX_new(SSLv23_server_method()));
  3. // PFS加密套件,腾讯云,各种检测网站都有推荐
  4. const char * cipher_list = "ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE";
  5. int res = SSL_CTX_set_cipher_list(context.context, cipher_list);
  6. if (res == 0)
  7. {
  8. printf("Failed to set cipher list: %s\n", cipher_list);
  9. }
  10. else
  11. {
  12. printf("load cipher succ res: %d\n", res);
  13. }
  14. // TLSv1过滤,前向完全设置
  15. SSL_CTX_set_options(context.context, SSL_OP_NO_TLSv1 | SSL_OP_CIPHER_SERVER_PREFERENCE);
  16. // 加载证书代码
  17. SSL_CTX_load_verify_locations(context,"ca-certificates.crt证书路径");
  18. // SSL_CTX_use_certificate_chain_file
  19. // SSL_CTX_use_PrivateKey_file
  20. // 这一步很重要,设置临时公钥
  21. EC_KEY *ecdh = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
  22. if (!ecdh)
  23. {
  24. printf("EC_KEY_new_by_curve_name\n");
  25. }
  26. SSL_CTX_set_options(context.context, SSL_OP_SINGLE_ECDH_USE);
  27. SSL_CTX_set_tmp_ecdh (context.context, ecdh);
  28. 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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/533220
推荐阅读
相关标签
  

闽ICP备14008679号