Как заставить клиента C ++ доверять всем сертификатам X.509 без какой-либо проверки (как в Java) - PullRequest
0 голосов
/ 29 мая 2019

Что такое grpc C ++ эквивалент Java InsecureTrustManagerFactory?

GrpcSslContexts.forClient (). TrustManager (InsecureTrustManagerFactory.INSTANCE) .build ()

небезопасный TrustManagerFactory, который доверяет всем сертификатам X.509 без какой-либо проверки.

Другими словами - в Java я создаю сервер (private.key + certificate.pem, подписанный rootCA) и клиент, который создает зашифрованный SSL-канал, при котором сервер принимает сертификат сервера без проверки (rootCA.pem недоступен для клиент). Технически это не рекомендуется, но я использую его только для тестирования. Мне нужно сделать то же самое для моей C ++ версии пары сервер-клиент. Пока что моему клиенту на C ++ нужен rootCA.pem через SslCredentialsOptions:

    grpc::SslCredentialsOptions sslChannelOptions;
    sslChannelOptions.pem_root_certs  = "rootCA.pem";
    sslChannelOptions.pem_cert_chain  = "";
    sslChannelOptions.pem_private_key = "";
    return grpc::SslCredentials( sslChannelOptions );

или через

gpr_setenv ("GRPC_DEFAULT_SSL_ROOTS_FILE_PATH", "roots.pem")

В противном случае я получаю:

ssl_transport_security.c: 921] Сбой рукопожатия с фатальной ошибкой SSL_ERROR_SSL: ошибка: 0400006b: процедуры RSA: OPENSSL_internal: BLOCK_TYPE_IS_NOT_01.

1 Ответ

0 голосов
/ 30 мая 2019

К сожалению, gRPC C ++ не поддерживает эту функцию. В gRPC C ++ есть только опции, чтобы не проверять сертификат клиента, но не сертификат сервера.

Ваш вариант использования недостаточно силен для поддержки этой функции.

...