有一个使用 openssl 的简单服务器和客户端。应用程序是用C++编写的,使用我自己构建的openssl-1.1.0g源代码。我提供客户端和服务器证书以及私钥的简单情况运行良好。握手很好,数据传输也很好。现在我还有两个要求:
需要在服务器上禁用客户端身份验证。客户端将拥有 CA 证书但没有私钥。客户端将进行服务器身份验证。
不知道如何告诉 openssl api 不要要求客户端证书
[更新] 这是固定的。在 conf 文件中,在客户端部分下尝试使用关键字 VerifyCAFile 作为 CA 证书并删除了私钥。在没有任何代码更改的情况下握手成功。
禁用客户端和服务器身份验证。双方都没有证书或私钥。
尝试使用 conf 文件中未指定证书或 key 的匿名部分。还要在 conf 文件的这一部分中将密码字符串设置为 aNULL。 aNULL 是根据此处页面的所有匿名密码的列表:
https://www.openssl.org/docs/man1.1.0/apps/ciphers.html
但这行不通。
这是设置-
服务器:
SSL_CTX_new(TLS_server_method()) - create server ctx
CONF_modules_load_file - load conf file
SSL_CTX_config - get section for server
BIO_new_socket((int)socket, BIO_CLOSE) - create socket BIO
SSL_new(ctx) - create ssl
SSL_set_bio - set bio in ssl
SSL_set_accept_state(_ssl); - set accept for server
SSL_do_handshake - do handshake
客户:
SSL_CTX_new(TLS_client_method()) - create server ctx
CONF_modules_load_file - load conf file
SSL_CTX_config - get section for client
BIO_new_socket((int)socket, BIO_CLOSE) - create socket BIO
SSL_new(ctx) - create ssl
SSL_set_bio - set bio in ssl
SSL_set_connect_state(ssl) - set connect for client
SSL_do_handshake - do handshake
配置文件:
testApp = test_sect
[test_sect]
# list of configuration modules
ssl_conf = ssl_sect
[ssl_sect]
server = server_section
client = client_section
anon = anon_section
[server_section]
CipherString = DEFAULT
Certificate = <path to server.cer>
PrivateKey = <path to server.key>
[client_section]
CipherString = DEFAULT
Certificate = <path to client.cer>
PrivateKey = <path to client.key>
[anon_section]
CipherString = aNULL
最佳答案
在服务器上,你想要这样的东西:
SSL_set_verify(ssl, SSL_VERIFY_NONE, NULL);
不过,我认为这是默认设置。
关于c++ - openssl api禁用身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49307757/