Программы на C++. Форум разработчиков
Anonymous
Ошибка OpenSSL: Peer не вернул сертификат
Сообщение
Anonymous » 06 фев 2025, 17:08
Я использую интеграцию OpenSSL в своем существующем коде для достижения безопасности SSL. Мой код клиента в C ++ и находится в ОС Windows, а код первого конца, сервер, код находится на AIX. Приведенные ниже команды на AIX и созданный сертификат клиента и клавиша используются в Clent End, то есть Windows:
//команды для создания СА Authority
openssl genrsa -des3 -out keys/rootca_test.key 2048
openssl req -new -x509 -days 360 -Key keys/rootca_test.key -out сертификаты/rootca_test.crt
// Команды для создания сертификата сервера < /em> < /p>
< li> openssl genrsa -out keys/server_test.key 2048
openssl req -new -Key keys/server_test.key -out csr/server_test.csr
< LI> OPENSSL CA -DAYS 360 -IN CSR/SERVER_TEST.CSR -UOUT SERTITICATS/SERVER_TEST.CRT -KEYFILE KEYS/ROOTCA_TEST.KEY -CERT СЕРТИТАТЫ/ROOTCA_TEST.CRT
// Команды для создания сертификата клиента < /em> < /p>
openssl genrsa -out keys/client_test.key 2048
openssl req -new keys/client_test.key -out csr/client_test.csr < /p>
openssl ca -days 360 -in csr/client_test.csr -ut
после интеграции кода выглядит так:
Client Code - в Windows < /strong> < /p>
#include "stdafx.h"
#include
#include
#include // SSL and SSL_CTX for SSL connections
#include // Error reporting
SOCKET s;
SSL_CTX *ctx;
SSL *ssl;
int OpenConnection(const char *hostname, int port)
{ int sd;
struct hostent *host;
struct sockaddr_in addr;
if ( (host = gethostbyname(hostname)) == NULL )
{
perror(hostname);
abort();
}
sd = socket(AF_INET, SOCK_STREAM,IPPROTO_TCP);
memset(&addr,0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
addr.sin_addr.s_addr = *(long*)(host->h_addr);
if ( connect(sd, (struct sockaddr*)&addr, sizeof(addr)) != 0 )
{
close(sd);
perror(hostname);
abort();
}
return sd;
}
BOOL InitOpenSSL()//OPENSSL
{
//set default locations for trusted CA certificates
CString sslCrtFilePath = "C:\\Program Files\\cv\\certificates\\client_test.crt";
CString sslKeyFilePath = "C:\\Program Files\\cv\\certificates\\client_test.key";
CString sslRootFilePath = "C:\\Program Files\\cv\\certificates\\RootCA_test.crt";
int server;
char buf[1024];
int bytes;
char hostname[]="20.17.127.235";
int portnum = 4005;
SSL_library_init();
SSL_METHOD *method;
OpenSSL_add_all_algorithms(); /* Load cryptos, et.al. */
SSL_load_error_strings(); /* Bring in and register error messages */
method = SSLv23_client_method();//SSLv23_method(); /* Create new client-method instance */
ctx = SSL_CTX_new(method); /* Create new context */
if ( ctx == NULL )
{
abort();
}
if (!(LoadCertificates(sslRootFilePath.GetBuffer(sslRootFilePath.GetLength()),sslCrtFilePath.GetBuffer(sslCrtFilePath.GetLength()), sslKeyFilePath.GetBuffer(sslKeyFilePath.GetLength()))))
{
s = INVALID_SOCKET;
cout
Подробнее здесь: https://stackoverflow.com/questions/336 ... ertificate
1738850910
Anonymous
Я использую интеграцию OpenSSL в своем существующем коде для достижения безопасности SSL. Мой код клиента в C ++ и находится в ОС Windows, а код первого конца, сервер, код находится на AIX. Приведенные ниже команды на AIX и созданный сертификат клиента и клавиша используются в Clent End, то есть Windows: //команды для создания СА Authority [list] [*] openssl genrsa -des3 -out keys/rootca_test.key 2048 [*] openssl req -new -x509 -days 360 -Key keys/rootca_test.key -out сертификаты/rootca_test.crt [/list] // Команды для создания сертификата сервера < /em> < /p> [list] < li> openssl genrsa -out keys/server_test.key 2048 [*] openssl req -new -Key keys/server_test.key -out csr/server_test.csr < LI> OPENSSL CA -DAYS 360 -IN CSR/SERVER_TEST.CSR -UOUT SERTITICATS/SERVER_TEST.CRT -KEYFILE KEYS/ROOTCA_TEST.KEY -CERT СЕРТИТАТЫ/ROOTCA_TEST.CRT [/list] // Команды для создания сертификата клиента < /em> < /p> [list] [*] openssl genrsa -out keys/client_test.key 2048 [*] openssl req -new keys/client_test.key -out csr/client_test.csr < /p> [*] openssl ca -days 360 -in csr/client_test.csr -ut [/list] [b] после интеграции кода выглядит так: [/b] [b] Client Code - в Windows < /strong> < /p> #include "stdafx.h" #include #include #include // SSL and SSL_CTX for SSL connections #include // Error reporting SOCKET s; SSL_CTX *ctx; SSL *ssl; int OpenConnection(const char *hostname, int port) { int sd; struct hostent *host; struct sockaddr_in addr; if ( (host = gethostbyname(hostname)) == NULL ) { perror(hostname); abort(); } sd = socket(AF_INET, SOCK_STREAM,IPPROTO_TCP); memset(&addr,0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(port); addr.sin_addr.s_addr = *(long*)(host->h_addr); if ( connect(sd, (struct sockaddr*)&addr, sizeof(addr)) != 0 ) { close(sd); perror(hostname); abort(); } return sd; } BOOL InitOpenSSL()//OPENSSL { //set default locations for trusted CA certificates CString sslCrtFilePath = "C:\\Program Files\\cv\\certificates\\client_test.crt"; CString sslKeyFilePath = "C:\\Program Files\\cv\\certificates\\client_test.key"; CString sslRootFilePath = "C:\\Program Files\\cv\\certificates\\RootCA_test.crt"; int server; char buf[1024]; int bytes; char hostname[]="20.17.127.235"; int portnum = 4005; SSL_library_init(); SSL_METHOD *method; OpenSSL_add_all_algorithms(); /* Load cryptos, et.al. */ SSL_load_error_strings(); /* Bring in and register error messages */ method = SSLv23_client_method();//SSLv23_method(); /* Create new client-method instance */ ctx = SSL_CTX_new(method); /* Create new context */ if ( ctx == NULL ) { abort(); } if (!(LoadCertificates(sslRootFilePath.GetBuffer(sslRootFilePath.GetLength()),sslCrtFilePath.GetBuffer(sslCrtFilePath.GetLength()), sslKeyFilePath.GetBuffer(sslKeyFilePath.GetLength())))) { s = INVALID_SOCKET; cout Подробнее здесь: [url]https://stackoverflow.com/questions/33608788/openssl-error-peer-did-not-return-a-certificate[/url]