MySQL JDBC Ignore de force le certificat client sur AWS RDS
J'ai une application web Java, Travaille sur AWS et connecté à la base de données MySQL, Travaille sur AWS RDS.
Mon application utilise des certificats clients SSL, signé par notre propre autorité de certification pour la connexion à divers services Web, donc j'ai installé
et
propriétés du système.
J'ai ajouté
Certificats pour les miens
, Et je peux normalement se connecter à MySQL, Utilisant SSL Via le client de ligne de commande.
Ma ligne de ligne à MySQL Ressemble à ça:
j'utilise
Pour démarrer la connexion JBDC.
J'ai découvert ma demande Java peut normalement se connecter à MySQL, Quand j'installe
, Mais il échoue quand j'installe
et
:
Il paraît que Java représente mon certificat client signé par privé CA, MySQL, qui le rejette. J'ai enregistré une interaction en utilisant
, et DN Mon certificat client est envoyé à MySQL.
Comment puis-je utiliser mon certificat client pour les connexions HTTPS, mais ne l'utilisez pas pour les connexions MySQL?
J'ai essayé de créer une clé de clés vide et de le configurer dans la ligne de connexion:
Cela me donne l'erreur suivante:
Mon application utilise des certificats clients SSL, signé par notre propre autorité de certification pour la connexion à divers services Web, donc j'ai installé
-Djavax.net.ssl.keyStore
et
-Djavax.net.ssl.trustStore
propriétés du système.
J'ai ajouté
[url=https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem]https://s3.amazonaws.com/rds-d ... e.pem[/url]
Certificats pour les miens
trustStore
, Et je peux normalement se connecter à MySQL, Utilisant SSL Via le client de ligne de commande.
Ma ligne de ligne à MySQL Ressemble à ça:
jdbc:mysql://my-server-id.eu-west-1.rds.amazonaws.com/my-database?verifyServerCertificate=true&useSSL=true&requireSSL=true
j'utilise
mysql:mysql-connector-java:jar:5.1.38
Pour démarrer la connexion JBDC.
J'ai découvert ma demande Java peut normalement se connecter à MySQL, Quand j'installe
trustStore
, Mais il échoue quand j'installe
keyStore
et
trustStore
:
! javax.net.ssl.SSLException: Unsupported record version Unknown-0.0
! at sun.security.ssl.InputRecord.checkRecordVersion(InputRecord.java:552) ~[na:1.8.0_91]
! at sun.security.ssl.InputRecord.readV3Record(InputRecord.java:565) ~[na:1.8.0_91]
! at sun.security.ssl.InputRecord.read(InputRecord.java:532) ~[na:1.8.0_91]
! at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:973) ~[na:1.8.0_91]
! at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375) ~[na:1.8.0_91]
! at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403) ~[na:1.8.0_91]
! at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387) ~[na:1.8.0_91]
! at com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(ExportControlled.java:149) ~[user-portal-web-0.0.1.jar:0.0.1]
! ... 40 common frames omitted
Il paraît que Java représente mon certificat client signé par privé CA, MySQL, qui le rejette. J'ai enregistré une interaction en utilisant
tcpdump
, et DN Mon certificat client est envoyé à MySQL.
Comment puis-je utiliser mon certificat client pour les connexions HTTPS, mais ne l'utilisez pas pour les connexions MySQL?
J'ai essayé de créer une clé de clés vide et de le configurer dans la ligne de connexion:
jdbc:mysql://my-server-id.eu-west-1.rds.amazonaws.com/my-database?verifyServerCertificate=true&useSSL=true&requireSSL=true&clientCertificateKeyStoreUrl=file:nokeys.jks&clientCertificateKeyStorePassword=changeit
Cela me donne l'erreur suivante:
java.lang.IllegalStateException: TrustManagerFactoryImpl is not initialized
at sun.security.ssl.TrustManagerFactoryImpl.engineGetTrustManagers(TrustManagerFactoryImpl.java:100)
at javax.net.ssl.TrustManagerFactory.getTrustManagers(TrustManagerFactory.java:285)
at com.mysql.jdbc.ExportControlled.getSSLSocketFactoryDefaultOrConfigured(ExportControlled.java:323)
at com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(ExportControlled.java:85)
Aucun résultat connexe trouvé
Invité:
Pour répondre aux questions, connectez-vous ou registre
1 réponses
Babette
Confirmation de:
Le problème avec lequel j'ai rencontré ci-dessus était une option
https://bugs.mysql.com/bug.php?id=36948
- Si vous installez «clientCertificateKeyStoreUrl» Dans la connexion URL, mais ne pas installer «trustCertificateKeyStoreUrl» (et 4 Autres paramètres ci-dessous), alors MySQL échoue avec un message «TrustManagerFactoryImpl Non initialisé »au lieu d'une erreur plus utile.
Vous pouvez créer un magasin de clé vide avec une telle commande:
Puis connectez-vous à K. MySQL Avec l'URL, par exemple:
Tout 6 Les arguments du référentiel des clés sont obligatoires, même si vous souhaitez utiliser des valeurs par défaut, sinon vous verrez une erreur «TrustManagerFactoryImpl non initialisé "