Ik ben een beginner met Spring Boot.
Ik probeer een https-oproep naar een dienst te doen, ik heb een Privake-sleutel om de verbinding te beveiligen.
Ik sloeg:
http://localhost:8081/points/12345/search
Ik heb het geprobeerd met https:// maar ik krijg van Postman:
Could not get any response
There was an error connecting to https://localhost:8081/points/12345/search.
Vanaf het moment dat ik schreef
server.ssl.key-store=classpath:KeyStore.jks
server.ssl.key-store-password=test
in application.properties
krijg ik de foutmelding:
Slecht verzoek – Deze combinatie van host en poort vereist TLS
Ik heb al mijn code in mijn controller verwijderd, ik laat het eindpunt gewoon zodat ik het kan aanroepen.
@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);
}
}
Hier is het bestand 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
Wat moet ik doen?
Antwoord 1, autoriteit 100%
Ik gebruikte in het begin https://
in plaats van http://
, het werkte voor mij.
Antwoord 2, autoriteit 2%
Ik kreeg dit bericht omdat ik een verkeerd certificaat gebruikte.
Ik heb het clientcertificaat en het servercertificaat verkeerd begrepen.
In mijn geval heb ik mijn certificaat op de server geïnstalleerd, voor mijn domein, maar in plaats daarvan moest ik het gebruiken om het verzoek in te dienen, als een clientcertificaat.
u kunt hier zien hoe u dit moet doen.
Clientcertificaatverificatie met Spring Boot
Dus dit bericht zegt eigenlijk: “Hé, uw SSL-verzoek is niet OK”, ik kan het cert-bestand niet vinden, of uw cert-bestand is niet het goede, zoals @SerdarAtalay zegt, het kan ook betekenen dat je hebt geen voorvoegsel https://
enz. gebruikt.
Hopelijk helpt het!
Antwoord 3
Ik had dit probleem bij het werken aan een Java-projectin Debian 10met Tomcatals applicatieserver.
Het probleem was dat de applicatie al httpshad gedefinieerd als het standaardprotocol terwijl ik httpgebruikte om de applicatie in de browser aan te roepen.
Ik heb echter geprobeerd het https-protocol in de browser te gebruiken, maar het maakte geen verbinding en gaf de fout:
Beveiligde verbinding mislukt
Er is een fout opgetreden tijdens een verbinding met 34.72.188.50:8009. SSL heeft een record ontvangen dat de maximaal toegestane lengte overschrijdt.
Foutcode: SSL_ERROR_RX_RECORD_TOO_LONG
De pagina die u probeert te bekijken, kan niet worden weergegeven omdat de authenticiteit van de ontvangen gegevens niet kon worden geverifieerd.
Neem contact op met de eigenaren van de website om hen op de hoogte te stellen van dit probleem.
Zo heb ik het opgelost:
Ik moest eerst een keystore-bestand maken voor de applicatie, meer als een zelfondertekend certificaat voor het https-protocol:
sudo keytool -genkey -keyalg RSA -alias tomcat -keystore /usr/share/tomcat.keystore
Opmerking: u moet Java op de server hebben geïnstalleerd om dit te kunnen doen. Java kan worden geïnstalleerd met sudo apt install default-jdk
.
Vervolgens heb ik een httpsTomcat-serverconnector voor de toepassing toegevoegd in het Tomcat-serverconfiguratiebestand (/opt/tomcat/conf/server.xml
):
sudo nano /opt/tomcat/conf/server.xml
Voeg het volgende toe aan de configuratie van de applicatie. Merk op dat de keystorebestandslocatie en het wachtwoord zijn opgegeven. Er is ook een poort gedefinieerd voor het https-protocol, die verschilt van de poort voor het http-protocol:
<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"/>
Dus de volledige serverconfiguratie voor de applicatie zag er als volgt uit in het Tomcatserverconfiguratiebestand (/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>
Deze keer toen ik probeerde toegang tot de toepassing van de browser gebruiken:
https://my-server-ip-address:https-port
In mijn geval was:
https:35.123.45.6:8443
het werkte prima. Hoewel, ik moest een waarschuwing die een beveiliging uitzondering voor de website toegevoegd accepteren, omdat de gebruikte certificaat is een zelf-ondertekend is.
Dat is alles.
Ik hoop dat dit
helpt