我有自己的git存储库,运行在jetty-9下。我想知道如何设置git客户端证书,以便我的git服务器(jetty server)能够在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-客户端应该接受自签名证书。
curl-ca-bundle.crt是git的全局配置中设置的git证书,我还显式地尝试通过命令行设置它。(我不确定我这样做是否正确)。这个curl 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请建议一下。
发布于 2015-12-29 20:30:21
很难用这种方式读取完整的行,而且也不清楚您是如何使用CA包作为私钥来实现身份验证的(CA是一个证书,没有私有组件),您能说明您获得了多少证书和私钥吗?
您需要阅读一些有关TLS身份验证如何工作的材料。
如果您只需要一些粗略的方向,要对对等方(客户机或服务器)进行身份验证,它需要证书内的公钥和私钥,而另一方要信任它,另一方将需要颁发者CA (或自签名证书)作为受信任的证书。
然后,通常的配置是一个证书加上服务器证书的私钥,以及一个CA包,或者至少是在客户端上配置为可信的证书的单个颁发者CA。
有了客户机身份验证,除此之外,您还需要客户端上的类似配置:客户端的证书加上它的私钥,以及服务器上的配置(或者服务器上的单个颁发者证书至少是可信证书)。
如果您只有一个自签名证书,那么服务器和客户端也需要一个(自签名或CA颁发的)证书,它将无法工作。
您不能仅仅从服务器复制证书部分来验证客户端。此部分足以使客户端信任服务器,但如果没有私钥,则无法用于加密身份验证。
上面的命令行只是显示您试图使用一个公共证书列表( CA包)作为私钥--您是否获得了带有私钥的实际证书?
https://stackoverflow.com/questions/34513121
复制相似问题