SSL 与 数字证书 的基本概念和工作原理
程序员文章站
2022-03-19 18:53:44
...
SSL 与 数字证书 的基本概念和工作原理
http://www.linuxde.net/2012/03/8301.html
SSL握手协议的目的是或最终结果是让客户端和服务器拥有一个共同的密钥,握手协议本身是基于非对称加密机制的,之后就使用共同的密钥基于对称加密机制进行信息交换。
http://www.ibm.com/developerworks/cn/websphere/techjournal/0211_yusuf/yusuf.html
安全性概念
在深入研究 SSL 本身之前,考虑一下网络通信面临的关键的安全性问题以及适当的解决方案,这是很有帮助的。关键的安全性问题包括:
窃eavesdrop听
篡改
模仿
窃eavesdrop听
当未知的人知道了正在通信的双方之间所传递的消息时,就发生了窃eavesdrop听。换言之,您需要阻止未知的人阅读您的消息。为了保护信息免遭窃eavesdrop听,应用程序必须在发送信息前先对其加密,将它从明文转换为无法读懂的密文。接着,接收应用程序一接收到消息就对其解密,将它从密文转换回明文。其原理只不过是窃eavesdrop听者将不知道如何对消息解密。加密过程或解密过程一般被称作密码术,且依赖于数学算法。
加密算法通过在消息上执行一连串的数学操作从而对消息进行加密或解密,转换的是消息的外观而非其内容。算法被称作流密码(stream cipher)还是块密码(block cipher),取决于算法转换消息时是一次一个字节还是一次一个块(8 个字节)。加密算法是针对特定用例根据提供给算法的密钥创建的。密钥一般是 0 或 1 的一个随机序列;其大小区分了加密算法的能力。
加密算法通过以下两种方式之一使用密钥:
对称算法要求消息的发送方和接收方使用同一个秘钥;这通常被称作秘钥密码术。
非对称算法使用不同的密钥对消息进行加密或解密;其中一个秘钥必须是秘密的,而另一个密钥通常是公开的。在这种情况下,发送方可能会使用接收方的公钥对消息加密,但是只有接收方拥有用于对消息解密的秘钥。这种涉及到私钥和公钥对的方式也被称作公钥密码术。
对称算法的性能比非对称算法的性能快,但是在参与者之间安全地传递秘钥会引起分发问题。首先,您如何秘密传递密钥,其次,您如何将该方式扩展到多个发送方/接收方对。使用私钥和公钥对能缓解分发问题,因为接收方针对所有发送方发布了一个用来对信息进行加密的公钥,并且用一个私钥(秘钥)对接收到的所有信息解密。您不能对公钥进行逆向工程以获取私钥,而且只有接收方知道私钥。然而,这是以增加的性能开销为代价的。
篡改
篡改包括某人拦截一条消息并更改它。消息摘要解决了篡改问题,消息摘要是消息内容的定长数字表示。消息摘要(又称消息认证代码)是用散列函数计算的。这个过程只是单向的,意味着将函数反向并找到对应于摘要的消息是不可能的,因为该过程以这样一种方式实现,所以找到散列到同一摘要的两条不同消息在计算上难以实现。
一旦计算出了摘要,它就与消息一起被传送。接着,接收方对接收到的消息调用同一个散列函数,并将生成的摘要与接收到的摘要进行比较。如果这两个摘要是相同的,则消息在途中未被篡改。显然,要让这个过程生效,发送方和接收方必须在传送开始前就即将使用的散列函数达成一致。
模仿
当除实际指定的发送方之外的某个人发送消息时,就发生了模仿。要解决这个问题,您需要验证消息实际上是由发送方发送的,还需要认证正在与您交换信息的伙伴。
数字签名用于验证消息是否真正由发送方发送;数字签名结合了消息摘要和公钥密码术的使用。这个过程包括发送方生成消息摘要,然后用其私钥对摘要加密以创建数字签名。然后,接收方使用发送方的公钥对消息解密,确认消息确实是由发送方发送的。将这个摘要与接收方生成的摘要进行比较,进一步确认消息自从被签署就未被修改过。
但是,接收方怎么知道可以信任公钥呢?这个问题通常被称作中间人(man-in-the-middle)攻击,发生在未知的第三方拦截发送方的公钥并用它来交换自己的公钥的时候。于是,伪代理(rogue agent)模仿原发送方并签署被拦截的消息。因为接收方能够对发送的消息解密,所以接收方不知道它正在与一个伪用户进行交互。现在,我们要谈论的问题是,如何认证您正在与之交换信息的伙伴。
通过认证一个公钥属于一个命名的实体,数字证书解决了这个问题。数字证书一般是由名为认证中心(Certification Authority,CA)的可信的第三方签发的。CA 每生成一张数字证书,将需要收费,数字证书包括以下内容:
所有者的公钥
所有者的专有名称
签发证书的 CA 的专有名称
证书开始生效的日期
证书过期日期
版本号
序列号
在签发证书前,认证中心对请求方进行适当的背景检查,以验证该请求方就是它自己所声称的请求方。CA 签发的所有证书都是由 CA 数字签署的,可以使用 CA 证书(它包含 CA 的公钥)对其进行验证。发送方和接收方之间的交换现在采取额外的一个验证步骤。发送方发送由 CA 签发的数字证书,而不仅仅是向接收方发送其公钥。接收方用 CA 的证书来验证发送方的证书,确定证书中所包含的公钥确实属于所有者。在一张数字证书的生命期中,正在签发的 CA 可能会决定该证书不再可信。这样的证书被发布到证书撤销列表(Certificate Revocation List)中,发送方和接收方都可以根据该列表检查接收到的证书。
安全套接字层
SSL 协议使用秘钥加密和公钥加密、数字签名以及数字证书的概念在各方之间建立一个安全连接,并且用这些概念使得在不安全网络上传输安全数据更容易。
握手协议 SSL 是由 Netscape(请参阅 SSL Protocol)设计的,它定义了下列参与者:
SSL 客户机:开始 SSL 连接的调用应用程序
SSL 服务器:响应应用程序
SSL 客户机和 SSL 服务器进行交互以建立一个安全连接。这个交互被称作 SSL 握手:
SSL 客户机开始对话并发送诸如 SSL 版本之类的信息,同时还发送加密算法以及它所支持的散列函数。
SSL 服务器用加密算法以及要使用的散列函数来表示响应。这是从客户机提供的列表中选择的。SSL 服务器还发送一个会话标识、一个随机字节字符串以及它的数字证书。服务器可以包括对客户机的数字证书的请求,这一点是可选的。
通过验证所提供的数字证书上的数字签名,SSL 客户机使用正进行签发的认证中心的证书来验证 SSL 服务器以及数字证书本身。可以根据证书撤销列表检查服务器的证书,这一点是可选的。
如果通过验证,SSL 客户机就发送秘钥,该秘钥将被用于对进一步的交换加密。秘钥使用从服务器的数字证书处获取的 SSL 服务器的公钥对自己进行加密。另外,如果服务器请求数字证书的话,客户机可能会发送它的数字证书。
SSL 服务器使用它的私钥对秘钥解密并存储它。同样地,它使用正在进行签发的认证中心以及可能相关联的证书撤销列表来认证客户机,这是可选的。只有当上面的第 2 步中的服务器请求客户机的证书时,才会发生这一步骤。
SSL 客户机发送一条用秘钥加密的消息,表示 SSL 握手中的客户机部分完成。
SSL 服务器用一条同样用秘钥加密的消息作出响应,表示握手中的服务器部分完成。
现在就建立了一个安全连接,会话其余部分的通信是用秘钥加密的。
为了使 SSL 会话中所使用的加密算法和散列函数的规范更容易,这些算法被分组到各个密码套件(CipherSuite)中。密码套件定义了:
SSL 握手过程中的密钥交换和认证算法
用于保护数据的加密算法
用于生成消息摘要的散列函数
加密算法和散列函数被进一步分组到密码规范中。
WebSphere MQ 5.3 仅支持 RSA 密钥交换和认证算法。下表中列出了一些支持的密码规范的详细信息:
WebSphere MQ 5.3 支持的密码规范
密码规范名称 散列算法 加密算法 加密位数
NULL_MD5 MD5 无 0
NULL_SHA SHA 无 0
RC4_MD5_EXPORT MD5 RC4(流密码) 40
RC4_MD5_US MD5 RC4 128
RC4_SHA_US SHA RC4 128
RC2_MD5_EXPORT MD5 RC2(块密码) 40
DES_SHA_EXPORT SHA DES(块密码) 56
RC4_56_SHA_EXPORT1024 SHA RC4 56
DES_SHA_EXPORT1024 SHA DES 56
TRIPLE_DES_SHA_US3 SHA 3DES(块密码) 168
请注意:
RC2 是一个块密码算法。它按照块(8 字节长度)对数据加密,而且还支持长度为 40 位、64 位和 128 位的密钥。RC4 是一个流密码算法,它对数据的每个字节进行操作;和 RC2 一样,它支持长度为 40 位、64 位和 128 位的密钥。RC2 和 RC4 都是由 RSA Data Security Inc. 制定的。
DES,即美国国家数据加密标准(the United States Data Encryption Standard),是一个块密码算法,块长 8 字节,密钥长 56 位。Triple DES 是 DES 的一个变体,密钥长 168 位。
就性能而言,从最快的到最慢的依次为:RC4、DES、RC2、TripleDES。
SHA 代表安全散列算法(Secure Hash Algorithm),MD5 代表消息摘要版本 5(Message Digest Version 5)。在 MD5 和 SHA-1 之间作选择是安全性和性能之间的权衡。与 MD5 算法的 128 位输出相比,SHA 算法更安全,它产生 160 位输出。但是,MD5 算法在计算消息摘要方面要更快一些。
SSL_RSA_WITH_RC4_SHA_US 是一个支持 MQ 的密码套件的示例。它规定了 RSA 密钥交换和认证算法的使用,还规定了 RC4_SHA_US 密码规范。
http://www.linuxde.net/2012/03/8301.html
SSL握手协议的目的是或最终结果是让客户端和服务器拥有一个共同的密钥,握手协议本身是基于非对称加密机制的,之后就使用共同的密钥基于对称加密机制进行信息交换。
http://www.ibm.com/developerworks/cn/websphere/techjournal/0211_yusuf/yusuf.html
安全性概念
在深入研究 SSL 本身之前,考虑一下网络通信面临的关键的安全性问题以及适当的解决方案,这是很有帮助的。关键的安全性问题包括:
窃eavesdrop听
篡改
模仿
窃eavesdrop听
当未知的人知道了正在通信的双方之间所传递的消息时,就发生了窃eavesdrop听。换言之,您需要阻止未知的人阅读您的消息。为了保护信息免遭窃eavesdrop听,应用程序必须在发送信息前先对其加密,将它从明文转换为无法读懂的密文。接着,接收应用程序一接收到消息就对其解密,将它从密文转换回明文。其原理只不过是窃eavesdrop听者将不知道如何对消息解密。加密过程或解密过程一般被称作密码术,且依赖于数学算法。
加密算法通过在消息上执行一连串的数学操作从而对消息进行加密或解密,转换的是消息的外观而非其内容。算法被称作流密码(stream cipher)还是块密码(block cipher),取决于算法转换消息时是一次一个字节还是一次一个块(8 个字节)。加密算法是针对特定用例根据提供给算法的密钥创建的。密钥一般是 0 或 1 的一个随机序列;其大小区分了加密算法的能力。
加密算法通过以下两种方式之一使用密钥:
对称算法要求消息的发送方和接收方使用同一个秘钥;这通常被称作秘钥密码术。
非对称算法使用不同的密钥对消息进行加密或解密;其中一个秘钥必须是秘密的,而另一个密钥通常是公开的。在这种情况下,发送方可能会使用接收方的公钥对消息加密,但是只有接收方拥有用于对消息解密的秘钥。这种涉及到私钥和公钥对的方式也被称作公钥密码术。
对称算法的性能比非对称算法的性能快,但是在参与者之间安全地传递秘钥会引起分发问题。首先,您如何秘密传递密钥,其次,您如何将该方式扩展到多个发送方/接收方对。使用私钥和公钥对能缓解分发问题,因为接收方针对所有发送方发布了一个用来对信息进行加密的公钥,并且用一个私钥(秘钥)对接收到的所有信息解密。您不能对公钥进行逆向工程以获取私钥,而且只有接收方知道私钥。然而,这是以增加的性能开销为代价的。
篡改
篡改包括某人拦截一条消息并更改它。消息摘要解决了篡改问题,消息摘要是消息内容的定长数字表示。消息摘要(又称消息认证代码)是用散列函数计算的。这个过程只是单向的,意味着将函数反向并找到对应于摘要的消息是不可能的,因为该过程以这样一种方式实现,所以找到散列到同一摘要的两条不同消息在计算上难以实现。
一旦计算出了摘要,它就与消息一起被传送。接着,接收方对接收到的消息调用同一个散列函数,并将生成的摘要与接收到的摘要进行比较。如果这两个摘要是相同的,则消息在途中未被篡改。显然,要让这个过程生效,发送方和接收方必须在传送开始前就即将使用的散列函数达成一致。
模仿
当除实际指定的发送方之外的某个人发送消息时,就发生了模仿。要解决这个问题,您需要验证消息实际上是由发送方发送的,还需要认证正在与您交换信息的伙伴。
数字签名用于验证消息是否真正由发送方发送;数字签名结合了消息摘要和公钥密码术的使用。这个过程包括发送方生成消息摘要,然后用其私钥对摘要加密以创建数字签名。然后,接收方使用发送方的公钥对消息解密,确认消息确实是由发送方发送的。将这个摘要与接收方生成的摘要进行比较,进一步确认消息自从被签署就未被修改过。
但是,接收方怎么知道可以信任公钥呢?这个问题通常被称作中间人(man-in-the-middle)攻击,发生在未知的第三方拦截发送方的公钥并用它来交换自己的公钥的时候。于是,伪代理(rogue agent)模仿原发送方并签署被拦截的消息。因为接收方能够对发送的消息解密,所以接收方不知道它正在与一个伪用户进行交互。现在,我们要谈论的问题是,如何认证您正在与之交换信息的伙伴。
通过认证一个公钥属于一个命名的实体,数字证书解决了这个问题。数字证书一般是由名为认证中心(Certification Authority,CA)的可信的第三方签发的。CA 每生成一张数字证书,将需要收费,数字证书包括以下内容:
所有者的公钥
所有者的专有名称
签发证书的 CA 的专有名称
证书开始生效的日期
证书过期日期
版本号
序列号
在签发证书前,认证中心对请求方进行适当的背景检查,以验证该请求方就是它自己所声称的请求方。CA 签发的所有证书都是由 CA 数字签署的,可以使用 CA 证书(它包含 CA 的公钥)对其进行验证。发送方和接收方之间的交换现在采取额外的一个验证步骤。发送方发送由 CA 签发的数字证书,而不仅仅是向接收方发送其公钥。接收方用 CA 的证书来验证发送方的证书,确定证书中所包含的公钥确实属于所有者。在一张数字证书的生命期中,正在签发的 CA 可能会决定该证书不再可信。这样的证书被发布到证书撤销列表(Certificate Revocation List)中,发送方和接收方都可以根据该列表检查接收到的证书。
安全套接字层
SSL 协议使用秘钥加密和公钥加密、数字签名以及数字证书的概念在各方之间建立一个安全连接,并且用这些概念使得在不安全网络上传输安全数据更容易。
握手协议 SSL 是由 Netscape(请参阅 SSL Protocol)设计的,它定义了下列参与者:
SSL 客户机:开始 SSL 连接的调用应用程序
SSL 服务器:响应应用程序
SSL 客户机和 SSL 服务器进行交互以建立一个安全连接。这个交互被称作 SSL 握手:
SSL 客户机开始对话并发送诸如 SSL 版本之类的信息,同时还发送加密算法以及它所支持的散列函数。
SSL 服务器用加密算法以及要使用的散列函数来表示响应。这是从客户机提供的列表中选择的。SSL 服务器还发送一个会话标识、一个随机字节字符串以及它的数字证书。服务器可以包括对客户机的数字证书的请求,这一点是可选的。
通过验证所提供的数字证书上的数字签名,SSL 客户机使用正进行签发的认证中心的证书来验证 SSL 服务器以及数字证书本身。可以根据证书撤销列表检查服务器的证书,这一点是可选的。
如果通过验证,SSL 客户机就发送秘钥,该秘钥将被用于对进一步的交换加密。秘钥使用从服务器的数字证书处获取的 SSL 服务器的公钥对自己进行加密。另外,如果服务器请求数字证书的话,客户机可能会发送它的数字证书。
SSL 服务器使用它的私钥对秘钥解密并存储它。同样地,它使用正在进行签发的认证中心以及可能相关联的证书撤销列表来认证客户机,这是可选的。只有当上面的第 2 步中的服务器请求客户机的证书时,才会发生这一步骤。
SSL 客户机发送一条用秘钥加密的消息,表示 SSL 握手中的客户机部分完成。
SSL 服务器用一条同样用秘钥加密的消息作出响应,表示握手中的服务器部分完成。
现在就建立了一个安全连接,会话其余部分的通信是用秘钥加密的。
为了使 SSL 会话中所使用的加密算法和散列函数的规范更容易,这些算法被分组到各个密码套件(CipherSuite)中。密码套件定义了:
SSL 握手过程中的密钥交换和认证算法
用于保护数据的加密算法
用于生成消息摘要的散列函数
加密算法和散列函数被进一步分组到密码规范中。
WebSphere MQ 5.3 仅支持 RSA 密钥交换和认证算法。下表中列出了一些支持的密码规范的详细信息:
WebSphere MQ 5.3 支持的密码规范
密码规范名称 散列算法 加密算法 加密位数
NULL_MD5 MD5 无 0
NULL_SHA SHA 无 0
RC4_MD5_EXPORT MD5 RC4(流密码) 40
RC4_MD5_US MD5 RC4 128
RC4_SHA_US SHA RC4 128
RC2_MD5_EXPORT MD5 RC2(块密码) 40
DES_SHA_EXPORT SHA DES(块密码) 56
RC4_56_SHA_EXPORT1024 SHA RC4 56
DES_SHA_EXPORT1024 SHA DES 56
TRIPLE_DES_SHA_US3 SHA 3DES(块密码) 168
请注意:
RC2 是一个块密码算法。它按照块(8 字节长度)对数据加密,而且还支持长度为 40 位、64 位和 128 位的密钥。RC4 是一个流密码算法,它对数据的每个字节进行操作;和 RC2 一样,它支持长度为 40 位、64 位和 128 位的密钥。RC2 和 RC4 都是由 RSA Data Security Inc. 制定的。
DES,即美国国家数据加密标准(the United States Data Encryption Standard),是一个块密码算法,块长 8 字节,密钥长 56 位。Triple DES 是 DES 的一个变体,密钥长 168 位。
就性能而言,从最快的到最慢的依次为:RC4、DES、RC2、TripleDES。
SHA 代表安全散列算法(Secure Hash Algorithm),MD5 代表消息摘要版本 5(Message Digest Version 5)。在 MD5 和 SHA-1 之间作选择是安全性和性能之间的权衡。与 MD5 算法的 128 位输出相比,SHA 算法更安全,它产生 160 位输出。但是,MD5 算法在计算消息摘要方面要更快一些。
SSL_RSA_WITH_RC4_SHA_US 是一个支持 MQ 的密码套件的示例。它规定了 RSA 密钥交换和认证算法的使用,还规定了 RC4_SHA_US 密码规范。