c++ - 如何使用 c++ 客户端/服务器在 openssl 中与 gsoap 一起使用 ssl 证书

标签 c++ openssl certificate ssl-certificate gsoap

我在 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/

相关文章:

Apache 证书身份验证不工作

amazon-web-services - 如何在负载均衡器中生成 ListenerCertificate CertificateArn

c++ - 没有 .h 的 header 的 Visual Studio 智能感知

linux - 在 Linode 服务器上升级 openssl 但如何确定 'ENGINESDIR'

c++ - 为什么内存泄漏只显示三个内存地址?

ssl - 创建 CSR 时出错

python - 如何使用python将PEM转换为P7B

ios - XCode key 链续订我的证书

c++ - 项目引用上的 QT 访问冲突

c++ - 使用迭代器删除 vector 中的元素