openssl开发过程中的一些总结

1.从客户端到服务器的ssl连接的建立过程:
  1. #define     CERTFILE_PATH           "/root/CA/client.pem"
  2. #define     CERTKEY_PATH            "/root/CA/clientkey.pem"
  3. #define     CACERT_PATH             "/root/CA/cacert.pem"

初始化ssl库:
  1. SSL_library_init();
  2. SSL_load_error_strings();  //提供将错误号解析为字符串的功能
  3. OpenSSL_add_all_algorithms(); //支持所有算法
建立ssl上下文(CTX),并进行设置为建立SSL连接作准备:
  1. SSL_METHOD* m_method = SSLv3_method();//SSLv3_client_method();

  2. if(NULL == m_method)
  3.     return false;

  4. //根据SSL连接和验证方式建立CTX
  5. mSSL_CTX* m_ctx = SSL_CTX_new(m_method);

  6. if(NULL == m_ctx)
  7.     return false;

  8. //载入CA证书
  9. if( SSL_CTX_load_verify_locations(m_ctx,CACERT_PATH, NULL) != 1 )
  10. {
  11.     return false;
  12. }

  13. //载入客户端证书
  14. if(  SSL_CTX_use_certificate_file(m_ctx, CERTFILE_PATH, SSL_FILETYPE_PEM) != 1)
  15.     return false;

  16. //载入certificate_chain_file,这是一个PEM格式的文件,里面依次为客户端证书和CA证书,必须以CA根证书为结尾
  17. if( SSL_CTX_use_certificate_chain_file(m_ctx,CERTCHAIN) != 1)
  18.     return false;

  19. //为客户端私钥设置默认密码
  20. SSL_CTX_set_default_passwd_cb_userdata(m_ctx, (void *)CERTKEY_PW);

  21. //载入客户端私钥,如果在上面没有设置默认密码,调用这个函数时openssl会在终端提示用户手动输入密码
  22. if(SSL_CTX_use_PrivateKey_file(m_ctx,MLE_RES_CERTKEY_PATH, SSL_FILETYPE_PEM) !=1 )
  23.     return false;
  24.      
  25. //检查客户端私钥和证书是否匹配   
  26. if( SSL_CTX_check_private_key(m_ctx) != 1 )
  27.     return false;


  1. //建立SSL
  2. SSL* m_ssl = SSL_new(m_ctx);
  3. if(NULL == m_ssl)
  4.    return false;
  1. //绑定普通socket到ssl,这个普通socket必须是已经使用socket的connect函数链接成功了的
  2. if(SSL_set_fd(m_ssl, m_socket) == -1)
  3.     return false;
  1. //使用SSL连接服务器
  2. SSL_connect(m_ssl);
  1. //获取连接到的服务器的证书信息,如果服务器不需要证书也会返回NULL
  2. X509 *x590test = SSL_get_peer_certificate(m_ssl);
  3. if(x590test == NULL )
  4. {
  5.     return false;
  6. }
  1. //获得服务器证书验证结果,X509_V_OK为验证通过
  2. if(SSL_get_verify_result(m_ssl) != X509_V_OK)
  3. {
  4.     return false;
  5. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值