【问题标题】:How to set git client certificate for client authentication?如何为客户端身份验证设置 git 客户端证书?
【发布时间】:2015-12-29 14:31:34
【问题描述】:

我有自己的 git 存储库在 jetty-9 下运行。 我想知道如何设置 git 客户端证书,以便我的 git 服务器(码头服务器)能够在 servlet 请求中接收证书,并能够获取 git 客户端证书广告以进行客户端身份验证。

按照我正在尝试运行的命令,

> git -c http.sslcainfo=D:\jetty\punws-sohanba.sigmasys.net.crt -c http.sslCert=D:\jetty\curl-ca-bundle.crt clone  "https://punws-sohanba.sigmasys.net:8443/git.ctr-0.0.1-SNAPSHOT/dashboard-portal/.git"

“punws-sohanba.sigmasys.net.crt”是我的服务器证书,以便 git-client 接受自签名证书。

curl-ca-bundle.crt 是 git 全局配置中设置的 git 证书,我也明确尝试通过命令行设置它。 (我不确定我是否以正确的方式这样做)。此 curl-ca-bundle.crt 文件也作为信任库导入到我的 server.jks 文件中。

在服务器上我无法获得证书,

 X509Certificate[] certs = (X509Certificate[])req.getAttribute("javax.servlet.request.X509Certificate");
 System.out.println("cert name from git client =========>> " + certs[0].getSubjectDN().getName()); //returns null-pointer here

我在命令行上给出以下错误:

fatal: unable to access 'https://punws-sohanba.sigmasys.net:8443/git.ctr-0.0.1-SNAPSHOT/dashboard-portal/.git/': unable to set private key file: 'D:\jetty\curl-ca-bundle.crt' type PEM

请提出建议。

【问题讨论】:

  • 如果您完全省略了-c http.sslCert=D:\jetty\curl-ca-bundle.crt 位怎么办?从git help config 的输出来看,http.sslCert 似乎是用于设置您的 Git 客户端应该为自己使用而不是验证其​​对等方的证书。
  • 如果我省略 http.sslCert ,它会抛出致命的:无法访问 https://punws-sohanba.sigmasys.net:8443/git.ctr-0.0.1-SNAPSHOT/dashboard-portal/.git/': Unknown SSL protocol error in connection to punws-sohanba.sigmasys.net:8443 错误

标签: git jetty ssl-certificate pem jetty-9


【解决方案1】:

以这种方式阅读不间断的行是相当困难的,而且您如何尝试使用 CA 捆绑包作为私钥来实现身份验证也不是很清楚(这不起作用 - CA 的证书,没有私有组件),你能澄清一下你有多少证书和私钥吗?

您需要阅读一些有关 TLS 身份验证如何工作的资料。

如果您只需要一些粗略的指导,要对对等方(客户端或服务器)进行身份验证,它需要证书中的公钥和私钥,而另一方信任它,另一方将需要颁发者 CA(或自签名证书)作为受信任的证书。

然后,通常的配置是证书加上服务器证书的私钥,以及 CA 捆绑包,或者至少是在客户端上配置为受信任证书的单个颁发者 CA。

使用客户端身份验证,除此之外,您还需要在客户端进行类似的配置:客户端的证书加上它的私钥,以及服务器上的配置(或至少单个颁发者证书在 SERVER 上作为受信任的证书)。

如果您只有一个自签名证书,这将不起作用,您还需要一个(自签名或 CA 颁发的)用于服务器和客户端。

您不能只从服务器复制证书部分来验证客户端。这部分足以让客户端信任服务器,但没有私钥,它不能用于加密认证。

上面的命令行只是显示您尝试使用公共证书列表(CA 捆绑包)作为私钥 - 您是否获得了带有私钥的实际证书?

【讨论】:

  • 它经常对 SSL 证书感到困惑。我参考了一些链接并生成了证书。我不确定他们是对的。如果您提供几个步骤以正确的方式生成证书并且我可以在服务器端和客户端使用,那就太好了。
  • 我通过将密钥库正确导出到 .p12 然后使用 openssl pkcs12 -in keystore.p12 -out client1.crt 创建 .crt 文件解决了这个问题。现在我的最终命令看起来像这样,git -c http.sslcainfo=D:\jetty\punws-sohanba.sigmasys.net.crt -c http.sslCert=D:\jetty\client1.crt -c http.sslCertPasswordProtected clone "https://punws-sohanba.sigmasys.net:8443/git.ctr-0.0.1-SNAPSHOT/dashboard-portal/.git"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-09
  • 2013-10-07
  • 2023-03-24
  • 2012-09-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-16
相关资源
最近更新 更多