我是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
我该怎么办?
答案 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 "%r" %s %b" />
</Host>
</Engine>
</Service>
这一次,我尝试使用以下方法从浏览器访问应用程序:
https://my-server-ip-address:https-port
在我的情况下是:
https:35.123.45.6:8443
工作正常。虽然,我必须接受一条警告,该警告为网站添加了安全例外,因为所使用的证书是自签名的。
仅此而已。
我希望这会有所帮助