Подключение клиента к grpc-серверу с поддержкой ssl. Ошибка Invalid padding
Создаю сервер:
grpc::ServerBuilder builder;
grpc::SslServerCredentialsOptions credential_options;
credential_options.pem_root_certs = read_file("ca.crt")
const std::string private_key = read_file("server.key");
const std::string cert_chain = read_file("server.crt");
credential_options.pem_key_cert_pairs.push_back({private_key, cert_chain});
auto channel_credentials = grpc::SslServerCredentials( credential_options );
builder.AddListeningPort(StateService::instance().ipAddress(), channel_credentials);
builder.RegisterService(grpcLocalService_.get());
server_ = builder.BuildAndStart();
Сервер запускается успешно. Клиент:
grpc::string target = std::string("localhost:") + std::to_string(port);
grpc::SslCredentialsOptions credential_options = grpc::SslCredentialsOptions();
credential_options.pem_root_certs = read_file("ca.crt");
auto channel_credentials = grpc::SslCredentials(credential_options);
std::shared_ptr<grpc::Channel> channel = grpc::CreateChannel(target, channel_credentials);
_stub = RightsService::NewStub(channel);
В логах клиента получаю следующее
E0817 16:02:45.418716748 32243 ssl_transport_security.cc:1439] Handshake failed with fatal error SSL_ERROR_SSL: error:0407008A:rsa routines:RSA_padding_check_PKCS1_type_1:invalid padding.
Сертификаты и ключи создаю скриптом:
@echo off
set OPENSSL_CONF=c:\OpenSSL-Win64\bin\openssl.cfg
echo Generate CA key:
openssl genrsa -passout pass:1111 -des3 -out ca.key 4096
echo Generate CA certificate:
openssl req -passin pass:1111 -new -x509 -days 365 -key ca.key -out ca.crt -subj "/C=US/ST=CA/L=Cupertino/O=YourCompany/OU=YourApp/CN=MyRootCA"
echo Generate server key:
openssl genrsa -passout pass:1111 -des3 -out server.key 4096
echo Generate server signing request:
openssl req -passin pass:1111 -new -key server.key -out server.csr -subj "/C=US/ST=CA/L=Cupertino/O=YourCompany/OU=YourApp/CN=%COMPUTERNAME%"
echo Self-sign server certificate:
openssl x509 -req -passin pass:1111 -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt
echo Remove passphrase from server key:
openssl rsa -passin pass:1111 -in server.key -out server.key
echo Generate client key
openssl genrsa -passout pass:1111 -des3 -out client.key 4096
echo Generate client signing request:
openssl req -passin pass:1111 -new -key client.key -out client.csr -subj "/C=US/ST=CA/L=Cupertino/O=YourCompany/OU=YourApp/CN=%CLIENT-COMPUTERNAME%"
echo Self-sign client certificate:
openssl x509 -passin pass:1111 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt
echo Remove passphrase from client key:
openssl rsa -passin pass:1111 -in client.key -out client.key
Проверяю корневой сертификат и сертификат сервера:
openssl verify -CAfile ca.crt -purpose sslserver server.crt
Получаю
server.crt: OK
Версия grpc: 1.32.0-dev
Что означает эта ошибка - invalid padding и что я делаю не так?