首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何设置用于客户端身份验证的git客户端证书?

如何设置用于客户端身份验证的git客户端证书?
EN

Stack Overflow用户
提问于 2015-12-29 14:31:34
回答 1查看 5.7K关注 0票数 1

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

按照我的命令跑,

代码语言:javascript
复制
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文件中。

在服务器上,当我这样做时,我无法获得证书:

代码语言:javascript
复制
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

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

代码语言:javascript
复制
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

请建议一下。

EN

回答 1

Stack Overflow用户

发布于 2015-12-29 20:30:21

很难用这种方式读取完整的行,而且也不清楚您是如何使用CA包作为私钥来实现身份验证的(CA是一个证书,没有私有组件),您能说明您获得了多少证书和私钥吗?

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

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

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

有了客户机身份验证,除此之外,您还需要客户端上的类似配置:客户端的证书加上它的私钥,以及服务器上的配置(或者服务器上的单个颁发者证书至少是可信证书)。

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

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34513121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档