当前位置: 首页 > 知识库问答 >
问题:

JDBC SSL:将CA证书、客户端证书和客户端捆绑到单个密钥库文件中

骆利
2023-03-14

谷歌云SQL通过为您生成服务器卡证书,客户端证书pem客户端密钥来支持SSL连接。我通过以下步骤设法让我的Java客户端连接到云SQL:

1)将服务器CA证书导入信任库文件:

keytool -import -alias mysqlServerCACert -file ca-cert.pem -keystore truststore

2) 将客户端证书和客户端密钥捆绑到pkcs12文件中:

openssl pkcs12 -export -in client-cert.pem -inkey client-key.pem -out client.p12 -name clientalias -CAfile ca-cert.pem

3)将pkcs12导入密钥库文件:

keytool -importkeystore -deststorepass keystore -destkeystore keystore -srckeystore client.p12 -srcstoretype PKCS12 -srcstorepass keystore -alias clientalias

4)告诉JVM使用我的信任库和密钥库:

-Djavax.net.ssl.keyStore=/path/to/my/keystore \
-Djavax.net.ssl.keyStorePassword=keystore \
-Djavax.net.ssl.trustStore=/path/to/my/truststore \
-Djavax.net.ssl.trustStorePassword=truststore

这一切都有效,但不幸的是,它排除了来自其他客户端库的出站HTTPS连接——在我的例子中,是Firebase java客户端库。问题是我的-Djavax.net.ssl.trustStore参数覆盖了与JDK捆绑的默认cacerts文件。

我似乎有两个选择。一个不理想的选择是,在每台生产和开发机器上,使用特定于操作系统和特定于JDK版本的命令,将我的服务器CA证书导入到JDK的< code>cacerts文件中。对于真正的生产设置来说,这个选项似乎很笨拙。

另一个选项是将我的服务器CA证书和客户端证书绑定到一个(本地)信任链中,然后Java将使用该信任链验证我的客户端密钥。据我所知,我很肯定这是可能的,但我不知道需要什么咒语。

我的猜测是,我应该使用一个< code>openssl命令来创建一个pkcs12包,以正确的顺序包含我的服务器CA证书、客户端证书和客户端密钥,然后使用< code>keytool将其导入到一个新的密钥库中。我将省略< code>-D.../trustStore JVM参数,并且仅指定密钥库参数。Java将对我的云SQL客户端密钥使用本地CA信任链,但对于所有其他SSL协商,将退回到全局< code>cacerts文件。

这可能吗?如果不能作为单个pkcs12直接实现,那么是否有其他一些步骤可以将它们全部放入单个密钥库中,而不需要信任库?

共有1个答案

黄君博
2023-03-14

将缺省 JRE 卡塞尔ts 文件复制到新的信任库,并将服务器证书添加到该信任库中。用于所有客户端。将此步骤作为生成步骤,并在每次升级 JRE 时重复此步骤,这样就不会错过默认 cacerts 中的证书更改。

当然,如果服务器证书由公认的CA正确签署,则无需在任何地方导入它,也无需使用自定义信任库。如果它不是由公认的CA签署的,那么它应该是。

 类似资料:
  • 如何向JMeter脚本添加客户端证书和密钥? 每次我导航到

  • 对于我们的指向站点VPN,我们希望创建一个根证书。因此我们可以为所有需要登录VPN的合作伙伴创建尽可能多的客户端证书。(Azure虚拟网络) 手工完成这件事很完美。我们生成一个作为根CA的证书(自签名)。我们可以在powershell中这样做:

  • 我需要通过HTTPS调用第三方rest api。我想在spring Boot应用程序中使用假客户端。我有一个关于假客户端和如何使用它进行api调用的想法。但我不确定如何传递证书文件和密钥。下面是我想使用feign Client实现的示例python代码提取。能不能帮我把标记为**的代码合并起来。

  • 问题内容: 我还很陌生,对于使用证书进行身份验证时客户端应该显示的内容有些困惑。 我正在编写一个Java客户端,该客户端需要对POST特定对象进行简单的数据处理URL。那部分工作正常,唯一的问题是应该完成。该部分相当容易处理(无论是使用Java的内置HTTPS支持还是使用Java的内置支持),但是我一直坚持使用客户端证书进行身份验证。我注意到这里已经存在一个非常类似的问题,我还没有尝试使用我的代码

  • 我不熟悉SSL和证书。我一直在做关于客户端证书认证的研究。我看过这个和wiki。 因此,如果我必须为我的B2B REST服务实现客户端证书身份验证解决方案,我应该执行以下操作 要求客户端生成自己的私钥,并为其公钥生成证书(CA 颁发?)。通过电子邮件或 USB 闪存盘发送该证书。 在服务器端将客户端的公共证书导入信任存储区并启用客户端身份验证 在握手期间,客户端会出示其证书并进行身份验证,因为服务

  • 本文向大家介绍什么是客户端证书?相关面试题,主要包含被问及什么是客户端证书?时的应答技巧和注意事项,需要的朋友参考一下 客户端系统向远程服务器发出经过身份验证的请求所用的数字证书被称为客户端证书。客户端证书在许多相互认证设计中起着非常重要的作用,为请求者的身份提供了强有力的保证。