Linux C下使用openssl实现SSL双向认证服务端代码实现
我用Openssl实现SSL连接,但是根据报文内容的不同会需要有的条件(A)单向认证,有的条件(B)双向认证。我就面临了一个问题,如果是双向认证的情况,首先我要获取报文才能判断是否需要双向认证,但是报文又必须在SSL连接建立后才会得到,也就是双向认证通过以后。由于对SSL双向认证的理解还不是很深刻,大神帮我给个服务端的双向认证模型,是不是先单向认证建立连接,再获取客户端证书验证。
我的服务端模型:
// 初始化CTX
SSL_library_init();
OpenSSL_add_all_algorithms()
SSL_load_error_strings();
SSL_CTX_new( TLSv1_server_method());
// 请求获取客户端证书
SSL_CTX_set_verify( ctx, SSL_VERIFY_PEER, NULL);
// 加载服务端证书
SSL_CTX_use_certificate_file( ctx, CERTFL, SSL_FILETYPE_PEM);
SSL_CTX_use_PrivateKey_file( ctx, PRIKEY, SSL_FILETYPE_PEM);
SSL_CTX_check_private_key( ctx);
//建立socket连接
accept();
// 加入SSL连接
SSL_new();
SSL_set_fd();
SSL_accept();
到这里就面临问题了,SSL_accept()已经是在SSL握手了,但是这里是双向认证还是单向认证呢?还是说认证需要后续单独完成?握手的时候不就要交换证书协商通讯密钥了么?理解不深刻,请指正。