Mixed Content 에러 문제 이해
로컬에서 잘 작동하던 웹프로젝트가 배포 후 문제가 발생했다.
프로젝트에서 가져와 사용하던 api가 문장분리 api와 맞춤법검사 api로 두가지였는데
테스트를 해보니, 문장분리 api사용은 문제가 없었는데 , 맞춤법 검사 api가 작동되지않는 문제가 있었다.
개발자도구 콘솔창을 보니 아래와 같은 에러가 보였다.
Mixed Content: The page at '<URL>' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint '<URL>'. This request has been blocked; the content must be served over HTTPS.
찾아보니 Mixed Content 에러는 https에서 http로 요청을 보낼때 발생한다고 한다.
맞춤법 검사 api 프로토콜은 http ,
로컬에서 문제가 없었던 이유는 http://localhost:8080/ 으로 돌아가서였고,
배포 후 확인 했던 도메인은 https 프로토콜로 적용되어있어서 생긴 문제 였다.
해당 리소스 서버에서 https가 지원되도록 SSL 인증서를 적용해야 한다는 해결 방법을 찾았다.
https, http 통신 불가능 가능 정리
- https → https 문제없음
- https → http (Response 불가능, Insert|Update|Delete|Create 가능)
- http → https (Request 불가능, Response 불가능)
- http → http 문제없음
왜 https끼리만 통신을 해야만 원활한가?
HTTPS끼리만 통신을 해야 원활합니다.
HTTPS는 HTTP의 보안 프로토콜로, 데이터가 암호화되어 전송되기 때문에 보안성이 높습니다.
또한, HTTPS는 디지털 인증서를 사용하여 서버의 신원을 확인할 수 있기 때문에 신뢰성이 높습니다.
따라서, 서로 도메인 설정이 된 HTTPS끼리만 통신을 해야만 데이터의 보안과 신뢰성을 보장할 수 있습니다.
만약, 서로 도메인 설정이 되지 않은 HTTP나 HTTPS끼리 통신을 하면 다음과 같은 위험이 있습니다.
- 데이터가 도중에 탈취될 수 있습니다.
- 서버의 신원을 확인할 수 없어서 악성 사이트에 접속할 수 있습니다.
- 크로스 사이트 스크립팅 공격(XSS) 등과 같은 보안 공격에 노출될 수 있습니다.
따라서, HTTPS 통신을 하는 경우 서로 도메인 설정이 되었는지 확인하는 것이 중요합니다.
또한, HTTPS 통신을 사용하는 사이트나 서비스는 신뢰할 수 있는 곳인지 확인하는 것도 중요합니다.
http와 https가 통신하면 생길수있는 에러
HTTP와 HTTPS끼리 통신을 하면 일반적으로 다음과 같은 에러가 발생합니다.
- SSLHandshakeException : HTTPS 통신을 시작할 때, 클라이언트와 서버가 서로의 신원을 확인하기 위해 SSL/TLS 핸드셰이크 과정을 수행합니다. 이 과정에서 클라이언트는 서버의 디지털 인증서를 검사하고, 서버는 클라이언트의 인증서를 검사합니다. 만약, 클라이언트와 서버의 디지털 인증서가 서로 호환되지 않거나, 서버의 신원이 불확실한 경우 SSLHandshakeException 에러가 발생합니다.
- javax.net.ssl.SSLException: Prohibited SSL renegotiation : HTTPS 통신을 시작할 때, 클라이언트는 서버에게 SSL 재협상(renegotiation)을 요청합니다. SSL 재협상은 통신 중에 암호화 강도를 높이거나, 인증서를 교체하는 등의 작업을 수행할 때 사용됩니다. 하지만, SSL 재협상은 보안 취약점을 악용할 수 있기 때문에, 대부분의 브라우저는 SSL 재협상을 기본적으로 비활성화하고 있습니다. 만약, 클라이언트가 SSL 재협상을 요청했지만, 서버가 SSL 재협상을 지원하지 않는 경우 javax.net.ssl.SSLException: Prohibited SSL renegotiation 에러가 발생합니다.
- javax.net.ssl.SSLException: Unsupported SSL protocol : 클라이언트와 서버가 서로 다른 SSL/TLS 프로토콜을 사용하고 있는 경우 javax.net.ssl.SSLException: Unsupported SSL protocol 에러가 발생합니다.
- javax.net.ssl.SSLException: Certificate unknown : 클라이언트가 서버의 디지털 인증서를 신뢰할 수 없는 경우 javax.net.ssl.SSLException: Certificate unknown 에러가 발생합니다
'STUDY > WEB' 카테고리의 다른 글
[Network] 포트포워딩 Port-Forwarding (0) | 2023.05.04 |
---|---|
[Web] URL 구조 설명 (0) | 2023.05.04 |
[Web] CORS에 대하여 (CORS policy 에러) (0) | 2023.04.12 |
[Web] 스트림(Stream)과 버퍼(Buffer) (0) | 2023.04.03 |
[Tomcat] 톰캣 캐시 부족 현상 해결방법 (0) | 2023.03.13 |