gRPC sslcontext 구성
Sep 28 2020
gRPC를 처음 사용합니다. 내가하려는 것은 클라이언트에서 서버로 SSL gRPC 호출을 보내는 것입니다. 내 질문은 다음 코드의 'certFile'이 클라이언트 인증서 또는 서버 인증서입니까? 클라이언트 인증서 인 경우 서버 인증서를 내 신뢰 목록에 추가해야합니까? 아니면 호출하기 전에 클라이언트 인증서를 서버의 신뢰 목록에 추가해야합니까? 당신의 도움을 주셔서 감사합니다.
SslContext sslcontext = GrpcSslContexts.forClient()
.trustManager(caFile)
.keyManager(certFile, keyFile)
.build();
답변
1 EricAnderson Sep 28 2020 at 22:37
trustManager및 keyManager클라이언트 / 서버에서 상호있다; 클라이언트의 신뢰 관리자는 서버의 키 관리자를 신뢰해야하고 서버의 신뢰 관리자는 클라이언트의 키 관리자를 신뢰해야합니다 (클라이언트 인증서를 사용하는 경우). 클라이언트와 서버의 유일한 차이점은 서버에는 키 관리자가 있어야하고 클라이언트에는 신뢰 관리자가 있어야한다는 것입니다. 클라이언트에 대한 신뢰 관리자를 지정하지 않으면 기본값이 사용됩니다.
신뢰 관리자는 기본적으로 신뢰할 수있는 인증 기관입니다 (클라이언트 또는 서버와 무관). 키 관리자에는 해당 ID를 증명하기위한 ID 인증서와 개인 키가 포함되어 있습니다.
따라서 keyManager클라이언트 측은 클라이언트 인증서를위한 것입니다. trustManager해당 인증서를 신뢰하도록 서버 측 에서 구성해야 합니다. 인증서 자체를 포함하거나 클라이언트의 인증서에 서명 한 인증 기관을 포함합니다. 일반적으로 클라이언트의 신뢰 관리자를 기본값으로 둘 수 있습니다.
클라이언트는 서버가 요청하는 경우에만 인증서를 보냅니다. 따라서 서버를 OPTIONALly 또는 REQUIRE클라이언트 인증서 로 구성해야합니다 .
sslContextBuilder.clientAuth(ClientAuth.REQUIRE);