J'essaie de vous connecter à une bande Web sécurisée à l'aide d'une jetée (ou d'une autre bibliothèque).
Le problème est que je reçois une erreur "Aucun certificat de confiance trouvé". J'utilise un certificat auto-signé généré avec KeyTool. Ce qui pourrait être fait? P> Voici une tentative avec Tyrus Websocket Client, je n'obtiens pas l'erreur SSL, mais elle n'imprime rien: P> var WebSocket = require('ws')
, ws = new WebSocket('wss://qa.sockets.stackexchange.com/');//"wss://echo.websocket.org"
ws.on('message', function(message) {
console.log('received: %s', message);
});
ws.on('open', function() {
ws.send('155-questions-active');
ws.send('1-questions-active');
});
3 Réponses :
Eh bien, j'ai essayé d'utiliser votre code pour reproduire le problème sans en revue (Obtenez le certificat, importez-le avec la commande KeyTool, puis exécutez le code). Ma sortie est comme ceci. Donc, je suppose que si vous voulez un client de socket Web en cours d'exécution dans Java, je suppose que vous pouvez simplement accepter tout certificat comme le lien que @Tinker vous a donné. P> Le code devrait être comme celui-ci. Peut-être que vous pourriez l'essayer et voir ce qui se passe à votre place. p>
Félicitations, comment avez-vous trouvé?
Eh bien, dans mon expérience passée, j'ai eu ce genre de problème dans mon travail. de toute façon heureux pourrait être de l'aide;)
C'est beaucoup de code juste pour éviter d'utiliser nouvelle SSLContextFactory (true); code> (AKA: Trust Tous les certificats)
haha. Oui, je n'ai pas cherché le doc. le code est venu de l'expérience. Mais, oui, si je savais à propos de l'argument avant. J'utiliserais certainement ça. :)
La bonne manière serait de configurer votre clé de clés client / TrustOtore pour faire confiance à votre certificat de serveur Self signé spécifique. Il y a beaucoup de réponses sur Stackoverflow démontrant comment faire cela avec Java en configurant simplement le contenu du fichier KeyStore et / ou TrustStore de manière appropriée. (Aucun code nécessaire).
Si vous voulez "simplement se connecter", et que vous ne vous souciez pas de la fiducie, de la validité des certificats ou même de la validation d'identification de point de terminaison (essentiellement toutes les bonnes choses qui composent une connexion bien sécurisée) Ensuite, vous n'avez pas besoin de gâcher avec des keystores, ainsi que de détrempteurs ou personnalisés Comment vous feriez cela avec Jetty 9.4.35.v20201120 consiste à configurer le x509trustmanagers code> ou même personnalisé
sslcontexts code> pour se connecter au service. Ce besoin est courant pendant le développement / les tests / QA, mais ne doit pas être utilisé dans le code de production. P>
SSLContextFactory. Client code> (qui appartient au
httpClient code>, quel
WebsocketClient code> utilise) pour faire confiance à tous les certificats. P>
2020-12-21 14:03:28.228:INFO::main: Logging initialized @173ms to org.eclipse.jetty.util.log.StdErrLog
2020-12-21 14:03:28.401:WARN:oejusS.config:main: Trusting all certificates configured for Client@4b5a5ed1[provider=null,keyStore=null,trustStore=null]
2020-12-21 14:03:28.402:WARN:oejusS.config:main: No Client EndPointIdentificationAlgorithm configured for Client@4b5a5ed1[provider=null,keyStore=null,trustStore=null]
2020-12-21 14:03:28.862:INFO:j.SecureClientSocket:HttpClient@3712b94-60: onConnect(WebSocketSession[websocket=JettyAnnotatedEventDriver[jetty.SecureClientSocket@3f38289c],behavior=CLIENT,connection=WebSocketClientConnection@7556df66::DecryptedEndPoint@11c4a450{l=/192.168.1.217:46512,r=qa.sockets.stackexchange.com/198.252.206.25:443,OPEN,fill=-,flush=-,to=66/300000},remote=WebSocketRemoteEndpoint@278a12bf[batching=true],incoming=JettyAnnotatedEventDriver[jetty.SecureClientSocket@3f38289c],outgoing=ExtensionStack[queueSize=0,extensions=[],incoming=org.eclipse.jetty.websocket.common.WebSocketSession,outgoing=org.eclipse.jetty.websocket.client.io.WebSocketClientConnection]])
2020-12-21 14:03:30.648:INFO:j.SecureClientSocket:HttpClient@3712b94-62: onMessage() - {"action":"155-questions-active","data":"{\"siteBaseHostAddress\":\"graphicdesign.stackexchange.com\",\"id\":138914,\"titleEncodedFancy\":\"How to achieve purple, paper background texture look?\",\"bodySummary\":\"How is the below purple background texture look achieved? I'm assuming it is a paper texture effect with different layers of light? However when I try to apply both the effect it never turns out the ...\",\"tags\":[\"texture\"],\"lastActivityDate\":1608581010,\"url\":\"https://graphicdesign.stackexchange.com/questions/138914/how-to-achieve-purple-paper-background-texture-look\",\"ownerUrl\":\"https://graphicdesign.stackexchange.com/users/155152/homan-cheung\",\"ownerDisplayName\":\"Homan Cheung\",\"apiSiteParameter\":\"graphicdesign\"}"}
2020-12-21 14:03:30.791:INFO:j.SecureClientSocket:HttpClient@3712b94-60: onMessage() - {"action":"155-questions-active","data":"{\"siteBaseHostAddress\":\"unix.stackexchange.com\",\"id\":457386,\"titleEncodedFancy\":\"IPtables logging is not working in CentOS 7\",\"bodySummary\":\"I want to log all the traffic which comes in and out from the port X. I have followed below steps.\\r\\nEdited /etc/syslog.conf , /etc/rsyslog.conf , /etc/systemd/system/rsyslog.service.d/rsyslog.conf ...\",\"tags\":[\"centos\",\"kernel\",\"iptables\",\"logs\"],\"lastActivityDate\":1608581010,\"url\":\"https://unix.stackexchange.com/questions/457386/iptables-logging-is-not-working-in-centos-7\",\"ownerUrl\":\"https://unix.stackexchange.com/users/301499/karthikeyan-s\",\"ownerDisplayName\":\"Karthikeyan s\",\"apiSiteParameter\":\"unix\"}"}
2020-12-21 14:03:32.235:INFO:j.SecureClientSocket:HttpClient@3712b94-62: onMessage() - {"action":"155-questions-active","data":"{\"siteBaseHostAddress\":\"math.stackexchange.com\",\"id\":812563,\"titleEncodedFancy\":\"Jacobian of exponential mapping in SO3/SE3\",\"bodySummary\":\"Following this post\\nJacobian matrix of the Rodrigues' formula (exponential map)\\n\\nWhat if I really need the Jacobian of the exponential mapping function in $\\\\omega \\\\neq 0$?\\n\\nBasically, I want to ...\",\"tags\":[\"lie-groups\",\"3d\",\"rotations\",\"numerical-optimization\",\"rigid-transformation\"],\"lastActivityDate\":1608581012,\"url\":\"https://math.stackexchange.com/questions/812563/jacobian-of-exponential-mapping-in-so3-se3\",\"ownerUrl\":\"https://math.stackexchange.com/users/153816/user153816\",\"ownerDisplayName\":\"user153816\",\"apiSiteParameter\":\"math\"}"}
2020-12-21 14:03:35.343:INFO:j.SecureClientSocket:HttpClient@3712b94-60: onMessage() - {"action":"155-questions-active","data":"{\"siteBaseHostAddress\":\"raspberrypi.stackexchange.com\",\"id\":76325,\"titleEncodedFancy\":\"GCC version for compiling a loadable kernel module\",\"bodySummary\":\"I am not very familiar with Linux, so may be my question is a little bit foolish.\\n\\nI would like to compile kernel module without recompiling the kernel (USB Wi-Fi stick driver for MT7106U chip). I ...\",\"tags\":[\"kernel\",\"modules\",\"gcc\"],\"lastActivityDate\":1608581015,\"url\":\"https://raspberrypi.stackexchange.com/questions/76325/gcc-version-for-compiling-a-loadable-kernel-module\",\"ownerUrl\":\"https://raspberrypi.stackexchange.com/users/77643/cyclone125\",\"ownerDisplayName\":\"cyclone125\",\"apiSiteParameter\":\"raspberrypi\"}"}
2020-12-21 14:03:36.775:INFO:j.SecureClientSocket:JettyShutdownThread: onClose(1006, Disconnected)
Cela fonctionne, mais cela désactive réellement toute la validation du certificat et une attaque man-in-hébergée ne serait jamais détectée de cette façon. Alors, quel est le point d'utiliser le cryptage alors après tout? C'est absolument bon, si vous ne trouvez que de savoir comment utiliser Webockets sur TLS. Mais s'il vous plaît, n'utilisez jamais cela dans la production!
Voici mon client Tyrus-Java à l'aide de Stub que je me connectais à ma jetty 9.3.6 Server exécutant HTTPS avec un certificat auto-signé (adapté de Tyrus Websocket Client , section 8.1): où J'utilise un environnement Java 8 / gradle 2.7, et mon espère que cela aide. p> p> sillywebsocketclient sillywebsocketclient code> s'étend code> Code> javax.websocket.endpoint code>. p>
build.Gradle code> ressemble à ceci: p>
Dupliqué possible de Dire Java d'accepter un certificat SSL auto-signé
@Tinker, je viens de l'essayer, est allé à qa.sockets.stackexchange.com avec un navigateur , exporté le certificat et l'importait dans CACERTS
KeyTool -Import ... CODE> et couru à nouveau ce code, obtenu la même erreur "Aucun certificat de confiance trouvé"
L'avez-vous dirigé avec un magasin de fiducie et le mot de passe correct? Assurez-vous que votre JVM utilise le bon magasin de Trust
Bonne idée, system.out.println (system.geproperty ("javax.net.ssl.trust ou minerai")); retourné null, j'ai essayé system.setproperty ("javax.net.ssl.keystore", "keystore.jks"); Mais toujours la même erreur
essayé avec un chemin absolu aussi
Si votre magasin Trust Storage renvoie NULL, c'est votre problème. Découvrez pourquoi votre magasin Trust ne se met pas correctement défini. Vous le réglez n'importe où?
docs.oracle.com/cd/e19509-01/ 820-3503 / 6NF1IL6ER / Index.html Voir si cela aide
Désolé, ce n'est pas null une fois que je l'ai défini bien sûr, j'ai essayé différentes manières, édité le code ci-dessus, semble impossible ...