J'ai des ressources auxquelles je dois accéder avec SSL qui utilise des certificats auto-signés. En général, la plupart des outils ont un paramètre simple pour permettre d'y accéder sans erreur ou simplement un avertissement. Cependant, il semble que la meilleure façon de le faire avec la JVM est d'importer le certificat de signature dans un fichier de clés en tant qu'autorité de certification. J'ai un script groovy que j'aimerais utiliser, mais je préférerais que mon script fonctionne de manière autonome sur n'importe quelle JVM sans modifier le keystore ou distribuer un nouveau keystore. Existe-t-il un moyen simple de contourner la vérification de certification?Comment utiliser SSL avec un certificat auto-signé dans groovy?
Répondre
Après un peu de recherche, j'ai trouvé this post. Voici ce que j'ai fini par utiliser:
import javax.net.ssl.HostnameVerifier
import javax.net.ssl.HttpsURLConnection
import javax.net.ssl.SSLContext
import javax.net.ssl.TrustManager
import javax.net.ssl.X509TrustManager
def nullTrustManager = [
checkClientTrusted: { chain, authType -> },
checkServerTrusted: { chain, authType -> },
getAcceptedIssuers: { null }
]
def nullHostnameVerifier = [
verify: { hostname, session -> true }
]
SSLContext sc = SSLContext.getInstance("SSL")
sc.init(null, [nullTrustManager as X509TrustManager] as TrustManager[], null)
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory())
HttpsURLConnection.setDefaultHostnameVerifier(nullHostnameVerifier as HostnameVerifier)
À utiliser à vos risques et périls: cela sape la vérification du certificat!
Je viens de passer par une application Grails sur laquelle je travaille. Vous ne traiterez le keystore qu'une seule fois. En supposant que vous avez le CERT, mettez-le simplement dans votre keystore, puis pointez votre jvm sur le keystore via les accessoires de la ligne de commande ...
edit - Je ne connais aucun moyen de contourner le keystore. Mais vous pouvez en créer un avec juste le (s) certificat (s) dont vous avez besoin et le transmettre avec votre application. Vous ne le faites qu'une seule fois.
modifier - est la commande ici pour keytool et la java CL prop
keytool -import -trustcacerts -alias www.the-domain.com -file the-cert.der -keystore store.jks
-Djavax.net.ssl.trustStore=/path/to/store.jks
Si vous appelez le programme de ligne de commande curl
plutôt que d'utiliser les outils groovy/JVM natif, vous pouvez désactiver la vérification des certificats pour votre utilisateur en exécutant la commande suivante à partir de la ligne de commande:
$ echo 'insecure' >>~/.curlrc
Cet article est discuté sur meta: http://meta.stackoverflow.com/questions/266368/why-this-post-is-not-very-low-quality –
@staticx, en outre, il est particulièrement peu sûr car cela affectera ** toutes ** les connexions faites en utilisant curl par cet utilisateur. – Bruno
@staticx Hmm, vous avez raison, c'est probablement ce qu'il suggère. Réponse révisée – ataylor
- 1. Comment utiliser un référentiel Maven 2 protégé par SSL et un certificat générique/autosigné?
- 2. Comment chaîner un certificat SSL
- 3. Comment utiliser un certificat client avec ftp_ssl_connect
- 4. Comment générer un certificat SSL? Comment accéder à une page avec un certificat invalide dans FF3?
- 5. OpenPOP.POP3 avec certificat SSL IIS
- 6. Accepter un certificat SSL pour
- 7. Comment installer un certificat SSL dans Visual Studio?
- 8. Comment créer un certificat pour le développement local avec SSL?
- 9. android Certificat SSL
- 10. Certificat SSL domaine
- 11. certificat SSL installation
- 12. Exportation du certificat SSL
- 13. HMAC SSL Certificat Question avec OAuth
- 14. httpclient ssl certificat sur android
- 15. certificat ssl basé ip
- 16. Comment renouveler un certificat SSL depuis plusieurs années dans IIS?
- 17. renouveler un certificat SSL sur IIS6?
- 18. comment utiliser ssl avec smtp dans C++
- 19. Certificat SSL pour l'environnement LAN
- 20. Certificat SSL pré-récupération .NET
- 21. Comment déployer un certificat SSL auto-signé sur plusieurs serveurs
- 22. comment un site Web Certificat SSL est valide ou non?
- 23. Comment acheter le certificat SSL à utiliser avec SQL Server 2005
- 24. Comment obtenir une requête HTTPS avec le certificat client SSL pour utiliser Ruby EventMachine?
- 25. ssl classe 1 certificat problème
- 26. Comment utiliser Java pakages avec Groovy
- 27. Test du certificat SSL pour le test SSL MQ
- 28. Comment installer un certificat SSL sur IIS 6 et 7?
- 29. Groovy + Antbuilder: Comment utiliser Grape avec taskdef?
- 30. Comment importer un certificat SSL sur le système?
En général, hvgotcodes est une meilleure solution. Votre kilométrage peut varier, bien sûr. Le problème avec votre solution est que tous les hôtes sont maintenant valides au lieu de la poignée que vous avez l'intention de laisser passer. Si votre code est étroitement contrôlé et que vous êtes certain que vous ne vous connecterez qu'à des sources "de confiance", tout ira bien. Toutefois, vous êtes vulnérable aux erreurs de DNS et à un certain nombre d'autres problèmes à partir desquels vous seriez protégé si vous importez vos certificats dans un fichier de clés certifiées. Vous pouvez également définir la propriété javax.net.ssl.trustStore lors de l'exécution, si vous avez un comportement plus dynamique. –
En général, je suis d'accord. Mais il y a certains contextes de script où il est bon d'ignorer complètement la gestion des certificats; Par exemple, lorsque les serveurs de test sont générés dynamiquement et que les keystores des clients doivent être synchronisés en permanence. Il convient également de noter que d'autres langages dynamiques tels que ruby et python en font un paramètre de configuration simple et n'appliquent pas la chaîne de certificats par défaut, respectivement. – ataylor
Juste pour mettre ceci en gras pour les lecteurs qui copient/collent sans passer par le commentaire @ BrianM.Carr: ** cette solution désactive complètement les étapes de vérification du certificat, rendant ainsi la connexion potentiellement vulnérable aux attaques MITM **. – Bruno