一.公钥和私钥介绍
- 公钥和私钥成对出现
- 公开的密钥叫公钥,只有自己知道的叫私钥
- 用公钥加密的数据只有对应的私钥可以解密
- 用私钥加密的数据只有对应的公钥可以解密, (
用私钥加密数据(数字签名),用公钥来验证数字签名
)
二.证书的几种文件扩展名
对于 X.509 标准的证书有两种不同编码格式,一般采用 PEM 编码就以 .pem 作为文件扩展名,若采用 DER 编码,就应以 .der 作为扩展名。但常见的证书扩展名还包括 .crt、.cer、.p12 等,他们采用的编码格式可能不同,内容也有所差别,但大多数都能互相转换,总结如下:
- .pem: 采用 PEM 编码格式的 X.509 证书的文件扩展名;
- .der : 采用 DER 编码格式的 X.509 证书的文件扩展名;
-
.crt : 即 certificate 的缩写,
常见于类 UNIX 系统
,有可能是 PEM 编码,也有可能是 DER 编码,但绝大多数情况下此格式证书都是采用 PEM 编码; -
.cer: 也是 certificate 的缩写,
常见于 Windows 系统
,同样地,可能是 PEM 编码,也可能是 DER 编码,但绝大多数情况下此格式证书都是采用 DER 编码 - .p12: 也写作 .pfx,全称:PKCS #12,是公钥加密标准(Public Key Cryptography Standards,PKCS)系列的一种,它定义了描述个人信息交换语法(Personal Information Exchange Syntax)的标准,可以用来将包含了公钥的 X.509 证书和证书对应的私钥以及其他相关信息打包,进行交换。简单理解:一份 .p12 文件 = X.509 证书+私钥;
- .csr: Certificate Signing Request 的缩写,即证书签名请求,它并不是证书的格式,而是用于向权威证书颁发机构(Certificate Authority, CA)获得签名证书的申请,其核心内容包含一个 RSA 公钥和其他附带信息,在生成这个 .csr 申请的时候,同时也会生成一个配对 RSA 私钥,私钥通常需要严格保存于服务端,不能外泄。
- .key: 通常用来存放一个 RSA 公钥或者私钥,它并非 X.509 证书格式,编码同样可能是 PEM,也可能是 DER,查看方式如下:
PEM 编码格式:openssl rsa -in xxx.key -text -noout
DER 编码格式:openssl rsa -in xxx.key -text -noout -inform der
三.什么是HTTPS,TLS,SSL
- http是超文本传输协议,信息是明文传输(
80端口
),https 则是具有安全性的ssl加密传输协议(443端口
) - HTTPS,也称作HTTP over TLS。TLS的前身是SSL,TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。下图描述了在TCP/IP协议栈中TLS(各子协议)和HTTP的关系。
- HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议.
四.https握手过程
- 客户端发起HTTPS请求
- 服务端的配置
- 传送证书
这个证书其实就是服务器的公钥
,只是包含了很多信息,如证书的颁发机构,过期时间等等,该公钥的目的是为了和服务器端之间协商对称秘钥对使用,也就是服务器用子自己的私钥加密数据,客户端要用该公钥进行解密; - 客户端解析证书
这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机值。然后用证书对该随机值进行加密。就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。 - 传送加密信息
这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。服务器与客户端之间的数据传输过程是采用对称加密方式加密的;
四.什么是CA和证书
以上三步骤中的第3步骤中提到的服务器的公钥,在网络中客户被人所冒充,所以这里就引入了CA的概念,也就是上门面第4步骤说的验证公钥的权威机构;
CA,Catificate Authority,它的作用就是提供证书(即服务器证书,由域名、公司信息、序列号和签名信息组成)加强服务端和客户端之间信息交互的安全性,以及证书运维相关服务。任何个体/组织都可以扮演 CA 的角色,只不过难以得到客户端的信任,能够受浏览器默认信任的 CA 大厂商有很多,其中 TOP5 是 Symantec、Comodo、Godaddy、GolbalSign 和 Digicer
扮演 CA 角色,就意味着要管理大量的 pair 对,而原始的一对 pair 对叫做 root pair,它包含了 root key(ca.key根证书秘钥)和 root certificate(ca.cert.pem根证书)。通常情况下,root CA (根证书)不会直接为服务器或者客户端签证,它们会先为自己生成几个中间 CA(intermediate CAs),这几个中间 CA 作为 root CA 的代表为服务器和客户端签证。
也就是说这几个中间CA可以签发客户端证书和服务器端证书;
引用:http://www.barretlee.com/blog/2016/04/24/detail-about-ca-and-certs/
- 证书包含信息:
- 证书信息:过期时间和序列号
- 所有者信息:姓名,公司地址,域名等等
- 所有者公钥
我们需要自己制作申请CA证书的.csr文件(该文件包含申请者的身份,公司,所在省份,域名等等信息),然后将csr申请文件提交给权威的CA机构,CA机构经过审核申请者身份后,通过认证,下发认证后的证书;
将经CA过认证的过的证书配置到自己服务器中,当用户访问我们https服务器的时候,服务器会将该证书传递给浏览器,浏览器厂商会默认存有各大权威CA机构的根证书(包含对应证书的公钥),根据CA根证书验证服务器的证书是否是该机构认证;具体申请和认证流程如下:
图片来源(http://www.jianshu.com/u/e50343300b96)
当然CA机构可以自己搭建,也就是自己通过openssl工具创建CA秘钥和CA根证书,利用CA根证书对服务器证书或客户端证书进行签名认证;
五.CA认证,签名,数据加密等算法分类
消息摘要算法:MD5、和SHA(对数字证书本省做摘要处理,用于验证数据完整性服务器)
对称加密算法:RC2、RC4、IDEA、DES、AES(对数据进行加密/解密操作,用于保证数据保密性服务)
非对称加密算法:RSA、DH(对数据进行加密/解密操作,用于保证数据保密性服务)
数字签名算法:RSA、DSA(对数据进行签名/验证操作,保证数据的完整性和抗否认性)。