我在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
请建议。
答案 0 :(得分:1)
以这种方式读取不间断的行很困难,并且你不清楚如何使用CA捆绑作为私钥来实现身份验证(这不起作用 - CA是证书,没有私有组件),你能澄清一下你有多少证书和私钥吗?
您需要阅读有关TLS身份验证工作原理的一些材料。
如果你需要一些粗略的方向,对于一个对等体(客户端或服务器)进行身份验证,它需要一个证书中的公钥和一个私钥,另一方需要信任它,另一方将需要颁发者CA(或自签名证书)作为可信任的证书。
通常的配置是证书,包括服务器证书的私钥,CA捆绑包,或至少在CLIENT上配置的单个颁发者CA作为可信证书。
使用客户端身份验证,除此之外,您还需要在客户端进行类似的配置:客户端的证书PLUS私钥,以及服务器上的配置(或至少单个颁发者证书)在SERVER上作为可信证书)。
如果您只有一个自签名证书,那么它将无法运行,您也需要一个(自签名或CA颁发)服务器和客户端。
您不能只从服务器复制证书部分以验证客户端。此部分足以让客户端信任服务器,但如果没有私钥,则不能用于加密身份验证。
上面的命令行显示您尝试使用公共证书列表(CA捆绑包)作为私钥 - 您是否拥有带私钥的实际证书?