我对SSL身份验证比较陌生,但我有一个要求需要通过SSL在信任边界上验证两个架构组件(我可以控制这两个组件)。我认为我需要双向SSL身份验证,服务器和客户端都需要证书。
证书可以是自签名的吗?(即由供应商签名,这样使用SSL就不会失效了吗?还是需要第三方验证服务来确保证书的身份?)
在公钥和私钥方面,服务器和客户端的握手是如何工作的?
我将不得不在IIS中配置服务器以使用证书,并通过请求发送客户端证书(最可能是通过WCF进行配置),但我还需要完成哪些其他任务才能使其正常工作?
我对SSL身份验证比较陌生,但我有一个要求需要通过SSL在信任边界上验证两个架构组件(我可以控制这两个组件)。我认为我需要双向SSL身份验证,服务器和客户端都需要证书。
证书可以是自签名的吗?(即由供应商签名,这样使用SSL就不会失效了吗?还是需要第三方验证服务来确保证书的身份?)
在公钥和私钥方面,服务器和客户端的握手是如何工作的?
我将不得不在IIS中配置服务器以使用证书,并通过请求发送客户端证书(最可能是通过WCF进行配置),但我还需要完成哪些其他任务才能使其正常工作?
自签名证书实际上更加复杂。除非您完全控制双方,否则不要这样做。
私钥用于在握手中签署发送的证书,以便对等方可以检查您是否真正拥有您发送的证书。服务器私钥还在某些密码中生成共享密钥时发挥作用。
X509TrustManager.getAcceptedIssuers()
返回大小为0的数组来在Java中执行此操作。我从未在C#的 SslStream
(或IIS)世界中找到相应的等价物。据我所知, RemoteCertificateValidationCallback
是与Java的 X509TrustManager
最接近的等价物,但它不允许这样做。 - Bruno使用客户端和服务器证书的双向身份验证可以实现。您也可以使用自签名证书。但是,如果两个证书都是自签名的,则需要在客户端和服务器上绕过证书验证,因为它们没有由受信任的机构签署。
就证书的安装而言,应按以下方式进行:
服务器端
将ServerCert.pfx安装到LocalMachine --> 个人存储区
将ClientCert.cer安装到Local Machine --> 可信任的人员存储区
客户端
将ClientCert.pfx安装到当前用户 --> 个人存储区
将ServerCert.cer安装到Local Machine --> 可信任的存储区
您需要将ServerCert.cer文件发送给客户端,客户端需要将ClientCert.cer发送给您。
现在,如果您正在使用自签名证书,并且您的客户端正在访问您的服务,则他需要绕过证书验证。以下是C#中的示例代码:
System.Net.ServicePointManager.ServerCertificateValidationCallback = (sender, cert, chain, error) =>
{
return true;
};
希望能有所帮助。
注意: 从安全角度考虑,在生产环境中不建议使用自签名证书或绕过证书验证。