자체 서명된 인증서를 사용하여 키 저장소와 신뢰 저장소를 만드는 방법은 무엇입니까?

자체 서명된 인증서를 사용하여 키 저장소와 신뢰 저장소를 만드는 방법은 무엇입니까?

JAVA 서버와 클라이언트는 SSL을 사용하여 네트워크를 통해 통신합니다. 서버와 클라이언트는 인증서를 사용하여 서로를 인증합니다. 서버와 클라이언트가 사용하는 키 저장소 유형은 JKS입니다. 서버와 클라이언트는 해당 키 저장소 및 신뢰 저장소 파일을 로드합니다. 키 저장소 및 신뢰 저장소 파일 이름은 server.keystore, server.truststore, client.keystore 및 client.truststore입니다. 테스트용으로 자체 서명된 인증서를 사용하고 있습니다.

질문:

Q1. 6단계에서 서버와 클라이언트의 자체 인증서를 각각의 신뢰 저장소에 추가해야 하는 이유를 알고 싶습니다.

Q2. 동일한 목표를 달성하기 위해 단계 수를 줄일 수 있나요? 그렇다면 어떻게?

서버에 대한 RSA 키, 자체 서명 인증서, 키 저장소 및 신뢰 저장소를 생성하려면

  1. RSA 개인 키 생성

    openssl genrsa -out diagserverCA.key 2048
    
  2. x509 인증서 만들기

    openssl req -x509 -new -nodes -key diagserverCA.key \
                -sha256 -days 1024 -out diagserverCA.pem
    
  3. 개인 키와 공개 인증서에서 PKCS12 키 저장소를 만듭니다.

    openssl pkcs12 -export -name server-cert \
                   -in diagserverCA.pem -inkey diagserverCA.key \
                   -out serverkeystore.p12
    
  4. PKCS12 키 저장소를 JKS 키 저장소로 변환

    keytool -importkeystore -destkeystore server.keystore \
            -srckeystore serverkeystore.p12 -srcstoretype pkcs12 
            -alias server-cert
    
  5. 클라이언트의 인증서를 서버의 신뢰 저장소로 가져옵니다.

    keytool -import -alias client-cert \
            -file diagclientCA.pem -keystore server.truststore
    
  6. 서버의 인증서를 서버의 신뢰 저장소로 가져옵니다.

    keytool -import -alias server-cert \
            -file diagserverCA.pem -keystore server.truststore
    

클라이언트용 RSA 개인 키, 자체 서명 인증서, 키 저장소 및 신뢰 저장소를 생성하는 단계

  1. 개인 키 생성

    openssl genrsa -out diagclientCA.key 2048
    
  2. x509 인증서 만들기

    openssl req -x509 -new -nodes -key diagclientCA.key \
                -sha256 -days 1024 -out diagclientCA.pem
    
  3. 개인 키와 공개 인증서에서 PKCS12 키 저장소를 만듭니다.

    openssl pkcs12 -export -name client-cert \
                   -in diagclientCA.pem -inkey diagclientCA.key \
                   -out clientkeystore.p12
    
  4. PKCS12 키 저장소를 JKS 키 저장소로 변환

    keytool -importkeystore -destkeystore client.keystore \
            -srckeystore clientkeystore.p12 -srcstoretype pkcs12 \
            -alias client-cert
    
  5. 서버의 인증서를 클라이언트의 신뢰 저장소로 가져옵니다.

    keytool -import -alias server-cert -file diagserverCA.pem \
            -keystore client.truststore
    
  6. 클라이언트의 인증서를 클라이언트의 신뢰 저장소로 가져옵니다.

    keytool -import -alias client-cert -file diagclientCA.pem \
            -keystore client.truststore
    

답변1

일반 https에는 1개의 명령만 필요합니다.

keytool -genkeypair

클라이언트가 인증서를 맹목적으로 신뢰하지 않는 경우 서버 공용 인증서를 클라이언트에 복사해야 합니다.

왜 openssl을 사용하고 있나요?

https://docs.oracle.com/javase/10/tools/keytool.htm

관련 정보