소소한 일상과 잡다한 정보

IT/jsp

jsp : 왜 HTTP 대신 HTTPS가 꼭 필요할까? ( SSL 적용 방법 )

pandada 2025. 3. 18. 14:33
반응형

JSP 프로젝트에서 SSL 인증서를 적용하는 방법은 사용하는 서버 환경에 따라 다르지만, 일반적으로 Tomcat을 사용하는 경우가 많으므로 Apache Tomcat을 기준으로 SSL 적용 방법을 설명하겠음.


🔍 왜 HTTP 대신 HTTPS가 꼭 필요할까?

HTTP는 데이터를 암호화하지 않고 전송하는 반면, HTTPS는 SSL/TLS를 사용해 데이터를 암호화하여 보안성을 높임.
HTTPS를 사용해야 하는 주요 보안적인 이유를 정리해보려고 한다.


1. 데이터 암호화 (Encryption)

🔹 문제점 (HTTP)

  • HTTP는 모든 데이터가 평문(Plain Text)으로 전송됨.
  • 공격자는 네트워크를 감청하여 로그인 정보, 카드 정보, 민감한 데이터를 쉽게 가로챌 수 있음.

🔹 해결책 (HTTPS)

  • SSL/TLS 암호화를 통해 서버와 클라이언트 간 전송되는 데이터를 보호.
  • 해커가 데이터를 가로채더라도 암호화되어 있어 내용을 해독할 수 없음.

예제:

  • HTTP : username=admin&password=1234해커가 그대로 볼 수 있음!
  • HTTPS: dX...TG== (암호화됨)해커가 봐도 해독 불가!

2. 데이터 무결성 (Integrity)

🔹 문제점 (HTTP)

  • HTTP는 데이터를 보호하지 않으므로 중간에서 변조(MITM, 중간자 공격)가 가능함.
  • 공격자는 웹사이트 코드, 쿠키, 파일 등을 변조하여 악성 코드 삽입 가능.

🔹 해결책 (HTTPS)

  • HTTPS는 데이터가 전송되는 동안 변경되지 않도록 보호함.
  • SSL 인증서의 암호화 및 서명(Signature) 기능 덕분에 데이터가 원본 그대로 유지됨.

예제:

  • HTTP: 공격자가 index.html을 가로채고 악성 코드 추가 → 감염된 웹사이트 제공 가능.
  • HTTPS: 서명된 데이터는 변조 시 무효화되므로 변경 불가능!

3. 인증 및 신뢰성 (Authentication)

🔹 문제점 (HTTP)

  • HTTP는 웹사이트의 진짜 신원을 보장하지 않음.
  • 사용자는 가짜 웹사이트(피싱 사이트)에 속을 가능성 높음.

🔹 해결책 (HTTPS)

  • SSL 인증서는 웹사이트의 신원을 보증함.
  • 브라우저는 인증서가 유효한 경우에만 HTTPS로 연결하며, 위조된 사이트는 경고 표시.

예제:

  • HTTP: 사용자가 http://tistory.com을 방문하지만, 해커가 만든 가짜 사이트로 접속 가능.
  • HTTPS: https://tistory.com은 SSL 인증서로 신원이 검증된 웹사이트만 열람 가능.

4. SEO(Search Engine Optimization) 및 신뢰도 향상

🔹 문제점 (HTTP)

  • 구글과 주요 검색 엔진은 HTTPS를 사용하지 않는 사이트를 신뢰하지 않음.
  • HTTP 사이트는 브라우저에서 "보안되지 않은 사이트" 경고가 표시됨.

🔹 해결책 (HTTPS)

  • HTTPS를 사용하면 검색 엔진 최적화(SEO) 점수가 올라가고 검색 순위에서 우대받음.
  • 브라우저에서 **안전한 사이트(자물쇠 아이콘)**로 표시되어 사용자 신뢰도가 높아짐.

예제:

  • HTTP: Chrome에서 "이 사이트는 안전하지 않음" 경고 표시.
  • HTTPS: "보안 연결" 표시 + 검색 순위 상승 효과.

🚀 결론: HTTPS가 필수인 이유

  1. 데이터 암호화 → 해커가 개인정보(비밀번호, 카드정보)를 가로채지 못함.
  2. 데이터 무결성 → 악성 코드 삽입, 변조 공격 방지.
  3. 웹사이트 인증 → 피싱 사이트 방지 및 신뢰도 상승.
  4. 검색 엔진(SEO) 혜택 → 구글에서 검색 순위 우대.
  5. 브라우저 보안 정책 → HTTP 사이트는 "보안되지 않은 사이트" 경고가 뜨며 사용자 신뢰도 하락.

결론적으로, HTTPS는 보안과 신뢰를 위한 필수 요소이며, SSL 적용 없이 HTTP만 사용하면 보안상 치명적인 문제가 발생할 수 있음.
이제는 모든 웹사이트에서 HTTPS를 기본적으로 적용해야 하는 시대이다.

반응형

 

✅ SSL 적용 방법

1. SSL 인증서 준비

  • SSL 인증서는 유료/무료로 발급받을 수 있음.
  • Let's Encrypt(무료) 또는 GlobalSign, DigiCert 같은 유료 인증서를 사용할 수 있음.
  • 이미 발급받은 .crt, .key, .pfx 파일이 있어야 함.
  • SSL 적용을 했다면, 1년에 한 번씩은 잊지말고 미리미리 교체 해줘야 한다. ( 인증서 사용 기한이 1년 )

2. Keystore 파일 생성 (PFX 변환)

만약 .pfx 파일이 없다면, OpenSSL을 사용해 변환해야 함.

