상호 인증을 사용하는 HTTPS

기존 Tomcat 서버를 보호하고 싶거나 Spring Boot를 사용하지 않는 경우 최신 구성 정보가 상당히 부족합니다. 특히 Tomcat 10이 출시되면서 모든 기존 예제가 무효화되었기 때문입니다(예, 이미 발생했습니다).


그래서 보안 초보자(나도 마찬가지)도 이해할 수 있는 미래 보장형 SSL 구성이 필요했기 때문에 다음과 같이 생각해 냈습니다.

<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol" scheme="https" secure="true" maxThreads="150" SSLEnabled="true" defaultSSLHostConfigName="localhost">
    <SSLHostConfig hostName="localhost" truststoreFile="server-truststore.jks" protocols="all" truststorePassword="changeit" certificateVerification="required">
        <Certificate certificateKeystoreFile="server-keys.p12" certificateKeystoreType="PKCS12" certificateKeystorePassword="changeit" certificateKeyAlias="server" type="RSA"/>
    </SSLHostConfig>
</Connector>


  • SSL 연결
    HTTPS로 연결하여 웹 서버에 연결하는 브라우저가 주소 표시줄에 신뢰할 수 있는 자물쇠 아이콘을 표시하기를 원하십니까? 이는 실제로 SSL 또는 TLS를 통한 HTTP가 필요함을 의미합니다.
    이를 위해 서버는 자신을 식별하는 적절한 인증서를 브라우저에 보냅니다. 이 서버 인증서는 서버가 소유한 키를 저장하기 때문에 이와 같이 이름이 지정된 키 저장소에 저장됩니다. 요소는 이 키 저장소의 위치, 해당 유형(기본 JKS, PKCS12일 수 있음), 내부 항목 및 여는 방법에 대한 정보를 설명합니다.
    물론 서버에서 보낸 인증서는 클라이언트가 신뢰하는 CA에서 서명해야 합니다. 그렇지 않으면 "자체 서명된 인증서"라는 큰 경고와 함께 SSL을 받게 됩니다. 서버.
  • 클라이언트 인증
    특정 브라우저만 웹 서버에 연결할 수 있기를 원하십니까? 매우 일반적인 요구 사항은 아니며 브라우저 연결에는 매우 이례적입니다. 그러나 HTTPS로 REST API 서버를 구축하고 이 API에 대한 액세스를 제한해야 하는 경우 더 필요합니다.
    이를 위해 서버는 클라이언트를 신뢰해야 하며 클라이언트는 인증서로 자신을 식별해야 합니다. 서버가 신뢰하는 인증서는 SSLHostConfig 요소에 구성된 신뢰 저장소에 저장됩니다. 또한 certificateVerification을 지정하여 이 클라이언트 인증을 강제로 수행해야 합니다.

  • 물론 모든 인증서를 하나의 저장소에 저장하고 위의 두 가지 용도로 사용할 수 있지만 역할에 따라 분할하는 것이 항상 설명하기 쉽습니다. 대부분의 경우 이러한 모든 인증서는 어쨌든 x509 인증서이므로 "x509 상호 인증"이라는 일반적인 토론 주제이기도 합니다.

    두 가지 참고 사항:
  • 테스트상의 이유로 자체 인증서를 만들기로 결정한 경우 자신에게 유리한 방향으로 Keytool, 즉 서버에서 사용 중인 Java 버전의 도구만 사용하십시오. 다른 Keytool 버전 ​​또는 OpenSSL과 혼합하지 마십시오.
  • 위의 모든 작업을 수행하려면 클라이언트 인증을 지원하는 Tomcat용 APR 라이브러리가 필요합니다. Http11AprProtocol…
  • 의 사용법도 참조하십시오.

    유용한 링크:
    https://tomcat.apache.org/tomcat-8.5-doc/config/http.html
    https://tomcat.apache.org/tomcat-8.5-doc/ssl-howto.html
    https://docs.spring.io/spring-security/site/docs/4.0.x/reference/html/x509.html
    https://www.baeldung.com/java-https-client-certificate-authentication
    https://medium.com/ing-tech-romania/a-simple-mtls-guide-for-spring-boot-microservices-c6bfc9878369

    좋은 웹페이지 즐겨찾기