SSL 인증(Client Certificate)

NOLEM·2020년 7월 22일
0

보안

목록 보기
1/1

https호출(server certificate) 와 인증을 위한 client certificate 가 같이 사용중인 경우에 고려한다.

Server Certificate

일반적인 https 인증이라고 보면 된다. 사설 인증서의 경우, 인증 자체를 무력화 하거나 default keystore 에 인증서를 등록하도록 한다.

  1. 인증서 무력화
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 도 동작 안함.

  1. keystore 등록
keytool -importcert -keystore ${JAVA_HOME}/lib/security/cacerts  -file test.crt -alias "ats1" -storepass changeit

공인된 Root CA가 아닌 사설 발급 인증서라면 전부 등록한다.

Client Certificate

관련파일: 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

참고자료

0개의 댓글