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


17

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
    

답변:


3

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

keytool -genkeypair

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

왜 openssl을 사용하고 있습니까?

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


편집 내용이 피어 검토 될 때까지 : 플래그는 -genkeypair이며 인증서를 사용자 정의하기 위해 많은 다른 플래그를 추가 할 수 있습니다 (예 : -validity 365 또는 -dname "cn = Mark Jones, ou = JavaSoft, o = Sun, c = US "). 자세한 내용은 답변의 링크를 참조하십시오.
Johannes Stadler

1
@JohannesStadler 감사합니다. 편집을 승인하고 최신 Java 버전에 대한 링크를 업데이트했습니다. "이 명령의 이름은 이전 릴리스에서 -genkey"
였습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.