基于SSL协议的双向认证 - 数字证书 [2]

时间:2022-12-31 21:05:20

1.1    数字证书

1.1.1   概念理解

一种文件的名称,例如一个机构或人的签名,能够证明这个机构或人的真实性。简而言之数字证书是一种网络上证明持有者身份的文件,同时还包括有公钥。证书是由国际上公认的证书机构颁发,这些机构是公认的信任机构。要想请这些机构颁发证书是要给钱的。客户端程序通过维护一个“根授信机构列表”,当收到一个证书时,查看这个证书是否在该列表中,如果是则这个证书是可信的,否则就不信任。

1.1.2   证书的信任

作为一个HTTPS的站点需要与一个证书绑定,无论如何,证书总需要一个机构颁发的,这个机构是国际公认的证书机构,也可以是任何一台安装有证书服务器的计算机,客户端能否信任这个站点证书,首先取决于客户端程序是否导入了证书颁发者的根证书。如图:

基于SSL协议的双向认证 - 数字证书 [2]

1.1.1  加密与认证

加密是指通信双方为了防止铭感信息在信道上被第三方窃听二泄露,将明文通过加密变成密文,如果第三方无法解密的话,就算他获得密文也无能为力;认证是指通信双方为了确认对方是值得信任的消息发送方或接受方,采取确认身份的方式。只有同时进行了加密和认证才能保证通信安全。

1.1.2   加密算法类型

1.1.3   对称机密:

密钥只有一个,加密解密为同一个密码,且加解密速度快,典型的对称加密算法有DES、AES等;

1.1.4   非对称机密:

密钥成对出现(且根据公钥无法推知私钥,根据私钥也无法推知公钥),加密解密使用不同密钥(公钥加密需要私钥解密,私钥加密需要公钥解密),相对于对称加密速度较慢,典型的非对称加密算法有RSA、DSA等。

1.1.5   CA

电子商务认证授权机构(CA,Certificate Authority),也称为电子商务认证中心,是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任。

Ø  CA中心为每个使用公开密钥的用户发放一个数字证书,数字证书的作用是证明证书中的用户合法拥有证书中列出的公开密钥。CA机构的数字签名使得攻击者不能伪造和篡改证书。在SET交易中,CA不仅对持卡人、商户发放证书,还要对获款的银行、网关发放证书。

Ø  CA的证书签发机构,它是PKI(Public Key Infrastructure,公钥基础设施)的核心。CA是负责签发证书、认证证书、管理已颁发证书的机关,它要制定政策和具体步骤来验证、识别用户身份,并对用户证书进行签名,以确保证书持有者的身份和公钥的拥有权。

Ø  CA也拥有一个证书(内含公钥)和私钥。网上的公众用户通过验证CA的签字从而信任CA,任何人都可以得到CA的证书(含公钥),用以验证它所签发的证书。

Ø  如果用户得到一份属于自己的证书,它应先向CA提出申请,在CA判明申请者身份后,便为他分配一个公钥,并且CA将该公钥与申请者的身份信息绑定在一起,并为之签字后,便形成证书发给申请者。

Ø  如果一个用户想鉴别另一个证书的真伪,它就用CA的公钥对那个证书上的签字进行验证,一旦验证通过,该证书就被认为是有效的。

1.1.6   CA认证证书

Ø  证书实际是由证书签证机关(CA)签发的对用户的公钥的认证。

Ø  证书的内容包括:电子签证机关信息、公钥用户信息、公钥、权威机构的签字和有效期等等。目前,证书的格式和验证方法普通遵循X.509国际标准。

Ø  如何在电子文档上实现签名的目的呢?我们可以使用数字签名。RSA公钥*可实现对数字信息的数字签名,方法如:信息发送者用其私钥对从所传报文中提取出特征数据(或称数字指纹)进行RSA算法操作,以保证发信人无法抵赖曾发过该信息(即不可抵赖性),同时也确保信息报文在传递过程中未被篡改(即完整性)。当信息接收者收到报文后,就可以用发送者的公钥对数字签名进行验证。在数字签名中有重要作用的数字指纹是通过一类特殊的散列函数(HASH函数)生成的,对这些HASH函数的特殊要求是:

(1). 接受的输入报文数据没有长度限制。

(2). 对任何输入报文数据生成固定长度的摘要(数字指纹)输出。

(3). 从报文能方便地算出摘要。

(4).  难以对指定的摘要生成一个报文,而由该报文可以算出该指定的摘要。

(5). 难以生成两个不同的报文具有相同的摘要。

1.1.7   CA认证验证

接收方在收到信息后用如下的步骤验证您的签名:

(1). 使用自己的私钥信息转为明文。

(2). 使用发信方的公钥从数字签名部分得到原摘要。

(3). 收方对您所发送的源信息进行HSAH运算,也产生一个摘要。

(4). 收方比较两个摘要,如果两者相同,则可以证明信息签名者的身份。

如果两个摘要内容不符合,则说明:

Ø  可能对摘要进行签名所用的私钥不是签名者的私钥,这就表明信息的签名者不可信。

Ø  也可能收到的信息根本就不是签名者发送的信息,信息在传输过程中已经遭到破坏或篡改。

CA认证数字证书

