programing

잘못된 요청 - 호스트와 포트의 이 조합에는 TLS가 필요합니다.스프링 부트 포함

powerit 2023. 3. 9. 22:24
반응형

잘못된 요청 - 호스트와 포트의 이 조합에는 TLS가 필요합니다.스프링 부트 포함

저는 스프링 부츠 신참입니다.

서비스에 https 콜을 발신하려고 합니다.접속을 보호하기 위한 Privake 키가 있습니다.

나는 때렸다:

http://localhost:8081/points/12345/search

https://로 시도했지만, Postman에서 받았습니다.

Could not get any response
There was an error connecting to https://localhost:8081/points/12345/search.

쓴 순간부터

server.ssl.key-store=classpath:KeyStore.jks
server.ssl.key-store-password=test

application.properties에러 메세지가 표시됩니다.

잘못된 요청 - 호스트와 포트의 이 조합에는 TLS가 필요합니다.

컨트롤러의 코드를 모두 삭제하고 엔드포인트를 호출할 수 있도록 했습니다.

@RestController
@SpringBootApplication
public class MainApplication {
    @RequestMapping(value = "/points/{point}/search", method = RequestMethod.GET)
    public PointsType getPoint(@PathVariable(value = "point") String point) {
        System.out.println("hi"); // Never printed
        return null;
    }
    public static void main(String[] args) {
        SpringApplication.run(MainApplication.class, args);
    }
}

application.properties 파일은 다음과 같습니다.

spring.application.name=sge
server.port=8081
server.ssl.key-store=classpath:KeyStore.jks
server.ssl.key-store-password=test
server.ssl.key-alias=homologation-staging
server.ssl.trust-store=classpath:TrustStore.jks
server.ssl.trust-store-password=test
server.ssl.client-auth=need
security.require-ssl=true
server.tomcat.remote_ip_header=x-forwarded-for
server.tomcat.protocol_header=x-forwarded-proto

어떻게 해야 하나?

나는 사용했다https://대신 처음에http://,그것은 나에게 효과가 있었다.

제가 인증서를 잘못 사용했기 때문에 이 메시지를 받았습니다.

클라이언트 인증서와 서버 인증서를 잘못 이해했습니다.

제 경우, 제 도메인의 서버에 증명서를 설치했는데, 대신 이 증명서를 클라이언트 증명서로 사용하여 요청을 작성해야 했습니다.

방법은 이쪽에서 확인하실 수 있습니다.

스프링 부트를 사용한 클라이언트 증명서 인증

이 메시지는 기본적으로 다음과 같습니다: "이봐, 너의 SSL 요청은 괜찮지 않아" 증명서 파일을 찾을 수 없거나, @SerdarAtalay가 말한 것처럼 증명서 파일이 올바르지 않아, 사용하지 않은 것을 의미할 수도 있습니다.https://접두사 등

도움이 됐으면 좋겠다!

저도 이 문제를 안고 며칠 동안 답을 찾아다녔습니다.대부분의 응답은 http 대신 https를 사용하는 것에 대해 이야기하지만 localhost에서의 테스트에는 필요하지 않았습니다.shubham 옵션에서 매우 필요한 해결 방법을 찾았습니다.이 옵션은 application.properties 파일의 server.ssl.enabled를 false로 설정하는 것입니다.

이 문제는 아래 나열된 솔루션 중 하나로 해결할 수 있습니다.

  1. HTTP 대신 HTTPS 사용
  2. POSTMAN 설정에서 TLS 암호화 사용 안 함 및 HTTP 사용
  3. 애플리케이션 속성 server.ssl.enabled= true-HTPS, false-HTTP를 확인합니다.
  4. POSTMAN에서 사용자 이름 및 비밀번호와 같은 올바른 인증 자격 증명을 추가합니다. 여기에 이미지 설명을 입력하십시오.

[1]: https://i.stack.imgur.com/vGOj9.png여기에 이미지 설명 입력

오류: 잘못된 요청 호스트와 포트의 이 조합에는 TLS가 필요합니다.

Apache 로드 밸런서를 사용하여 App 노드를 연결하는 경우./etc/httpd/conf.d/ 아래의 application.conf 파일을 확인하고 추가되지 않은 경우 아래 항목을 추가하십시오.

