首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >服务器或客户端是否应该能够验证具有已知根ca的客户机/服务器证书-中间证书链?

服务器或客户端是否应该能够验证具有已知根ca的客户机/服务器证书-中间证书链?
EN

Security用户
提问于 2017-07-07 07:58:13
回答 2查看 999关注 0票数 1

我正在尝试测试以下设置:

RADIUS服务器使用EAP-TLS协议。客户端和服务器具有以下证书:

客户端

公钥:clientcert_intermediatecert_chain.pem

CA-证书:rootcert.pem

服务器

公钥:servercert_intermediatecert_chain.pem

CA-证书:rootcert.pem

客户端证书(clientcert.pem)和服务器证书(servercert.pem)都由同一个中间证书(intermediatecert.pem)签名,中间证书由根证书(rootcert.pem)签名。

这两个被设置为公钥的链像这样组合在一起(通过Shell命令):

cat servercert.pem intermediatecert.pem > servercert_intermediatecert_chain.pem

cat clientcert.pem intermediatecert.pem > clientcert_intermediatecert_chain.pem

现在,客户端尝试连接到服务器。双方都发送公钥,并尝试使用rootcert.pem验证接收到的公钥。

我知道“正常”的方式是,公钥只是服务器或客户端证书。CA证书将是imcert链,但我必须知道这是否也有效。

现在我的问题是:

  1. 公钥是由服务器/客户端证书和中间证书组成的链是否合法?
  2. 如果是,这是否适用于双方(服务器和客户端)?
  3. 如果服务器(如FreeRADIUS)或客户端从计数器部分接收到这样的链,那么它们是否能够使用根证书来验证它们呢?

根据我的经验,FreeRADIUS不验证这样的证书链权利。如果我没有弄错,FreeRADIUS使用OpenSSL库并在上面所示的情况下执行与以下命令相同的操作:

openssl verify -CAfile rootcert.pem clientcert_intermediatecert_chain.pem

我很确定这不管用。OpenSSL无法用根证书验证这样的链。当试图把信任链放在一起时,它失败了。

这是正确的吗?

顺便说一下,FreeRADIUS返回与error 20 at 0 depth: cannot find issuer certificate命令相同的错误,这意味着它不能将信任链放在一起。

EN

回答 2

Security用户

回答已采纳

发布于 2017-07-08 05:46:34

还没有一个完整的答案,但是:

是的,由像OpenSSL这样的程序调用的FreeRADIUS库(直接调用或在这里通过libssl调用)可以验证接收到的链;不,命令行openssl verify不验证链。这是在https://stackoverflow.com/questions/44375300/openssl-verify-with-chained-ca-and-chained-cert (我的)中讨论的,但这是被否决的和建议的主题之外的,所以我将在这里复制相关的部分:

openssl命令行verify只从作为操作数提供的文件读取一个证书,第一个证书,如果给出多个证书,则从每个文件读取证书。这与使用-CAfile -trusted -untrusted选项指定的文件不同,这些选项可以(而且通常包含)包含多个证书。

您的文件clientcert_intermediatecert_chain.pem按该顺序包含客户端证书和中间证书。只使用客户端证书,忽略中间证书,因此您没有可验证的有效链。

若要使用命令行来模拟/测试接收方(对于客户端证书链,服务器)所做的验证,可以使用-untrusted将叶证书作为操作数提供给所有其他传输(链)证书(这里是一个中间证书),并将锚(S)和信任存储中的任何“已知”中间层提供显式或默认(您的-CAfile root很好,尽管有其他有效的方法)。

关于FreeRADIUS的真正问题(Y):您确定客户端正在发送链吗?你有线索吗?

作为另一种选择:如果客户端(或一般对等方)没有发送所需的链证书,但它们位于本地信任库中,这可以说是一种虚假的操作,OpenSSL将使用这些证书。您可以尝试至少暂时地将中间证书添加到用于CA_file的文件或用于CA_path的已存储目录中。

票数 1
EN

Security用户

发布于 2017-08-02 09:58:58

似乎我的设置的问题是,客户端没有发送完整的客户端中间链,而是只发送客户端证书(使用Wireshark计算出)。反过来,radius服务器发送服务器-中间链,工作良好。

因此,要回答我的问题:是的,这个设置应该在两个方向都能工作。

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

https://security.stackexchange.com/questions/163577

复制
相关文章

相似问题

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