1 概述
1.1 HTTPS
使用SSL协议,对HTTP协议通讯过程当中的明文数据加密,这就是HTTPS。网络分层结构以下:算法
SSL协议负责数据加密,解密,位于HTPP协议和TCP协议之间。
客户端和服务器端使用HTTPS通讯的时候,分为两个阶段:SSL握手阶段和HTTPS正式通讯阶段。
1.2 对称加密
对称加密只有一个密匙,使用该密匙加密和解密数据。
客户端和服务器端,在使用HTTPS协议通讯阶段,数据使用对称加密算法。
流行的对称加密算法包括:DES,RC2,RC4,Triple-DES。
1.3 非对称加密
非对称加密有两个密匙,分别是私匙和公匙。公钥与私钥是一对,若是用公钥对数据进行加密,只有使用对应的私钥才能解密;若是使用私钥对数据进行加密,只有使用对应的公钥才能解密。
客户端和服务器端,在HTTPS协议的SSL握手阶段,使用非对称加密算法。
流行的非对称加密算法包括:RSA,DSA,ECC/ECDH/ECDSA等。
2 HTTPS交互过程
HTTPS的交互过程分为两个阶段:SSL握手阶段,和正式通讯阶段。过程以下:apache
当客户端与服务器端第一次通讯的时候,浏览器将它支持的加密算法列表发送给服务器。服务器在加密算法列表中选择一个加密算法,而后将服务器本身的证书,以及一个hash算法返回给浏览器。
浏览器收到服务器的证书之后,须要执行证书验证。若是经过证书验证,表示证书合法;若是没有经过证书验证,那么会弹出一个对话框,提示该网址的根证书不受信任,有安全问题。
若是证书验证经过,或者用户选择信任该网站的证书,那么浏览器会生成一个随机数(该随机数将做为HTTPS通讯阶段,对称加密的密匙)。而后使用证书中包含的公匙加密该随机数。使用随机数加密握手信息,使用服务器指定的hash算法hash握手信息。而后将这三部分信息传递给服务器。
服务器收到浏览器的信息后,使用私匙解密随机数;使用随机数解密握手信息,而后hash握手信息。最后对比浏览器传递过来的hash(握手信息)以及本身生成的hash(握手信息),若是二者相同。服务器将给浏览器返回以下两种信息:使用随机数加密的握手信息,以及hash(握手信息)。
浏览器收到服务器的信息后,使用随机数解密握手信息,而后对握手信息执行hash,最后与服务器传递过来的hash(握手信息)对比,若是二者相同,那么认为SSL握手成功。
当SSL握手成功后,使用上面生成的随机数,做为对称加密的密匙,双方但是通讯。
浏览器和服务器互发加密的握手信息并验证的目的是保证双发获取到的密码一致,并可正常加密,解密。为后续真正的数据传输做一次测试。
整个HTTPS协议的过程当中,使用了非对称加密算法和对称加密算法。非对称加密算法的目的就是为对称加密算法生成密匙。
3 CA及证书
在SSL握手阶段,一个重要的要素就是公匙。经过使用证书,可确保加密传输数据的公匙不被篡改。证书用来证实公钥拥有者身份的凭证。
CA是颁发证书的组织结构,是可信机构,CA保证了由它所颁发的证书是没有被篡改过的。
证书分多级,包括:根证书,中级证书,以及三级证书。相应的CA结构也分多级,包括:RootCA,intermediates CAs。它们之间的关系以下图:windows
Root CA颁发根证书,Insermediates CA颁发中级证书和三级证书。根证书用来保证中级证书没有被篡改;中级证书用来保证三级证书没有被篡改;三级证书用来保证,SSL握手过程当中传递的公匙没有被篡改。
在操做系统中,通常会内置多个根证书和中级证书,并根据须要安装三级证书。多级证书造成链式结构。
3.1 证书的内容
当使用证书生成工具,如:keytool工具,或者openssl工具,会生成两个文件。xxx.keystore密码文件和xxx.cer证书文件。xxx.keystore文件中含有私钥,须要将其配置到服务器端;xxx.cer文件持有公钥,须要将其安装到客户端。
在xxx.cer证书文件中,通常会包含以下内容:浏览器
在windows系统中,打开证书文件后,其内容以下图:tomcat
证书签名的生成规则以下:
对证书的明文信息执行hash,生成摘要信息;
使用私钥加密摘要信息,生成证书的签名。
若是证书是根证书,那么该证书的签名是自签名。即:使用本身的私钥加密摘要信息。若是证书是中级证书,或者三级证书,那么使用该证书的上级证书的私钥加密摘要信息,造成签名。
3.2 证书的颁发
Root CA机构负责为Intermediates CA机构颁发证书,为Intermediates CA机构颁发的证书是中级证书。也就是说Intermediates CA机构持有中级证书。
在为Intermediates CA机构颁发中级证书以前,Root CA机构必须有本身的根证书。Root CA机构的证书是自签名证书。
在给Intermediates CA机构颁发证书的时候,Root CA机构会将本身的组织名称写入到中级证书中,而且用根证书的私钥中级证书的摘要信息,造成签名,也写入中级证书中。
Intermediates CA机构给下级Intermediates CA结构颁发证书的流程也是如此:将本身的组织机构名称写入下级证书;用本身的私钥加密下级证书的摘要信息,做为下级证书的签名。
其关系以下图所示:安全
由上图可见,下级证书持有上级证书的名称,并持有由上级证书生成的签名。服务器
3.3 证书验证
当SSL握手的时候,服务器端会将本身的证书传递给浏览器,浏览器须要验证证书的有效性,其流程以下:网络
整个验证过程分两部分:查找上级证书和逐级向下验证两个过程。在第一过程当中,根据当前证书持有的上级CA机构的名称,在操做系统的证书链中,查找上级CA机构的证书。一直递归该过程,直到找到根证书。
当找到根证书后,用根证书的私钥解密下级证书的签名,造成摘要信息。同时使用hash算法,将下级证书的明文信息做hash处理,生成另一份摘要信息。对比两份摘要信息,若是相同,那么证实该下级证书有效,可信。
当验证完证书链中全部的证书后,就可证实服务器传递过来的三级证书是有效,可信的。使用该三级证书的公钥加密浏览器生成的随机数,做为对称加密的密码,再次传递到服务器端。服务器端使用私钥解密该随机数,得到对称加密的密码。经过这个过程,客户端、服务器端就持有了对称加密的密码,可以使用该密码正式通讯。
3.5 生成证书
可以使用jdk的工具KeyTool生成证书。生成证书分两步:建立证书,导出证书。由此方式生成证书是自签名的根证书。
3.5.1 建立证书
执行以下命令,会建立证书:
工具
keytool -genkey -alias lifeng -keypass 123456 -keyalg RSA -keysize 1024 -validity 365 -keystore d:/tomcat.keystore -storepass 123456
各参数解释以下:
-genkey 表示要生成一个证书,该证书包含私匙。建立方本身使用,通常配置大tomcat服务器上。
-alias 给证书起别名,随意
-keypass 访问证书内条目的时候所须要的密码;
-storepass 访问证书文件所须要的秒;
-keyalg 生成证书的算法
-keysize 证书密码的大小
-keystore 生成的证书文件名称,以及保存位置。
当执行该命令后,会有一些列交互,分别以下:性能
当完成该命令后,会在指定的路径生成一个名为tomcat.keystore的证书文件,该文件持有公钥和私钥。须要将该文件配置到服务器上。
3.5.2 导出证书
须要从前面生成tomcat.keystore文件中,将公钥导出,造成证书。执行以下命令,会导出证书:
keytool -export -keystore d:/tomcat.keystore -file d:/server.cer -storepass 123456 -keypass 123456 -alias lifeng
该命令执行成功后,会在指定的位置,生成一个名称为server.cer的证书文件。将该文件导入到客户端浏览器便可。
4 证书安装
4.1 服务器端证书安装
在tomcat的<connector>配置节,执行以下配置:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="你的keystore路径" keystorePass="生成证书时的口令" />
配置属性解释以下:
clientAuth 若是设为true,表示Tomcat要求全部的SSL客户出示安全证书,对SSL客户进行身份验证
keystoreFile 指定keystore文件的存放位置,能够指定绝对路径,也能够指定相对于 (Tomcat安装目录)环境变量的相对路径。若是此项没有设定,默认状况下,Tomcat将从当前操做系统用户的用户目录下读取名为 “.keystore”的文件。
keystorePass 密钥库密码,指定keystore的密码。(若是申请证书时有填写私钥密码,密钥库密码即私钥密码,不然填写密钥库密码文件中的密码)
sslProtocol 指定套接字(Socket)使用的加密/解密协议,默认值为TLS
4.2 客户端证书安装
在windows系统中,点击证书文件,打开以下图所示的界面:
点击“安装证书”按钮,将打开证书导入向导对话框,一路下一步操做,直到完成。
在使用HTTPS通讯的时候,若是客户端没有安装证书,或者证书不可信,会弹出告警信息。根据实际状况,可选择信任此证书,继续通讯;或者终止通讯。
5 SSL卸载
因为非对称加密会损耗大量服务器性能,因此提供了单独的硬件设备,用来处理SSL握手,以及http通讯加密,解密。将密文的https数据转换成明文的http过程,被称为SSL卸载。以下图所示:
SSLGW是特定的加密,解密设备,将https协议转换为http协议。SSLGW后面对应的是企业私网,可保证通讯安全。
6 其余
6.1 证书的分类
证书有多重类型,负责HTTPS通讯的服务器证书只是其中一种。证书的主要类型包括:我的身份证书、企业或机构身份证书、支付网关证书、服务器证书、安全电子邮件证书、我的代码签名证书,这些数字证书特色各有不一样。
我的身份证书
符合 X.509 标准的数字安全证书,证书中包含我的身份信息和我的的公钥,用于标识证书持有人的我的身份。数字安全证书和对应的私钥存储于 E-key 中,用于我的在网上进行合同签订、定单、录入审核、操做权限、支付信息等活动中标明身份。
企业或机构身份证书
符合 X.509 标准的数字安全证书,证书中包含企业信息和企业的公钥,用于标识证书持有企业的身份。数字安全证书和对应的私钥存储于 E-key 或 IC 卡中,能够用于企业在电子商务方面的对外活动,如合同签订、网上证券交易、交易支付信息等方面。
支付网关证书
支付网关证书是证书签发中心针对支付网关签发的数字证书,是支付网关实现数据加解密的主要工具,用于数字签名和信息加密。支付网关证书仅用于支付网关提供的服务(Internet 上各类安全协议与银行现有网络数据格式的转换)。支付网关证书只能在有效状态下使用。支付网关证书不可被申请者转让。
服务器证书
符合 X.509 标准的数字安全证书,证书中包含服务器信息和服务器的公钥,在网络通信中用于标识和验证服务器的身份。数字安全证书和对应的私钥存储于 E-key 中。服务器软件利用证书机制保证与其余服务器或客户端通讯时双方身份的真实性、安全性、可信任度等。
企业或机构签发给软件提供商的数字证书,包含软件提供商的身份信息、公钥及 CA 的签名。软件提代码签名证书
安全电子邮件证书符合 X.509 标准的数字安全证书,经过 IE 或 Netscape 申请,用 IE 申请的证书存储于 WINDOWS 的注册表中,用 NETSCAPE 申请的存储于我的用户目录下的文件中。用于安全电子邮件或向须要客户验证的 WEB 服务器(https 服务) 代表身份。 我的代码签名证书 我的代码签名证书是 CA 中心签发给软件提供人的数字证书,包含软件提供我的的身份信息、公钥及 CA 的签名。软件提供人使用代码签名证书对软件进行签名后放到 Internet 上,当用户在 Internet 上下载该软件时,将会获得提示,从而能够确信:软件的来源;软件自签名后到下载前,没有遭到修改或破坏。代码签名证书能够对 32-bit .exe 、 .cab 、 .ocx 、 .class 等程序和文件进行签名。 从数字证书的技术角度分,CA中心发放的证书分为两类:SSL证书和SET证书。通常地说,SSL 证书(安全套接层)是服务于银行对企业或企业对企业的电子商务活动的;而SET(安全电子交易)证书则服务于持卡消费、网上购物。虽然它们都是用于识别身份和数字签名的证书,但它们的信任体系彻底不一样,并且所符合的标准也不同。