错误的请求-主机和端口的这种组合需要TLS。使用Spring Boot

时间:2019-10-28 17:13:58

标签: spring-boot ssl

我是Spring Boot的新手。

我正在尝试对服务进行https调用,我有一个Privake密钥来保护连接。

我击中了:

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

我尝试使用https://,但我从邮递员那里获得了

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

我该怎么办?

3 个答案:

答案 0 :(得分:20)

我一开始使用https://,对我有用。

答案 1 :(得分:0)

我收到此消息是因为我使用了错误的证书。

我误解了客户端证书和服务器证书。

就我而言,我在域中的服务器上安装了证书,但是我需要做的是使用它发出请求,作为客户端证书。

您可以在此处查看操作方法。

Client Certificate Authentication with Spring Boot

因此,此消息基本上是在说:“嘿,您的SSL请求不正确”,我找不到证书文件,或者您的证书文件不是一个好文件,如@SerdarAtalay所说,它也可以表示您没有使用https://前缀等。

希望有帮助!

答案 2 :(得分:0)

Debian 10 中使用 Tomcat 作为应用程序服务器的 Java项目时,我遇到了这个问题。

问题在于,当我使用 http 在浏览器中调用应用程序时,该应用程序已经将 https 定义为其默认协议。

但是我尝试在浏览器中使用 https 协议,但未连接并抛出错误:

安全连接失败

与34.72.188.50:8009的连接过程中发生错误。 SSL收到的记录超过了最大允许长度。

错误代码:SSL_ERROR_RX_RECORD_TOO_LONG

您试图查看的页面无法显示,因为无法验证所接收数据的真实性。 请与网站所有者联系,以告知他们该问题。

这是我的解决方法

我首先必须为该应用程序创建一个 keystore 文件,更像是 https 协议的自签名证书:

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

注意:您需要在服务器上安装Java才能执行此操作。可以使用sudo apt install default-jdk安装Java。

接下来,我在Tomcat服务器配置文件(/opt/tomcat/conf/server.xml)中为应用程序添加了 https Tomcat服务器连接器:

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

工作正常。虽然,我必须接受一条警告,该警告为网站添加了安全例外,因为所使用的证书是自签名的。

仅此而已。

我希望这会有所帮助