J'essaie d'accéder à mon application Spring Boot exécutée sur Netty via https dans localhost, en utilisant un certificat auto-signé côté serveur.
Mon application.properties
ressemble à ceci: p>
keytool -genkeypair -alias testkey -keyalg RSA -keysize 4096 -keystore test.jks -validity 36500
J'ai généré le keystore via:
server.ssl.enabled=true server.ssl.key-store-type=JKS server.ssl.key-store=test.jks server.ssl.key-store-password=password server.ssl.key-alias=testkey
J'obtiens l'erreur suivante:
io.netty.handler.codec.DecoderException: javax.net.ssl.SSLHandshakeException: Alerte fatale reçue: certificate_unknown à io.netty.handler.codec.ByteToMessageDecoder.callDecode (ByteToMessageDecoder.java:472) à io.netty.handler.codec.ByteToMessageDecoder.channelRead (ByteToMessageDecoder.java:278) à io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead (AbstractChannelHandlerContext.java:374) à io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead (AbstractChannelHandlerContext.java:360)
J'ai essayé d'importer le certificat dans le truststore JDK, même dans le système d'exploitation mais toujours le même. Une source a suggéré de nommer l'alias de clé "testkey" pour le faire fonctionner, ce qui ne fonctionnait pas non plus. Puisqu'il n'y a aucune autre mention de cette erreur dans Google, j'espère que vous pourrez aider.
3 Réponses :
Ce server.ssl.key-store = test.jks
spécifie que votre test.jks
se trouve dans le dossier racine de votre projet, vérifiez donc s'il est vraiment là.
Si vous avez ce fichier ailleurs dans le chemin des classes, vous pouvez utiliser le schéma classpath
afin de spécifier l'emplacement du fichier, c'est-à-dire server.ssl.key-store = classpath:
Si Spring ne trouve pas le keystore, vous obtenez une exception: Causé par: java.lang.IllegalStateException: java.lang.IllegalStateException: org.springframework.boot.web.server.WebServerException: impossible de charger le magasin de clés code>
Ce problème est spécifique à Netty + WebFlux, il a fonctionné avec Tomcat + MVC.
J'ai réussi à résoudre en générant un certificat localement valide avec https://github.com/FiloSottile/mkcert < / a>
On dirait que Netty vérifie le SAN (nom alternatif du sujet) dans les certificats auto-signés. L'ajout de localhost, 127.0.0.1 au SAN a fait disparaître cette erreur lorsque le client localhost se connecte au serveur en utilisant HTTPS
Extension de la réponse @Peter -
Téléchargez la version de mkcert depuis https://github.com/FiloSottile / mkcert / releases ou compiler directement à partir des sources.
Sous Windows pour générer un certificat auto-signé au format p12 -
mkcert-v1.4.1-windows -amd64.exe -pkcs12 -p12-file self-signed-cert.p12 localhost 127.0.0.1 :: 1
Et ajoutez la configuration suivante au fichier de propriétés de Spring Boots -
< pre> XXX Remarque - classpath
si vous ajoutez self-signed-cert.p12
dans le dossier resources
. Si vous souhaitez l'exécuter à partir d'un emplacement spécifique server.ssl.key-store=./self-signed-cert.p12