【问题标题】:mysql ssl spring boot 2mysql ssl 春季启动 2
【发布时间】:2018-09-17 15:53:01
【问题描述】:
您好,我有一个 mysql 服务器和一个在 gcloud 中运行的 kubernetes spring boot 2 Web 服务。所以问题是我不知道如何将我的 client-key.pem 转换为 jks 文件。我已经使用以下命令将 client-key.pem 文件转换为 jks 文件。
keytool -import -trustcacerts -alias root -file client-cert.pem -keystore client-cert.jks
当我在 key.pem 上使用时,相同的命令给我一个错误,keytool error:java.lang.exception: input not an x.509 certificate.
pem 文件很好(由谷歌云控制台生成),可以在 mysql 工作台上完美运行。任何帮助,谢谢!
【问题讨论】:
标签:
openssl
google-cloud-platform
jks
【解决方案1】:
从PEM 转换为Java KeyStore 有点复杂...
a) 将证书从PEM 转换为PKCS12:
openssl pkcs12 -export -out client-cert.pkcs12 -in client-cert.pem
b) 创建然后清空信任库KS:
keytool -genkey -keyalg RSA -alias client -keystore truststore.ks
keytool -delete -alias client -keystore truststore.ks
c) 将CA 导入到信任库KS:
keytool -import -v -trustcacerts -alias client-ca -file client-cert.pem -keystore truststore.ks
d) 创建然后清空 Java KeyStore:
keytool -genkey -keyalg RSA -alias client -keystore keystore.ks
keytool -delete -alias client -keystore keystore.ks
e) 将PKCS12 导入空的Java KeyStore:
keytool -v -importkeystore -srckeystore client-cert.pkcs12 -srcstoretype PKCS12 -destkeystore keystore.ks -deststoretype JKS
【解决方案2】:
Martin Zeitler 和我的一位同事为我指明了正确的方向。仍然不是完美的答案,所以我会回答我的问题。
您从谷歌云获得 3 个文件 client.cert.pem、client-key.pem 和 server-ca.pem。
原来你不需要 server-ca.pem 文件从 mysql 工作台连接到服务器,但是如果你想从 java 连接到服务器,你需要它。
首先 openssl,在任何发行版上使用以下命令安装它。
sudo apt install openssl -y
然后键入以下命令:
openssl pkcs12 -export -out merged.pkcs12 -in client-cert.pem -inkey client-key.pem -certfile server-ca.pem
keytool -genkey -keyalg RSA -alias client -keystore truststore.jks
keytool -delete -alias client -keystore truststore.jks
keytool -import -v -trustcacerts -alias server-ca -file server-ca.pem -keystore truststore.jks
keytool -genkey -keyalg RSA -alias client -keystore keystore.jks
keytool -delete -alias client -keystore keystore.jks
keytool -v -importkeystore -srckeystore merged.pkcs12 -srcstoretype PKCS12 -destkeystore keystore.jks -destkeystore JKS
设置这些 JDBC 参数:
verifyServerCertificate=true
useSSL=true
requireSSL=true
clientCertificateKeyStorePassword=password
clientCertificateKeyStoreUrl=keystore.jks
trustCertificateKeyStorePassword=password
trustCertificateKeyStoreUrl=truststore.jks
就是这样,伙计们!