https호출(server certificate) 와 인증을 위한 client certificate 가 같이 사용중인 경우에 고려한다.
일반적인 https 인증이라고 보면 된다. 사설 인증서의 경우, 인증 자체를 무력화 하거나 default keystore
에 인증서를 등록하도록 한다.
TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
}
단, 위 코드로 전체 인증서를 무력화시켜 버리면 아래 client certificate 도 동작 안함.
keytool -importcert -keystore ${JAVA_HOME}/lib/security/cacerts -file test.crt -alias "ats1" -storepass changeit
공인된 Root CA가 아닌 사설 발급 인증서라면 전부 등록한다.
관련파일: client.crt , signing-ca.crt, client.key (/w 암호)
통합 인증서 파일인 JKS를 자바 keystore 에 등록한다.
# pem 을 pfx 로 변환
cat client.crt signing-ca.crt > cert.pem
openssl pkcs12 -export -name test -in cert.pem -inkey client.key -out cert.pfx
# pfx 를 jks 로 변환
keytool -importkeystore -srckeystore cert.pfx -srcstoretype pkcs12 -destkeystore cert.jks -deststoretype jks
# java property 로 keystore 전달
java -Djavax.net.ssl.keyStore=cert.jks -Djavax.net.ssl.keyStorePassword=changeit -Djavax.net.ssl.keyStoreType=JKS Example
openssl s_client -showcerts -connect www.example.com:443 </dev/null