openssl pkcs12 -export -in cert.crt -inkey private.key -out keystore.pfx -name tomcat
  • cert.crt : SSL 인증서 파일
  • private.key : 개인 키 파일
  • keystore.pfx : 변환된 PFX 파일
  • -name tomcat : Keystore 별칭(Alias)

3. Tomcat 설정 변경

기존에 .Net 개발자를 할때는 iis를 통해서 적용만 해주면 끝났지만, jsp는 톰캣에서 따로 적용해주면 됨.

server.xml 파일에서 HTTPS 설정을 추가함.

  • 파일 위치: TOMCAT_HOME/conf/server.xml
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="200"
           SSLEnabled="true">
    <SSLHostConfig>
        <Certificate certificateKeystoreFile="conf/keystore.pfx"
                     certificateKeystoreType="PKCS12"
                     certificateKeystorePassword="yourpassword" />
    </SSLHostConfig>
</Connector>
  • port="8443" : HTTPS 기본 포트(443 사용 가능)
  • certificateKeystoreFile="conf/keystore.pfx" : Keystore 파일 위치
  • certificateKeystorePassword="yourpassword" : Keystore 비밀번호

 

📌 certificateKeystoreType을 명시해야 하는 이유

  1. Tomcat 버전에 따라 기본값이 다를 수 있음.
    • Tomcat 8.5 이상: PKCS12가 기본값
    • Tomcat 8.0 이하: JKS가 기본값 (PFX가 동작하지 않을 수도 있음)
  2. 명확한 설정을 통해 오류 방지
    • 일부 환경에서는 PKCS12가 기본값이 아니므로 명확하게 선언하는 것이 안정적.
  3. 로그에서 PKCS12 관련 오류 발생 방지
    • java.security.KeyStoreException: Unrecognized keystore type 같은 오류 발생 가능.
    • certificateKeystoreType="PKCS12"을 추가하면 Tomcat이 PFX를 올바르게 인식할 수 있음.

3-1. SSL 인증서 경로 설정

SSL 인증서 파일은 일반적으로 Tomcat의 conf/ 디렉터리나 별도의 보안 폴더에 저장하는 것이 좋음.

📌 저장 위치 추천

  1. Tomcat conf/ 디렉터리 내에 저장 (가장 일반적인 방식)
  2. Tomcat 외부의 보안 디렉터리에 저장
    • 보안성을 강화하기 위해 Tomcat 폴더 외부에 저장하고 chmod 600 등으로 접근을 제한할 수 있음.

📌 인증서 구성 파일 목록

SSL 적용 시 필요한 파일:

  • PFX 파일 (PKCS#12 형식)
    • keystore.pfx → 이 파일을 certificateKeystoreFile로 지정
  • 또는 PEM 형식 인증서 파일 사용 시
    • cert.crt (인증서)
    • private.key (개인키)
    • ca_bundle.crt (CA 인증서 체인, 필요 시)

만약 .crt와 .key를 직접 사용하는 경우, Keystore로 변환하여 .pfx 파일을 만드는 것이 좋음.

📌 Keystore 저장 시 보안 권장사항

  • Tomcat 내 conf/ 디렉터리에 두는 경우
    → chmod 600 conf/keystore.pfx (권한 제한)
  • 서버 외부의 보안 디렉터리에 저장하는 경우
    → /etc/ssl/tomcat/ 등의 디렉터리를 사용하고 root 소유자로 설정
sudo mkdir -p /etc/ssl/tomcat
sudo mv keystore.pfx /etc/ssl/tomcat/
sudo chmod 600 /etc/ssl/tomcat/keystore.pfx
sudo chown root:root /etc/ssl/tomcat/keystore.pfx
이렇게 설정하면 Tomcat이 SSL 인증서를 안전하게 읽을 수 있음.

4. Tomcat 재시작

설정 적용을 위해 Tomcat을 재시작해야 함.

catalina stop
catalina start
반응형

5. JSP 페이지에서 HTTPS 적용 확인

  • 브라우저에서 https://localhost:8443 접속
  • 인증서 적용 여부 확인

6. HTTP → HTTPS 리디렉션 설정

web.xml 파일에서 보안을 강화하기 위해 HTTPS로 강제 리디렉션할 수 있음.

 

<security-constraint>
    <web-resource-collection>
        <web-resource-name>SecureApp</web-resource-name>
        <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>
  • 모든 요청(/*)을 HTTPS로 강제 변환함.
  • server.xml에서 redirectPort="8443"가 설정되어 있다면, Tomcat이 자동으로 HTTP 요청을 HTTPS로 리디렉션함.
  • SSL만 적용 → web.xml 수정 불필요
  • 모든 HTTP 요청을 HTTPS로 강제 리디렉션 → web.xml 수정 필요

7. 방화벽 및 포트 설정 확인

  • 서버에서 443 또는 8443 포트가 열려 있는지 확인 필요.
  • iptables 또는 firewalld를 사용하는 경우 포트를 열어야 함.
sudo firewall-cmd --permanent --add-port=8443/tcp
sudo firewall-cmd --reload
  • 클라우드 서버(AWS, GCP, Azure)의 경우 보안 그룹에서 443 포트 허용 필요.
  • 윈도우의 경우 제어판 방화벽에서 인바운드 규칙 추가 해주면 된다.

 


추가 사항

  • Let's Encrypt 인증서 자동 갱신: Certbot 사용 가능
  • 로드 밸런서 사용 시: Nginx, Apache HTTPd와 연동 가능
  • 인증서 갱신 필요: SSL 인증서는 보통 1년마다 갱신해야 함.

 

 


이렇게 HTTPS를 해야하는 이유와 SSL 적용 방법에 대해서 알아보았다. 추가 적인 내용이 필요한 경우에는 댓글을 요청드리고, 틀린 부분이 있다면 이것 또한 댓글로 알려주시면 수정하도록 하겠습니다!

 


 

반응형