애플리케이션에 요청을 보낼 때 SSL 인증서가 표시되지 않음

애플리케이션에 요청을 보낼 때 SSL 인증서가 표시되지 않음

2개의 인증서 체인이 설치된 Java 키 저장소가 있습니다. CSR은 CA에 의해 생성 및 서명되며, 해당 CA가 포함된 인증서가 설치됩니다. 그런데 포트에서 애플리케이션에 요청을 보내면 하나의 인증서만 표시되는데, 선호하는 인증서를 기반으로 인증할 수 있도록 키 저장소의 두 인증서가 모두 표시되기를 원합니다.

도움이 필요해요

답변1

내레이터: CA는 CSR에 서명하지 않습니다.부분적으로CSR을 기반으로 하지만 부분적으로는 그렇지 않습니다(두 부분 모두 중요함).

당신은 '라고 말해요CSR 생성". CSR(키용)을 생성하고 해당 CSR에 대한 두 개의 인증서(각각 체인 포함)를 획득하고 두 인증서 체인을 저장소 개인 키 항목 중 하나에 설치하면 두 번째 인증서 체인이 대체됩니다. 첫 번째 인증서 체인이 필요하며 저장소에는 두 번째 인증서만 필요합니다.

두 개의 개인 키와 두 개의 CSR(각 키당 하나씩)을 생성하고 각 CSR에 대해 인증서 체인이 있고 이를 해당 개인 키에 설치했다고 가정합니다. 따라서 실제로 인증서 체인의 개인 키와 둘 다 보고 싶어. 의심스러우면 keytool -list [-v]확인해 보세요.

SSL(현재 TLS) 프로토콜은 이 작업을 수행하지 않습니다.;서버는 단순히 "엔티티"(서버) 인증서와 해당 체인 인증서(있는 경우)를 보내고 단일 핸드셰이크에서 해당 개인 키를 증명합니다.

가능한두 가지 요청을 수행할 수 있으며 각 요청은 다음을 얻습니다.하나원하는 인증서 체인:

  • 인증서의 주체/SAN 이름이 다르고 클라이언트가 SNI 확장을 사용하는 경우(최근 브라우저에서는 이를 수행하지만 다른 소프트웨어는 그럴 수도 있고 그렇지 않을 수도 있음) Java 8 서버는 SNI와 일치하는 인증서를 선호합니다. 대부분의 클라이언트(OpenSSL은 아님!)는 항상 SNI를 연결하는 호스트 이름과 동일하게 만들기 때문에 여러 호스트 이름이 동일한 서버를 가리키도록 이름 확인을 (일시적으로?) 변경해야 할 수도 있습니다(예: 파일 사용 hosts또는 바인딩 해제). 비슷한 문서.

  • 인증서가 다른 키 유형(RSA, DSA, EC)에 대한 것이고 클라이언트가 하나의 키 유형을 사용하는 암호 제품군만 제공하는 경우 Java 서버는 해당 키 유형에 대한 인증서를 사용합니다. 일부 클라이언트에서는 제공된 암호 제품군을 쉽게 제어할 수 있지만 일부 클라이언트에서는 그렇지 않습니다.

  • 마찬가지로, 인증서 체인이 서로 다른(여러 세트의) 서명 알고리즘을 사용하고 클라이언트가 SignatureAlgorithms 확장을 사용하여 TLS1.2를 구현하는 경우 Java 7+ 서버는 SigAlgs를 충족하는 인증서 체인을 선호합니다. 그러나 SigAlgs를 쉽게 선택할 수 있는 클라이언트는 없으며 CA는 발급한 인증서 체인에서 사용할 서명 알고리즘에 대한 선택권을 거의 제공하지 않습니다.

관련 정보