美文网首页
SSL客户端

SSL客户端

作者: 超哥__ | 来源:发表于2021-10-03 19:01 被阅读0次
#define HOST_NAME "www.random.org"
#define HOST_PORT "443"
#define HOST_RESOURCE "/cgi-bin/randbyte?nbytes=32&format=h"

long res = 1;
SSL_CTX* ctx = NULL;
BIO *web = NULL, *out = NULL;
SSL *ssl = NULL;
const long flags = SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | SSL_OP_NO_COMPRESSION;
const char* const PREFERRED_CIPHERS = "HIGH:!aNULL:!kRSA:!PSK:!SRP:!MD5:!RC4";

SSL_library_init();
SSL_load_error_strings();
OPENSSL_config(NULL);
// 初始化
const SSL_METHOD* method = SSLv23_method();
ctx = SSL_CTX_new(method);
SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, verify_callback);
SSL_CTX_set_verify_depth(ctx, 4);
SSL_CTX_set_options(ctx, flags);
SSL_CTX_load_verify_locations(ctx, "random-org-chain.pem", NULL);
BIO_new_ssl_connect(ctx);
BIO_set_conn_hostname(web, HOST_NAME ":" HOST_PORT);
BIO_get_ssl(web, &ssl);
if(!(ssl != NULL)) 
    handleFailure();
SSL_set_cipher_list(ssl, PREFERRED_CIPHERS);
res = SSL_set_tlsext_host_name(ssl, HOST_NAME);
if(!(1 == res)) 
    handleFailure();
BIO_new_fp(stdout, BIO_NOCLOSE);
res = BIO_do_connect(web);
if(!(1 == res)) handleFailure();
res = BIO_do_handshake(web);
if(!(1 == res)) 
    handleFailure();
// 证书校验
X509* cert = SSL_get_peer_certificate(ssl);
if(cert)
    X509_free(cert);
if(NULL == cert) 
    handleFailure();
res = SSL_get_verify_result(ssl);
if(!(X509_V_OK == res)) 
    handleFailure();
// 通信
BIO_puts(web, "GET " HOST_RESOURCE " HTTP/1.1\r\n"
              "Host: " HOST_NAME "\r\n"
              "Connection: close\r\n\r\n");
BIO_puts(out, "\n");
int len = 0;
do
{
  char buff[1536] = {};
  len = BIO_read(web, buff, sizeof(buff));       
  if(len > 0)
    BIO_write(out, buff, len);
} while (len > 0 || BIO_should_retry(web));
if(out)
  BIO_free(out);
if(web != NULL)
  BIO_free_all(web);
if(NULL != ctx)
  SSL_CTX_free(ctx);

相关文章

  • SSL VPN Client For Windows

    FortiClient可以实现更加完善的ssl vpn客户端功能。 小ssl vpn客户端(1.7M左右,非for...

  • HTTP

    HTTPS:HTTP+SSL(证书)端口:443通讯方式:客户端发送HTTP给服务器,服务器返回SSL给客户端,以...

  • openssl制作免费SSL证书

    SSL证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道(Secure socketlayer(SSL...

  • ActiveMQ SSL连接泄露问题记录

    现象 前几日在生产环境上出现了SSL连接泄露的问题,具体现象是 客户端使用SSL协议不停尝试重连MQ,客户端上使用...

  • 基于AFNetworking的https自签名证书单向认证与双向

    单向认证流程: 客户端向服务端发送SSL协议版本号、加密算法种类、随机数等信息。 服务端给客户端返回SSL协议版本...

  • mysql通信协议 -- 连接创建

    mysql通信协连接阶段主要内容包括: 交换客户端和服务端的信息如果客户端设置了SSL,设置SSL通信通道服务端根...

  • Https 单项认证 和双向认证

    单项认证 1、客户端向服务端发送SSL协议版本号、加密算法种类、随机数等信息。2、服务端给客户端返回SSL协议版本...

  • SSL客户端

  • SSL证书工作原理

    SSL握手 证书主要作用是在SSL握手中,我们来看一下SSL的握手过程 客户端向网站发起https请求 服务器响应...

  • https单向认证和双向认证学习笔记

    单向认证 客户端向服务端发送SSL协议版本号、加密算法种类、随机数等信息。 服务端给客户端返回SSL协议版本号、加...

网友评论

      本文标题:SSL客户端

      本文链接:https://www.haomeiwen.com/subject/jtkbnltx.html