[java] 자바 SSL 및 인증서 키 저장소

Java 프로그램은 인증서를 포함하는 키 저장소가 어디에 있는지 어떻게 알 수 있습니까? 또는 Java 프로그램에 키 저장소를 찾을 위치를 알려주는 방법은 무엇입니까?

어떤 방법으로 키 저장소를 지정한 후 서버를 클라이언트로 인증하는 데 사용할 인증서를 지정하는 방법은 무엇입니까?



답변

System.setProperty("javax.net.ssl.trustStore", path_to_your_jks_file);


답변

SSL 특성은 시스템 특성을 통해 JVM 레벨에서 설정됩니다. 프로그램을 실행할 때 설정 (java -D ….)하거나 System.setProperty를 수행하여 코드에서 설정할 수 있음을 의미합니다.

설정해야 할 특정 키는 다음과 같습니다.

javax.net.ssl.keyStore- 애플리케이션 프로세스의 자체 인증서 및 개인 키를 포함하는 Java 키 저장소 파일의 위치 Windows에서 지정된 경로 이름은 백 슬래시 대신 슬래시 (/)를 사용해야합니다.

javax.net.ssl.keyStorePasswordjavax.net.ssl.keyStore에 의해 지정된 키 저장소 파일에서 개인 키에 액세스하기위한 비밀번호입니다. 이 비밀번호는 두 번 사용됩니다. 키 저장소 파일의 잠금을 해제하고 (저장소 암호) 키 저장소에 저장된 개인 키를 해독하려면 (키 암호).

javax.net.ssl.trustStore- 이 응용 프로그램 프로세스 (신뢰 저장소)가 신뢰하는 CA 인증서 콜렉션을 포함하는 Java 키 저장소 파일의 위치. Windows에서 지정된 경로 이름 /은 백 슬래시 대신 슬래시 ()를 사용해야합니다 \.

이 등록 정보를 사용하여 신뢰 저장소 위치를 지정하지 않으면 SunJSSE 구현은 다음 위치에서 키 저장소 파일을 순서대로 검색하고 사용합니다.

  1. $JAVA_HOME/lib/security/jssecacerts
  2. $JAVA_HOME/lib/security/cacerts

javax.net.ssl.trustStorePassword-로 지정된 키 저장소 파일 (저장소 비밀번호)을 잠금 해제하는 비밀번호
javax.net.ssl.trustStore입니다.

javax.net.ssl.trustStoreType- (선택 사항) Java 키 저장소 파일 형식의 경우이 특성 값은 jks (또는 JKS)입니다. 기본값은 이미 jks이므로 일반적으로이 특성을 지정하지 마십시오.

javax.net.debug -SSL / TLS 계층에 대한 로깅을 켜려면이 특성을 ssl로 설정하십시오.


답변

한마디 만주의하십시오. Java 9 이상에서 기존 JKS 키 저장소를 열려고하는 경우 값이 “JKS”인 다음 특성도 언급해야합니다.

javax.net.ssl.keyStoreType
javax.net.ssl.trustStoreType

java.security 파일에 규정 된 기본 키 저장소 유형이 Java 9부터 jks에서 pkcs12로 변경 되었기 때문입니다.


답변

우선, 두 종류의 키 저장소가 있습니다.

개인일반

응용 프로그램은 시작 또는 시스템 기본값에 표시된 것을 사용합니다.

JRE 또는 JDK가 실행 중이거나 개인 또는 “전역”폴더를 확인하는 경우 다른 폴더가됩니다.

그들은 너무 암호화

간단히 말해 경로는 다음과 같습니다.

$JAVA_HOME/lib/security/cacerts 당국에 대한 모든 CA를 가지고 있고 매우 중요한 “일반적인 것”을 위해.


답변

-D아래와 같이 속성을 사용하여 런타임에 경로를 언급 할 수도 있습니다

-Djavax.net.ssl.trustStore=/home/user/SSL/my-cacerts
-Djavax.net.ssl.keyStore=/home/user/SSL/server_keystore.jks

아파치 스파크 응용 프로그램에서 --conf옵션과 키를 사용하여 인증서 및 키 저장소의 경로를 제공하고 다음 과 extraJavaoptions같이 스파크 제출

--conf 'spark.driver.extraJavaOptions=
-Djavax.net.ssl.trustStore=/home/user/SSL/my-cacerts
-Djavax.net.ssl.keyStore=/home/user/SSL/server_keystore.jks' 


답변