JAVA 서버와 클라이언트는 SSL을 사용하여 네트워크를 통해 통신합니다. 서버와 클라이언트는 인증서를 사용하여 서로를 인증합니다. 서버와 클라이언트가 사용하는 키 저장소 유형은 JKS입니다. 서버와 클라이언트는 해당 키 저장소 및 신뢰 저장소 파일을 로드합니다. 키 저장소 및 신뢰 저장소 파일 이름은 server.keystore, server.truststore, client.keystore 및 client.truststore입니다. 테스트용으로 자체 서명된 인증서를 사용하고 있습니다.
질문:
Q1. 6단계에서 서버와 클라이언트의 자체 인증서를 각각의 신뢰 저장소에 추가해야 하는 이유를 알고 싶습니다.
Q2. 동일한 목표를 달성하기 위해 단계 수를 줄일 수 있나요? 그렇다면 어떻게?
서버에 대한 RSA 키, 자체 서명 인증서, 키 저장소 및 신뢰 저장소를 생성하려면
RSA 개인 키 생성
openssl genrsa -out diagserverCA.key 2048
x509 인증서 만들기
openssl req -x509 -new -nodes -key diagserverCA.key \ -sha256 -days 1024 -out diagserverCA.pem
개인 키와 공개 인증서에서 PKCS12 키 저장소를 만듭니다.
openssl pkcs12 -export -name server-cert \ -in diagserverCA.pem -inkey diagserverCA.key \ -out serverkeystore.p12
PKCS12 키 저장소를 JKS 키 저장소로 변환
keytool -importkeystore -destkeystore server.keystore \ -srckeystore serverkeystore.p12 -srcstoretype pkcs12 -alias server-cert
클라이언트의 인증서를 서버의 신뢰 저장소로 가져옵니다.
keytool -import -alias client-cert \ -file diagclientCA.pem -keystore server.truststore
서버의 인증서를 서버의 신뢰 저장소로 가져옵니다.
keytool -import -alias server-cert \ -file diagserverCA.pem -keystore server.truststore
클라이언트용 RSA 개인 키, 자체 서명 인증서, 키 저장소 및 신뢰 저장소를 생성하는 단계
개인 키 생성
openssl genrsa -out diagclientCA.key 2048
x509 인증서 만들기
openssl req -x509 -new -nodes -key diagclientCA.key \ -sha256 -days 1024 -out diagclientCA.pem
개인 키와 공개 인증서에서 PKCS12 키 저장소를 만듭니다.
openssl pkcs12 -export -name client-cert \ -in diagclientCA.pem -inkey diagclientCA.key \ -out clientkeystore.p12
PKCS12 키 저장소를 JKS 키 저장소로 변환
keytool -importkeystore -destkeystore client.keystore \ -srckeystore clientkeystore.p12 -srcstoretype pkcs12 \ -alias client-cert
서버의 인증서를 클라이언트의 신뢰 저장소로 가져옵니다.
keytool -import -alias server-cert -file diagserverCA.pem \ -keystore client.truststore
클라이언트의 인증서를 클라이언트의 신뢰 저장소로 가져옵니다.
keytool -import -alias client-cert -file diagclientCA.pem \ -keystore client.truststore
답변1
일반 https에는 1개의 명령만 필요합니다.
keytool -genkeypair
클라이언트가 인증서를 맹목적으로 신뢰하지 않는 경우 서버 공용 인증서를 클라이언트에 복사해야 합니다.
왜 openssl을 사용하고 있나요?