我正在建立一个Web服务,我的公司将通过该服务与许多商业客户的服务进行对话。我们将使用SOAP交换信息。我想使用双方提供的SSL证书来进行身份验证,但是对于证书类型之间是否存在根本区别,我有些迷惑。

当人们谈论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服务,以告知谁发出请求。

评论


嗯,很好,所以所有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

#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颁发的证书。

#4 楼

从功能上讲,它们是相同的-公用RSA密钥和由授权机构签名的标识信息。实际上,您的服务器密钥通常使用一个通用名称进行设置,该通用名称用于标识所讨论的域(例如* .wikimedia.org)。我不认为有任何限制您使用证书(包括自生成证书)的条件,只要它符合另一方的身份验证要求即可。