簡體   English   中英

如何使用 c++ 客戶端/服務器在帶有 gsoap 的 openssl 中使用 ssl 證書

[英]how to use ssl certificates in openssl with gsoap, using a c++ client/server

我在 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 作為客戶端密鑰,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 一起工作,沒有它就不能工作,那么證書的 CommonName 不是主機名或 IP 地址。 根據證書的用途,您可能不希望證書 CommonName 成為主機 ip/名稱,因此使用 SOAP_SSL_SKIP_HOST_CHECK 就可以了。

如果您想使用 SOAP_SSL_SKIP_HOST_CHECK 標志退出,請重新生成您的證書,使 CommonName 成為主機名或 IP 地址。 (注意:您可能會與系統上安裝的其他證書發生沖突 - 如果其中一個證書具有相同的 CommonName。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM