OpenSSL Игнорируют Самоподписанную ошибку сертификата

Я пишу небольшую программу с библиотекой OpenSSL, которая является, предполагают для установления соединения с сервером SSLv3. Этот сервер распределяет самоподписанный сертификат, который заставляет квитирование перестать работать с этим сообщением: "sslv3 предупреждают отказ квитирования, сам подписанный сертификат в цепочке сертификата".

Существует ли способ, которым я могу вынудить соединение продолжиться? Я попытался назвать SSL_CTX_set_verify как так:

SSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, NULL);

Но это, кажется, ничего не изменяет.

Какие-либо предложения?

12
задан Ramsey 13 February 2010 в 08:29
поделиться

5 ответов

Вы пытались предоставить своему приложению сертификат CA сервера, чтобы ваше приложение могло проверить цепочку сертификатов?

2
ответ дан 2 December 2019 в 22:51
поделиться

Вы пробовали установить SSL_set_verify?

SSL_set_verify(s, SSL_VERIFY_NONE, NULL);
0
ответ дан 2 December 2019 в 22:51
поделиться

Вы можете попробовать передать собственный обратный вызов в SSL_set_verify () , а затем выполнить собственную проверку. Это далеко не идеально, поскольку я думаю, вам нужно будет выполнить всю проверку, а затем разрешить игнорировать самоподписанную ошибку, но вы должны иметь возможность выяснить, что делает стандартный код проверки из источника OpenSSL, а затем просто вытащить его. в свой обратный вызов проверки и разрешите конкретный код ошибки ...

0
ответ дан 2 December 2019 в 22:51
поделиться

Проверьте эти примеры OpenSSL: http://www.rtfm.com/openssl-examples/

wclient.c подключается к любой странице https, например:

wclient -h www.yahoo.com -p 443

Если вы запустите это с установкой по умолчанию, вы получите ошибку сертификата (вы можете использовать флаг -i, чтобы обойти проверку сертификата).

Чтобы проверить сертификат, вам нужно загрузить сертификаты CA (Verisign, Thawte, Equifax и т.д.), поэтому найдите в Google этот файл cacert.pem, загрузите и переименуйте его в root.pem, и вы сможете подключиться к веб-серверу и проверить его сертификат.

2
ответ дан 2 December 2019 в 22:51
поделиться

Мой пример кода клиента ( ссылка ) отлично работает с самозаверяющим сертификатом сервера. У меня есть приведенный ниже код после SSL_connect, и я полностью контролирую приемлемость самоподписанных сертификатов в моем клиенте

SSL_CTX* ctx = SSL_CTX_new(SSLv3_method());

// TCP connection and SSL handshake ...

/* Check the certificate */

rc = SSL_get_verify_result(ssl);
if(rc != X509_V_OK) {
  if (rc == X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT || rc == X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN) {
    fprintf(stderr, "self signed certificate\n");
  }
  else {
    fprintf(stderr, "Certificate verification error: %ld\n", SSL_get_verify_result(ssl));
    SSL_CTX_free(ctx);
    return 0;
  }
}
0
ответ дан 2 December 2019 в 22:51
поделиться