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