如何为客户端身份验证设置git客户端证书?

时间:2015-12-29 14:31:35

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

我在jetty-9下运行自己的git存储库。 我想知道如何设置git客户端证书,以便我的git服务器(jetty服务器)能够在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 cert设置,我也明确尝试通过命令行设置它。 (我不确定我是这样做的正确方法)。此curl-ca-bundle.crt文件也作为truststore导入到我的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

请建议。

1 个答案:

答案 0 :(得分:1)

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

您需要阅读有关TLS身份验证工作原理的一些材料。

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

通常的配置是证书,包括服务器证书的私钥,CA捆绑包,或至少在CLIENT上配置的单个颁发者CA作为可信证书。

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

如果您只有一个自签名证书,那么它将无法运行,您也需要一个(自签名或CA颁发)服务器和客户端。

您不能只从服务器复制证书部分以验证客户端。此部分足以让客户端信任服务器,但如果没有私钥,则不能用于加密身份验证。

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