我在 Visual Studio C++ 下使用 gsoap 和 openssl,我在本地主机(端口 443)上创建了一个客户端和一个服务器。
使用(从客户端)该选项时,我有一个没有任何描述的非显式错误: soap_ssl_client_context(&soap, "SOAP_SSL_DEFAULT"...
但是如果我将它与选项一起使用:
soap_ssl_client_context(&soap, SOAP_SSL_DEFAULT | SOAP_SSL_SKIP_HOST_CHECK, ...
它工作正常(但我猜是不安全的)。
因此,我决定通过检查本地主机上的数据包(使用原始捕获)来检查错误是什么,我发现通信在终止握手后以加密警报 (21) 结束。
我想知道我需要做什么,才能让这个应用程序在本地主机上正常且安全地工作(用于测试目的)。
更多信息: 我已经批量生成了服务器端的 ssl 证书:
echo CREATE SERVER CA and CA CERT
echo Generate Private Key (passwd protected)
openssl genrsa -des3 -out .\private\CA_key.pem 2048
pause
echo Generate server CA
echo use your server name for the 'common name' field!
openssl req -out ca.pem -new -x509 -key .\private\CA_key.pem
pause
echo Create certificate signing request for CA pub Key
openssl req -new -key .\private\CA_key.pem -out CA_csr.pem
pause
echo Sign it
openssl req -in CA_csr.pem -out CA_crt.pem -key .\private\CA_key.pem -x509 -days 3020
pause
echo FOR C++ SERVER ONLY
type .\private\CA_key.pem CA_crt.pem > server.pem
pause
也适用于客户端:
echo CREATE PUB/PRIV key pair and cert for client
echo Generate key pair
openssl genrsa -des3 -out client_key.pem 2048
pause
echo Create CSR for client pub key
openssl req -new -key client_key.pem -out client_csr.pem
pause
echo User ca to sign the request (need serial file with '01')
echo make sure your openssl.cnf is correct (path and right CA certificate file)
openssl ca -in client_csr.pem -out client_crt.pem -config openssl.cfg -days 1825
pause
echo CLIENT SPECIFIC FORMATING (optional)
echo for C++ clients ONLY
type client_key.pem client_crt.pem > LCC.pem
我用过: CA_crt.pem 在soap_ssl_server_context 和soap_ssl_client_context 中作为“cacert 文件”。 LCC.pem 作为客户端 key ,server.pem 作为服务器 key 。
我不确定所有证书生成步骤是否正确,但它正在使用选项 (SOAP_SSL_DEFAULT | SOAP_SSL_SKIP_HOST_CHECK)。
您能帮我找出缺少什么才能使其仅与 SOAP_SSL_DEFAULT 一起使用吗?
谢谢
最佳答案
I am not sure if all certificate generation steps are correct but it is working with the option (SOAP_SSL_DEFAULT | SOAP_SSL_SKIP_HOST_CHECK).
如果证书与带有 SOAP_SSL_SKIP_HOST_CHECK 的 gSoap 配合使用,并且没有它就无法工作,则证书的 CommonName 不是主机名或 IP 地址。根据证书的用途,您可能不希望证书 CommonName 成为主机 IP/名称,因此使用 SOAP_SSL_SKIP_HOST_CHECK 就可以了。
如果您想退出使用 SOAP_SSL_SKIP_HOST_CHECK 标志,请重新生成证书以使 CommonName 成为主机名或 IP 地址。 (注意:您可能会与系统上安装的其他证书发生冲突 - 如果其中一个证书具有相同的 CommonName。)
关于c++ - 如何使用 c++ 客户端/服务器在 openssl 中与 gsoap 一起使用 ssl 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27719154/