SSL Protocol ALL - SSLv2 - SSLv3 - TLSv1 - TLSv1.1

httpd 서비스를 재시작하여 확인합니다.

Debian 10에서 Tomcat을 어플리케이션 서버로 사용하는 Java Project를 작업할 때 이 문제가 있었습니다.

문제는 브라우저에서 http를 사용하여 응용 프로그램을 호출하는 동안 응용 프로그램의 기본 프로토콜로 정의된 https가 이미 있다는 것입니다.

그러나 브라우저에서 https 프로토콜을 사용하려고 했지만 연결이 되지 않아 오류가 발생했습니다.

보안 연결 실패

34.72.188.50:8009 에의 접속중에 에러가 발생했습니다.SSL 은 최대 허용 길이를 넘는 레코드를 수신했습니다.

오류 코드: SSL_ERROR_RX_RECORD_너무 길다

수신한 데이터의 신뢰성을 확인할 수 없기 때문에 보려는 페이지를 표시할 수 없습니다.웹 사이트 소유자에게 연락하여 이 문제를 알리십시오.

해결 방법은 다음과 같습니다.

처음에 https 프로토콜용 자체 서명 인증서와 같은 응용 프로그램용 키 저장소 파일을 생성해야 했습니다.

sudo keytool -genkey -keyalg RSA -alias tomcat -keystore /usr/share/tomcat.keystore

주의: 이를 수행하려면 서버에 Java가 설치되어 있어야 합니다.Java는 다음 방법으로sudo apt install default-jdk.

다음으로 Tomcat 서버 컨피규레이션파일에 어플리케이션용 https Tomcat 서버 커넥터를 추가했습니다./opt/tomcat/conf/server.xml

sudo nano /opt/tomcat/conf/server.xml

응용 프로그램 구성에 다음을 추가합니다.keystore 파일의 위치와 패스워드가 지정되어 있는 것에 주의해 주세요.https 프로토콜용 포트도 정의되어 있습니다.이것은 http 프로토콜용 포트와는 다릅니다.

<Connector protocol="org.apache.coyote.http11.Http11Protocol"
           port="8443" maxThreads="200" scheme="https"
           secure="true" SSLEnabled="true"
           keystoreFile="/usr/share/tomcat.keystore"
           keystorePass="my-password"
           clientAuth="false" sslProtocol="TLS"
           URIEncoding="UTF-8"
           compression="force"
           compressableMimeType="text/html,text/xml,text/plain,text/javascript,text/css"/>

그 때문에, 애플리케이션의 풀 서버 설정은, Tomcat 서버 컨피규레이션파일에서는 다음과 같이 되어 있습니다( )./opt/tomcat/conf/server.xml

<Service name="my-application">
  <Connector protocol="org.apache.coyote.http11.Http11Protocol"
             port="8443" maxThreads="200" scheme="https"
             secure="true" SSLEnabled="true"
             keystoreFile="/usr/share/tomcat.keystore"
             keystorePass="my-password"
             clientAuth="false" sslProtocol="TLS"
             URIEncoding="UTF-8"
             compression="force"
             compressableMimeType="text/html,text/xml,text/plain,text/javascript,text/css"/>
  <Connector port="8009" protocol="HTTP/1.1"
             connectionTimeout="20000"
             redirectPort="8443" />

  <Engine name="my-application" defaultHost="localhost">
     <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>
    </Realm>

    <Host name="localhost"  appBase="webapps"
          unpackWARs="true" autoDeploy="true">

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
             prefix="localhost_access_log" suffix=".txt"
             pattern="%h %l %u %t &quot;%r&quot; %s %b" />

    </Host>
  </Engine>
</Service>

이번에는 다음 방법으로 브라우저에서 응용 프로그램에 액세스하려고 했습니다.

https://my-server-ip-address:https-port

내 경우, 다음과 같습니다.

https:35.123.45.6:8443

잘 작동했어요다만, 사용하는 증명서는 자기 서명 증명서이기 때문에, Web 사이트의 시큐러티 예외가 추가된 경고에 응할 수 밖에 없었습니다.

그게 다예요.

이게 도움이 됐으면 좋겠다

언급URL : https://stackoverflow.com/questions/58595470/bad-request-this-combination-of-host-and-port-requires-tls-with-spring-boot

반응형