数字证书为实现双方安全通信提供了电子认证。在因特网、公司内部网或外部网中,使用数字证书实现身份识别和电子信息加密。数字证书中含有密钥对(公钥和私钥)所有者的识别信息,通过验证识别信息的真伪实现对证书持有者身份的认证。

1.1.8   CA认证使用数字证书

数字证书在用户公钥后附加了用户信息及CA的签名,公钥是密钥的一部分,另一部分是私钥。公钥公之于众,谁都可以使用。私钥只有自己知道。由公钥加密的信息只能由与之相对应的私钥解密。为确保只有某个人才能阅读自己的信件,发送者要用收件人的公钥加密信件。

收件人便可用自己的私钥解密信件,同样,为证实发件人的身份,发送者要用自己的私钥对信件进行签名。收件人可使用发送者的公钥对签名进行验证,以确认发送者的身份。

基于SSL协议的双向认证 - 数字证书 [2]

在线交易中您可使用数字证书验证对方身份,用数字证书加密信息,可以确保只有接收者才能解密、阅读原文,信息在传递过程中的保密性完整性,有了数字证书网上安全才得以体现,电子邮件、在线交易和信用卡购物的安全才能得到保障。

1.1.1   自己做CA

不管你的证书是由那个机构颁发的,对于通讯过程来说都是安全的,因此对于某个特定的圈子来说,完全可以由该圈子中公认的机构做CA。比如对于一个企业来说,企业及其客户所组成的圈子中,企业可以认为是具有权威新的,于是就可以作为一个权威机构向客户颁发证书。

在这里需要使用一个软件OPENSSL,OPENSSL的功能相当强大,我们只使用CA相关部分功能,在使用OPENSSL前,先要设置一下环境变量OPENSSL_CONF,使其指向OPENSSL安全目录下的OPENSSL.CNF文件。产生证书的过程大致为:生成密钥对->生成签证请求->签证。签证后的证书就是数字证书,其中保存有对应实体的公钥信息。

1.2     一些技术术语

1.2.1   密钥

公钥和私钥的统称为密钥。

1.2.2   密钥对

公钥(证书)和私钥成对存在。

通信双方各持有自己的私钥和对方的公钥,自己的私钥需密切保护,而公钥是公开给对方的。在Windows下,单独存在的公钥一般后缀是.cer的文件。

1.2.3   公钥与私钥

在现代密码*中加密和解密是采用不同的密钥(公开密钥),也就是非对称密钥密码系统,每个通讯方均需要两个密钥,即公钥和私钥,这两把密钥可以互为加解密。公钥是公开的,不需要保密,而私钥是由个人自己持有,并且必须妥善保管和注意保密。

1.2.4   公钥私钥的原则

Ø  一个公钥对应一个私钥。

Ø  在密钥对中,对大家都知道的是公钥,不告诉大家,只有自己知道的,是私钥。

Ø  如果用其中一个密钥加密数据,则只有对应的那个密钥才可以解密。

Ø  如果用其中一个密钥可以解密数据,则该数据必然是对应的那个密钥进行的加密。

Ø  非对称密钥密码系统的主要应用就是公钥加密和公钥认证,而公钥加密的过程和公钥认证的过程是不一样的。

比如有两个用户甲、乙两个用户,甲用户想把一段明文通过双钥加密的技术发送给乙,乙有一对密钥(私钥和公钥),那么加密盒解密的过程如下例子:

(1). 乙用户将他的公开密钥传送给甲。

(2). 甲用乙的公开密钥加密他的消息,然后传送给乙。

(3). 乙用他的私人密钥解密甲发送的消息。

那么乙是怎么辨认甲的呢,如下例子:

(1). 甲用他的私人密钥对文件加密,从而对文件签名。

(2). 甲将签名后的文件传送给乙。

(3). 乙用甲的公钥解密文件,从而验证签名。

1.2.5   JKS(Java key store)

Java用的存储密钥的容器,可以同时容纳N个公钥或私钥,后缀一般是.jks或者.keystore或.truststore等,千奇百怪。不管什么后缀,它就是一个容器,各个公司或机构叫法不同而已,比如把只包含“受信任的公钥”的容器存在.truststore文件等。

Ø  用jdk\bin目录下的keytool.exe对其进行查看、导入、导出、删除、修改密码等各种操作。

Ø  可以对jks容器加入密码,输入正确才可以操作此容器中密钥。

Ø  还有一个密码的概念与上着不同,是jks中存储着的私钥的密码,通常是绝密的。

Ø  pfx功能和jks功能相同但是文件格式不同,pfx是浏览器用的,可以用一些工具程序把pfx转化成jks格式供java程序使用。

1.3    常见的几种HTTPS系统访问

经https协议的数据经过加密传输,防止第三方监听,冒充和篡改。

Ø  不需要用户做任何操作,比如:https://www.verisign.com

这是因为公钥是合法的(公钥是可信任的机构颁发,和实际域名吻合,而且没有到期)。用IE访问时空白处点右键可以查看公钥信息。

Ø  HTTPS的页面会弹出公钥确认提示

公钥不合法(不是可信任的机构颁发,和实际域名不吻合,已到期),但用户点“是”即表示忽略危险,继续访问。

Ø  需要向浏览器中导入一个文件才可以继续访问

一般是银行在线交易等特别需要安全的场合,站方(银行)需要验证访客身份(如果确认必须是已注册的网银商户),需要在浏览器中导入含有访客私钥的pfx文件。