기존에 만들었던 Springboot 프로젝트에 SSL/HTTPS를 적용하겠습니다.  

 

1. SSL certificate 만들기 ( cmd 창을 관리자 권한으로 실행해야 합니다.)

  • java의 jdk가 있는 곳으로 이동합니다. 
where java // 명령어를 입력하면 java의 디렉터리 위치가 나옵니다.

3번째 디렉터리로 이동합니다.
keytool -genkey -alias bootsecurity -storetype PKCS12 -keyalg RSA \
-keysize 2048 -keystore bootsecurity.p12 -validity 365
  • 아래와 같이 값을 입력하고, 실행하시면 됩니다.

  • java 디렉터리에서도 파일이 생성된 것을 확인할 수 있습니다.

  • resources 밑에 위치합니다.

실제 운영할 서버라면 git에 올리지 않고, 배포할 인스턴스 내에서 외부 환경 설정을 해줘야 합니다. 하지만 개념을 익히기 위한 것이므로 파일을 올리겠습니다.
  • application.yml을 수정합니다.
server:
  port: 443
  ssl:
    enabled: true
    key-store: src/main/resources/bootsecurity.p12
    key-store-password: [password]  #keystore을 실행할 때 입력한 password
    key-store-type: PKCS12
    key-alias: bootsecurity

2. Bean 등록

@Bean
public ServletWebServerFactory serverFactory(){
    TomcatServletWebServerFactory tomcatServlet = new TomcatServletWebServerFactory(){
        @Override
        protected void postProcessContext(Context context) {
            SecurityConstraint securityConstraint = new SecurityConstraint();
            securityConstraint.setUserConstraint("CONFIDENTIAL");
            SecurityCollection collection = new SecurityCollection();
            collection.addPattern("/*");
            securityConstraint.addCollection(collection);
            context.addConstraint(securityConstraint);
        }
    };
    
    tomcatServlet.addAdditionalTomcatConnectors(httpConnector());
    
    return tomcatServlet;
}
  • ServletWebServerFactory를 Bean으로 등록해서 SSL Traffic을 열어줍니다. 
  • addPattern을 통해서 어디에 적용할지 정합니다. "/*"이므로 모든 url에 적용합니다.
private Connector httpConnector(){
    Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
    connector.setScheme("http");
    connector.setPort(8080);
    connector.setSecure(false);
    connector.setRedirectPort(443);
    return connector;
}
  • ServletWebServerFactory가 사용할 Connector입니다.
  • http and port=8080일 때 443으로 redirect를 해주는 설정입니다.

 

 

3. Https 확인하기

  • localhost:8080으로 접속합니다. 

https로 redirect된 것을 확인할 수 있습니다. 주의 요함이 뜨는 이유는 정식으로 만든 SSL이 아닌 저희가 임의로 만든 SSL이기 때문입니다. 

지금까지 SSL/HTTPS를 적용하는 것을 알아봤습니다. 감사합니다. 

모든 코드는 아래 링크에서 확인 가능합니다.

https://github.com/rlaehdals/secuitybasic

 

GitHub - rlaehdals/secuitybasic

Contribute to rlaehdals/secuitybasic development by creating an account on GitHub.

github.com