我正在建立一个网络服务,我的公司将通过它与许多商业客户的服务进行对话。我们将使用 SOAP 交换信息。我想使用双方提供的 SSL 证书来处理身份验证,但我对证书类型之间是否存在根本区别有点迷茫。
当人们谈论 HTTPS 时,他们谈论的是从 Verisign 或其他机构获得 SSL 证书。当他们谈论客户端身份验证时,他们谈论的是获得 X.509 证书。这两个词是同一个词,可以变成另一个词,还是我没有掌握的其他区别?
我正在建立一个网络服务,我的公司将通过它与许多商业客户的服务进行对话。我们将使用 SOAP 交换信息。我想使用双方提供的 SSL 证书来处理身份验证,但我对证书类型之间是否存在根本区别有点迷茫。
当人们谈论 HTTPS 时,他们谈论的是从 Verisign 或其他机构获得 SSL 证书。当他们谈论客户端身份验证时,他们谈论的是获得 X.509 证书。这两个词是同一个词,可以变成另一个词,还是我没有掌握的其他区别?
X509 证书是公钥/私钥对中的一种公钥。这些密钥对可用于不同的事情,例如通过 SSL 加密或用于识别。SSL 证书是一种 X509 证书。SSL 通过加密流量和验证当事方来工作(威瑞信相信这个网站就是他们所说的那个人,因此你可能也可以)。威瑞信充当证书颁发机构 (CA)。CA 是值得信赖的,因为它所说的一切都应该被视为事实(运行 CA 需要主要的安全考虑)。因此,如果 CA 给你一个证书说它相信你真的是你,那么你就有一个用户证书/客户端证书。
其中一些类型的证书可以全面使用,但其他类型的证书只能用于某些活动。
如果您在 Windows 中打开证书(在 IE 中通过 SSL 浏览某些内容并查看证书属性)或运行 certmgr.msc 并查看证书,请查看详细信息选项卡 > 密钥使用情况。这将决定证书被允许做什么/用于什么。
对于 SOAP,证书可用于两件事:识别和加密。好吧,如果您包含消息签名(消息散列),则为三个。
客户端证书标识调用客户端或用户。当应用程序发出 SOAP 请求时,它会将证书交给 Web 服务,告诉它是谁在发出请求。
在 TLS 中,服务器需要拥有私钥和证书(有时称为服务器证书)。服务器证书识别和验证服务器。客户端也可以选择拥有自己的私钥和证书(通常称为客户端证书)。如果使用客户端证书,它会识别并验证客户端。
在 Web 上,使用 HTTPS,通常服务器具有服务器证书,但不使用客户端证书。这意味着客户端可以验证它正在与之交谈的服务器,但服务器无法验证连接到它的客户端。
但是,在许多编程上下文中,您通常希望两个端点相互验证。因此,您将需要同时使用服务器证书和客户端证书。
在 TLS 中,所有证书都是 X.509 证书。X.509 只是数据的格式。
证书包括公钥和来自证书颁发机构 (CA) 的签名。在 Web 上,通常网站具有由 Verisign 或其他一些知名 CA 颁发(签名)的服务器证书。Web 浏览器附带了近 100 个不同 CA 的列表,这些 CA 已预先安装,并且最广泛使用的网站具有由其中一个 CA 颁发的服务器证书。例如,Verisign 是每个浏览器标准 CA 列表中的 CA 之一。如果您希望他们为您颁发证书,威瑞信会向您收费。
让您的证书由标准 CA 签名的替代方法是您可以使用自签名证书:不是由标准 CA 之一颁发的证书,而是由您自己(或您想要的任何人)颁发的证书。这在网络上并没有被广泛使用,因为自签名服务器证书会导致浏览器向用户弹出警告对话框,而大多数网站都试图避免这种情况。但是,对于编程用途,自签名证书可能工作正常。如果您使用自签名证书,则无需支付 Verisign 费用。您可以找到有关如何使用 OpenSSL 的命令行工具来创建您自己的自签名证书的教程。
SSL 是 TLS 的同义词。(从技术上讲,SSL 是与几个旧版本标准一起使用的名称,而 TLS 是几个较新版本标准的新名称。但是许多人可以互换使用这两个术语。)
我鼓励您阅读有关公钥证书的 Wikipedia 文章以获取更多有用的背景信息。
“普通”SSL 证书通常是X.509 证书。
但是,这些只能用于服务器身份验证和加密: certs 的属性之一是它的指定用途,您通常不能将其用于其他用途。
但是,除此之外,客户端证书与服务器证书几乎相同,只是指定为“客户端身份验证”。
从功能上讲,您经常会发现一些系统选择只接受客户端证书的一个子集,例如那些由它们自己的 CA 颁发的证书。
在功能上,它们是相同的——公共 RSA 密钥和由权威机构签署的识别信息。实际上,您的服务器密钥通常使用标识相关域的通用名称进行设置(例如,*.wikimedia.org)。我不相信有什么限制你使用证书,包括自己生成的,只要它符合对方的身份验证要求。