角色:
server 服务器就是网站所有者 、client 就是访问网站的用户 、CA 证书颁发机构。
客户端与服务器https通讯步骤
1、客户端发起请求,生成一个client_random发给服务器
2、服务器收到请求,返回证书、sessionID、加密方式、server_random
3、客户端收到证书,使用证书公钥加密PreMaster密钥。
4、服务器使用私钥节目取得PreMaster密钥.
5、两边用PreMaster+client_random+server_random制作一个Master密钥。
6、使用Master密钥完成数据传输。
证书基础知识:
什么是公钥和私钥?
公钥和私钥就是俗称的不对称加密方式。公钥(Public Key)与私钥(Private Key)是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),公钥是密钥对中公开的部分,私钥则是非公开的部分。公钥通常用于加密会话密钥、验证数字签名,或加密可以用相应的私钥解密的数据。
通过这种算法得到的密钥对能保证在世界范围内是唯一的。使用这个密钥对的时候,如果用其中一个密钥加密一段数据,则必须用另一个密钥才能解密。比如用公钥加密的数据就必须用私钥才能解密,如果用私钥进行加密也必须用公钥才能解密,否则将无法成功解密。
数字证书
数字证书是一个经证书授权中心(CA)数字签名的包含公开密钥拥有者信息以及公开密钥的文件。
最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。数字证书还有一个重要的特征就是只在特定的时间段内有效。
数字证书的作用
1、https网站身份证明。通过证书能够了解证书持有人(网站)的身份信息、域名信息。
2、证书发行机构信息,可以是树状。如果证书的根发行机构是权威机构,浏览器信赖权威机构,权威机构对证书机构树信任链负责,从而浏览器可以信任证书的持有人。如果证书的根发行机构不是权威机构(比如当初的12306),需要用户手动信赖证书,吐糟12306这个风骚滴操作,完美支持钓鱼网站、中间人伪造证书窃取信息。
3、加密传输数据。客户端和服务端利用证书里面的公钥协商一个对称加密协议所需的密钥。然后加密传递数据。
数字证书的制作
1、整理域名、网站所有者信息。CA要对你提供的信息进行验证。
2、制作私钥xxx.key和证书请求文件xxx.csr。可以keytool制作也可以openSSL制作。
3、提交CSR和你的信息,申请证书。
数字证书格式介绍:
*.DER 或 *.CER 文件: 这样的证书文件是二进制格式,只含有证书信息,不包含私钥。
*.CRT 文件: 这样的证书文件可以是二进制格式,也可以是文本格式,一般均为文本格式,功能与 *.DER 及 *.CER 证书文件相同。
*.PEM 文件: 这样的证书文件一般是文本格式,可以存放证书或私钥,或者两者都包含。 *.PEM 文件如果只包含私钥,一般用 *.KEY 文件代替。
*.PFX 或 *.P12 文件: 这样的证书文件是二进制格式,同时包含证书和私钥,且一般有密码保护。
ps.
.JKS文件不是证书文件,是使用keytool生成的keystore文件,存放私钥和证书。可以导出私钥和证书。
数字证书格式转换:
将 JKS 格式证书转换成 PFX 格式
可以使用 JDK 中自带的 Keytool 工具,将 JKS 格式证书文件转换成 PFX 格式。
执行以下命令将 server.jks 证书文件转换成 server.pfx 证书文件:
keytool -importkeystore -srckeystore D:\server.jks -destkeystore D:\server.pfx -srcstoretype JKS -deststoretype PKCS12
将 PFX 格式证书转换为 JKS 格式
使用 JDK 中自带的 Keytool 工具,执行以下命令将 server.pfx 证书文件转换成 server.jks 证书文件:
keytool -importkeystore -srckeystore D:\server.pfx -destkeystore D:\server.jks -srcstoretype PKCS12 -deststoretype JKS
将 PEM/KEY/CRT 格式证书转换为 PFX 格式
将 KEY 格式密钥文件(server.key)和 CRT 格式公钥文件(server.crt)拷贝至 OpenSSL 工具安装目录,使用 OpenSSL 工具执行以下命令将证书转换成 server.pfx证书文件:
openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt
将PFX转换为PEM/KEY/CRT
将 PFX 格式证书文件拷贝至 OpenSSL 安装目录,使用 OpenSSL 工具执行以下命令将证书转换成 server.pem 证书文件、KEY 格式密钥文件(server.key)和 CRT 格式公钥文件(server.crt):
• openssl pkcs12 -in server.pfx -nodes -out server.pem
• openssl rsa -in server.pem -out server.key
• openssl x509 -in server.pem -out server.crt
使用 Keytool 工具生成 CSR 文件
CSR 文件证书请求文件,利用该文件申请证书。
使用 Keytool 工具生成 CSR 文件
服务器开通https
1、server 申请证书。向CA申请证书。,
2、CA颁发证书、私钥。
3、tomcat里面设置证书和私钥位置。
http://tomcat.apache.org/tomcat-8.0-doc/ssl-howto.html
Diffie–Hellman算法。
除了用RSA算法交换PreMaster,还有一种方法Diffie–Hellman算法。
client 和server协商一个明文。
client 使用私钥C对明文加密得到密文C,server使用私钥S对明文加密得到密文S。
交换密文C和密文S
client 使用私钥C对密文S加密,server使用私钥对密文C进行加密。加密后的结果是一样的。
client端结果:明文 --S加密-->密文S--C加密-->密文CS
server端结果:明文 --C加密-->密文C--S加密-->密文CS
需要注意的是加密算法要满足一个条件,即更换密钥加密顺序不影响加密结果。
refenrence:
http://www.codeceo.com/article/https-worker.html
https://help.aliyun.com/knowledge_list/42212.html?spm=5176.doc28548.6.557.xIxBud