Попытка понять, как пары ключей взаимной аутентификации и сертификаты работают в контексте gRP C - PullRequest
1 голос
/ 07 мая 2020

поэтому, прочитав бесчисленное количество статей о том, как и что создавать пары ключей, сертификаты, доверительные менеджеры, я невероятно запутался.

Это моя ситуация, у меня есть клиент:

SslContextBuilder builder = GrpcSslContexts.forClient();
// builder.trustManager(new File(trustCertCollectionFilePath)); //i've read this should be ignored for the client
builder.keyManager(new File(clientCertChainFilePath), new File(clientPrivateKeyFilePath));

и сервер:

SslContextBuilder sslClientContextBuilder = SslContextBuilder.forServer(new 
         File(certChainFilePath), new File(privateKeyFilePath));
sslClientContextBuilder.trustManager(new File(trustCertCollectionFilePath));
sslClientContextBuilder.clientAuth(ClientAuth.REQUIRE);

Я использую их из примера, найденного здесь: https://github.com/grpc/grpc-java/tree/master/examples/example-tls/src/main/java/io/grpc/examples/helloworldtls

Насколько я понял, это должно работают так:

Для клиента:

1. You have to generate a RSA key pair.
2. Generate a certificate.
3. Put the public key inside the certificate.

clientCertChainFilePath = certificate with public key inside
clientPrivateKeyFilePath = client private key

Для сервера:

1. You have to generate a trusted authority certificate(CA) with a server private key
2. Get the certificate from the client
3. Register the client certificate inside the trusted authority somehow.

certChainFilePath = certificate from the client with public key inside
privateKeyFilePath = private server key for the trust authority certificate(CA)
trustCertCollectionFilePath = trusted authority certificate(CA)

Пожалуйста, поправьте меня или скажите, как именно все это связывается с Сделайте эту работу, если у вас есть какие-либо c ссылки на то, как правильно сгенерировать все, это очень важно.

1 Ответ

0 голосов
/ 14 июля 2020

Клиент и сервер имеют свои собственные c publi и закрытые ключи. Это две отдельные пары частных ключей publi c.

На стороне сервера certChainFilePath - это сертификат сервера с ключом publi c внутри. privateKeyFilePath - закрытый ключ сервера.

Без взаимного TLS клиенту нужен только сертификат CA для проверки сертификата сервера, полученного во время рукопожатия.

При взаимном TLS клиенту предлагается отправить свой сертификат ( с клиентом publi c ключ внутри) на сервер.

...