如何在 OpenSSL 中使用 SSL 证书与 gsoap,使用 C++ 客户端/服务器



我在Visual Studio C++下使用gsoap和openssl,我在localhost(端口443)上创建了一个客户端和一个服务器。

使用(从客户端)该选项时,我有一个没有任何描述的非显式错误: soap_ssl_client_context(肥皂,"SOAP_SSL_DEFAULT"...

但是如果我将其与选项一起使用: soap_ssl_client_context(肥皂,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 .privateCA_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 .privateCA_key.pem
pause
echo Create certificate signing request for CA pub Key
openssl req -new -key .privateCA_key.pem -out CA_csr.pem
pause
echo Sign it
openssl req -in CA_csr.pem -out CA_crt.pem -key .privateCA_key.pem -x509 -days 3020
pause
echo FOR C++ SERVER ONLY
type .privateCA_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 file"。 LCC.pem 作为客户端密钥,server.pem 作为服务器密钥。

我不确定所有证书生成步骤是否正确,但它正在使用选项 (SOAP_SSL_DEFAULT |SOAP_SSL_SKIP_HOST_CHECK)。

你能帮我找出缺少什么才能让它只SOAP_SSL_DEFAULT工作吗?

谢谢

我不确定所有证书生成步骤是否正确,但它正在使用选项 (SOAP_SSL_DEFAULT |SOAP_SSL_SKIP_HOST_CHECK)。

如果证书适用于带SOAP_SSL_SKIP_HOST_CHECK的 gSoap,并且没有它就不起作用,则证书的公用名不是主机名或 IP 地址。根据证书的用途,您可能不希望证书 CommonName 成为主机 IP/名称,因此可以使用 SOAP_SSL_SKIP_HOST_CHECK。

如果要使用 SOAP_SSL_SKIP_HOST_CHECK 标志退出,请重新生成证书,使公用名成为主机名或 IP 地址。(注意:您可能会遇到与系统上安装的其他证书冲突 - 如果其中一个证书具有相同的公用名。

最新更新