当人们谈论HTTPS时,他们谈论的是从Verisign或其他机构获得SSL证书。当他们谈论客户端身份验证时,他们谈论获得X.509证书。这两个词是同一件事吗,一个可以变成另一个吗,还是我没有把握的其他区别?
#1 楼
X509证书是公用/专用密钥对中的一种公用密钥。这些密钥对可用于不同的事物,例如通过SSL加密或用于标识。 SSL证书是X509证书的一种。 SSL通过加密流量以及验证参与者来发挥作用(Verisign信任此网站是他们所说的身份,因此您也可以这样做)。 Verisign充当证书颁发机构(CA)。 CA值得信赖,因为它所说的一切都应视为真实(运行CA要求主要的安全考虑)。因此,如果CA向您提供证明您确实是您的证书,那么您就拥有了用户证书/客户证书。这些证书中的某些可以全面使用,但其他类型只能用于某些活动。
如果您在Windows中打开证书(通过IE中的SSL浏览某些内容并查看证书属性)或运行certmgr.msc并查看证书,请查看详细信息标签>密钥用法。这将决定允许使用/使用证书的方式。
对于SOAP,证书可以用于两件事:识别和加密。好吧,如果您包含消息签名(消息散列),则为三个。
客户端证书标识主叫客户端或用户。当应用程序发出SOAP请求时,它会将证书交给Web服务,以告知谁发出请求。
#2 楼
在TLS中,要求服务器具有私钥和证书(有时称为服务器证书)。服务器证书标识并验证服务器。客户端也可以选择拥有自己的私钥和证书(通常称为客户端证书)。如果使用了客户端证书,则它会识别并验证客户端。在Web上,使用HTTPS,通常服务器具有服务器证书,但不使用客户端证书。这意味着客户端可以验证正在与之通信的服务器,但是服务器无法验证与之连接的客户端。
但是,在许多编程环境中,您通常都希望两个端点都对每个端点进行身份验证。其他。因此,您将要同时使用服务器证书和客户端证书。
在TLS中,所有证书都是X.509证书。 X.509只是数据的格式。
证书包括公共密钥和来自证书颁发机构(CA)的签名。在Web上,通常,网站具有由Verisign或其他一些著名的CA颁发(签名)的服务器证书。 Web浏览器随附了预安装的几乎100种不同CA的列表,并且使用最广泛的网站具有由这些CA之一颁发的服务器证书。例如,Verisign是每个浏览器的标准CA列表中的CA之一。如果您希望他们为您颁发证书,Verisign会向您收取费用。
使证书由标准CA签名的另一种方法是,您可以使用自签名证书:不是由标准CA之一颁发的证书,而是由您自己(或您想要的任何人)颁发的证书。这在网络上并未得到广泛应用,因为自签名服务器证书会导致浏览器向用户弹出警告对话框,大多数网站都试图避免这种情况。但是,对于以编程方式使用,自签名证书可以正常工作。而且,如果您使用自签名证书,则不必付Verisign钱。您可以找到有关如何使用OpenSSL命令行工具创建自己的自签名证书的教程。
SSL是TLS的同义词。 (从技术上讲,SSL是该标准的多个旧版本使用的名称,而TLS是该标准的多个最新版本的新名称。但是,许多人可以互换使用这两个术语。)
我建议您阅读有关公共密钥证书的Wikipedia文章,以获取更多有用的背景信息。
评论
(与其他答案类似的评论):严格来说,并非所有TLS证书都是X.509证书,而且我刚刚注意到RFC 5081最近已更新:RFC 6091 tools.ietf.org/html/rfc6091
–布鲁诺
2011年5月13日19:56
为了使服务器支持客户端证书认证,服务器是否还需要支持服务器SSL?当我阅读有关客户端证书身份验证的教程时,它们似乎都暗示服务器也需要具有SSL证书。
– CMCDragonkai
2014年1月22日上午11:46
@CMCDragonkai,是的。客户端证书与SSL / TLS一起使用,因此服务器必须使用SSL / TLS。为了将来,请在一个单独的问题中提出新问题,而不要在现有问题下提出评论。
– D.W.
2014年1月22日14:44
#3 楼
“普通” SSL证书通常是X.509证书。但是,这些证书只能用于服务器身份验证和加密:证书的属性之一是其指定用途,通常不能将其用于其他用途。
除此之外,客户端证书与服务器证书几乎完全相同,只是指定为“客户端身份验证”。
在功能上,您经常会发现某些系统选择仅接受一部分客户端证书,例如由他们自己的CA颁发的证书。
评论
嗯,很好,所以所有SSL证书都是x509证书,这意味着我可以从Verisign那里获取SSL证书并将其用于客户端请求。不过,X509证书不一定已设置用法以允许身份或身份验证。太好了,谢谢!
–布兰登·雅伯(Brandon Yarbrough)
2011年1月3日,19:01
@CaptainAwesomePants,您可以使用Verisign的SSL证书作为客户端证书。如果密钥用法不包括客户端身份验证,则客户端身份验证可能不会接受该密钥。
– Zoredache
2011年1月3日,21:59
好答案。但是您的介绍中有一个令人迷惑的错误陈述:“ X509证书是一种公用/专用密钥对。”如果私钥在其中,则您将无法发布...。您能解决这个问题吗?
–nealmcb
2011年4月22日在21:05
@nealmcb已更新。您是正确的,但是在.NET开发人员世界中,X509Certificate也可以包含私钥。我认为这就是为什么我写我所做的事情。
–史蒂夫
2011年5月11日15:52
实际上,@ CaptainAwesomePants不是所有的SSL / TLS证书都是X.509证书。您可以使用OpenPGP证书(请参阅RFC 5081 tools.ietf.org/html/rfc5081),但这非常少见(据我所知,很少有堆栈支持它们)。
–布鲁诺
11年5月13日在19:52