服务器或客户端是否应该能够validation客户端/服务器证书 – 具有已知根CA的中间证书链?

我正在testing以下设置:

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

客户
公钥: clientcert_intermediatecert_chain.pem
CA证书: rootcert.pem

服务器
公钥: servercert_intermediatecert_chain.pem
CA证书: rootcert.pem

客户端证书( clientcert.pem )和服务器证书( clientcert.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.pemvalidation接收到的公钥

我知道“正常”的方式是,公钥只是服务器或客户端证书。 而CA证书将成为imcert-rootcert-chain,但我必须知道这是否也能起作用。

现在我的问题:

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

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

openssl verify -CAfile rootcert.pem clientcert_intermediatecert_chain.pem

我很确定这是行不通的。 OpenSSL无法使用根证书来validation这样的链。 尝试将信任链放在一起时失败了。
它是否正确?

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

  1. 是的,使用共同中介CA的链条是很好的。
  2. 是。
  3. 是的,它的确如此。 您需要发布FreeRADIUS的debugging输出。 说它返回“错误20”是没有帮助的。 这可能不是FreeRADIUS错误,而是来自OpenSSL的输出。

这似乎是我的设置问题是,客户端没有发送完整的客户端中间链,但只有客户端证书(使用Wireshark找出来的)。 相反,发送服务器中间链的radius服务器工作正常。

所以,回答我的问题: 是的,这个设置应该在两个方向上工作