OpenSSL的相互身份验证总是成功的
Mutual authentication always succeeds with OpenSSL
我正在使用openssl和zmq编写服务器和客户端。我的客户端和服务器需要相互身份验证。但在服务器上设置了SSL_CTX_set_verify(ssl_ctx,SSL_VERIFY_FAIL_IF_NO_PEER_CERT,NULL)
之后,无论客户端是否发送证书,握手都会成功。此外,SSL_get_peer_certificate(tls->get_ssl_())
返回null,SSL_get_verify_result(tls->get_ssl_())
返回0,这意味着X509_V_OK
。
我现在真的很困惑和绝望。有什么建议或更正吗?
这是我代码的一部分:
OpenSSL_add_all_algorithms();
SSL_library_init();
SSL_load_error_strings();
ERR_load_BIO_strings();
const SSL_METHOD *meth;
SSL_CTX *ssl_ctx;
//**************************part of client************************
{
meth = SSLv23_client_method();
ssl_ctx = SSL_CTX_new(meth);
SSL_CTX_set_verify(ssl_ctx,SSL_VERIFY_PEER,NULL);
int rc1 = SSL_CTX_load_verify_locations(ssl_ctx, ".\demoCA\private\server_chain.pem",".\demoCA\private\");///
SSL_CTX_set_default_passwd_cb_userdata(ssl_ctx,"pw");
std::string cert_chain(".\demoCA\private\client_chain.pem");
std::string cert(".\demoCA\private\client_crt.pem");
std::string key(".\demoCA\private\client_key.pem");
int code = SSL_CTX_use_certificate_chain_file(ssl_ctx,cert_chain.c_str());
if (code != 1)
{
std::cout<<"error1n";
//throw TLSException("failed to read credentials.");
}
code = SSL_CTX_use_PrivateKey_file(ssl_ctx,key.c_str(),SSL_FILETYPE_PEM);
i f (code != 1)
{
std::cout<<"error2n";
//throw TLSException("failed to read credentials.");
}
if(!SSL_CTX_check_private_key(ssl_ctx))
{
std::cout<<"key wrong";
system("pause");
exit(0);
}
}
//*****************part of server****************************
{
meth = SSLv23_server_method();
ssl_ctx = SSL_CTX_new(meth);
SSL_CTX_set_verify(ssl_ctx,SSL_VERIFY_FAIL_IF_NO_PEER_CERT,NULL)
SSL_CTX_set_client_CA_list(ssl_ctx,SSL_load_client_CA_file(".\demoCA\private\client_chain.pem"));//
SSL_CTX_set_default_passwd_cb_userdata(ssl_ctx,"pw");
std::string cert_chain(".\demoCA\private\server_chain.pem");
std::string cert(".\demoCA\private\server_crt.pem");
std::string key(".\demoCA\private\server_key.pem");
int rc = SSL_CTX_use_certificate_file(ssl_ctx,cert.c_str(),SSL_FILETYPE_PEM);
if (rc!=1)
{
//throw TLSException("failed to read credentials.");
std::cout<<"error1n";
}
rc = SSL_CTX_use_PrivateKey_file(ssl_ctx,key.c_str(),SSL_FILETYPE_PEM);
if (rc!=1)
{
//throw TLSException("failed to read credentials.");
std::cout<<"error2n";
}
int rcode = SSL_CTX_check_private_key(ssl_ctx);
if(rcode!=1)
{
std::cout<<"key wrong";
system("pause");
//exit(0);
}
}
来自SSL_CTX_set_verify:的文档
SSL_VERIFY_FAIL_IF_NO_PEER_CERT-
服务器模式:如果客户端没有返回证书,TLS/SSL握手将立即终止;握手失败";警报此标志必须与SSL_VERIFY_PEER一起使用
您没有如文档中所述将其与SSL_VERIFY_PEER
一起使用,因此它没有任何效果。
相关文章:
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 如何在openssl-ecc中获取十六进制格式的私钥
- cmake在我的项目中所需的所有静态库都不成功
- 尽管测试成功,CppUnit测试核心仍被丢弃.为什么
- LINK 尝试使用 OpenSSL evp aes 256 c++ 时出错
- 如何让LLDB在成功时退出,在失败时等待
- 如何在OpenSSL中从configuration.h.in获取configuration.h
- 有没有办法知道Tracer是否成功地完全连接到了jaegerclientcpp中的jaeger后端服务器
- OpenSSL TLS服务器-使用客户端证书白名单
- 通过 Openssl 命令行加密,通过 c++ 解密
- 使用已使用 java 编码的 openssl 解码数据
- CMake WxWidgets项目成功地在Linux上构建,但没有在Windows上构建
- OpenSSL没有共享密码
- OpenSSL 解密功能无法正常工作
- 为什么 std::绑定错误参数可以成功?
- Clion显示错误,但可以使用Cmake成功构建代码
- OpenSSL BIO and SSL_read
- 代码使用向量成功运行,但使用数组显示错误
- OpenSSL编译在x86上失败,认为x86_64是成功的
- OpenSSL的相互身份验证总是成功的