情况是:
- 有一个根证书(“自制”)
- 有一个由前一个签署的“中间”证书(也是一个“自制”)
- 有两个主机(A和乙),上面的(CA)证书已安装在
/etc/ssl/证书/
- 在主机 A 上有一个证书C1(由中间CA签名)和私钥K1配置为由网络 (SOAP) 侦听器使用。
- 在主机 B 上有一个证书C2(由中间CA签名)和私钥K2配置为由网络 (SOAP) 侦听器使用。
在主机上A我可以成功使用两台主机的网络服务并在主机上发出命令A:
openssl s_client -connectA:18080 openssl s_client -connect乙:18080
都返回
... 验证返回码:0(确定) ...
然而在主机上乙我无法成功使用任何网络服务(证书未验证)并在主机上发出命令乙:
openssl s_client -connectA:18080 openssl s_client -connect乙:18080
都返回
... 验证返回码:7(证书签名失败) ...
当验证成功时,上述命令的输出包含:
已连接(00000003) 深度 = 2 C = CX、ST = SX、L = Loc、O = 组织、电子邮件地址 =[电子邮件受保护] 验证返回:1 深度 = 1 C = CX、ST = SX、L = Loc、O = 组织、电子邮件地址 =[电子邮件受保护] 验证返回:1 深度 = 0 C = CX、ST = Loc、L = Loc、O = Comp、OU = OX、CN = a.comp.int、emailAddress =[电子邮件受保护] 验证返回:1 --- 证书链 0秒:/C=CX/ST=Loc/L=Loc/O=Comp/OU=OX/CN=a.comp.int/[电子邮件受保护] i:/C=CX/ST=SX/L=Loc/O=Org/[电子邮件受保护] ---
当验证失败时,上述命令的输出包含:
已连接(00000003) 深度 = 1 C = CX、ST = SX、L = Loc、O = 组织、电子邮件地址 =[电子邮件受保护] 验证返回:1 深度 = 0 C = CX、ST = Loc、L = Loc、O = Comp、OU = OX、CN = a.comp.int、emailAddress =[电子邮件受保护] 验证错误:num=7:证书签名失败 验证返回:1 深度 = 0 C = CX、ST = Loc、L = Loc、O = Comp、OU = OX、CN = a.comp.int、emailAddress =[电子邮件受保护] 验证返回:1 --- 证书链 0秒:/C=CX/ST=Loc/L=Loc/O=Comp/OU=OX/CN=a.comp.int/[电子邮件受保护] i:/C=CX/ST=SX/L=Loc/O=Org/[电子邮件受保护] ---
有人可以帮我找出问题出在哪里吗?
是不是在主机上乙(无法验证以太证书的)认证链(根 CA - 中间 CA)不知何故“损坏”?我应该做什么来进一步调试这个?
即使主机上有 openssl乙无法验证来自以太主机的证书,Firefox 在主机上运行乙也成功验证了这些 - 当然使用其自己的证书存储,其中已导入上面提到的根 CA 和中间 CA。
再次从楼主的角度A一切运行正常,正如预期。
还有一件事:命令
openssl verify -CAfile /etc/ssl/certs/CA.pem -untrusted /etc/ssl/certs/Int_CA.pem /home/<用户>/.ssh/id_b.pub
在主机上乙产生结果:
/home/<用户>/.ssh/id_b.pub:好的
所以这一次一切似乎都井然有序。