https 漫谈
https是个好东西,最起码不会在浏览器右下角跳出来“小红包”。
加个小字是因为我遇到的都是会跳小苹果的红包,简称小红包。
什么是https
http还是指的http,最后的s是新东西,指的是SSL 安全套阶层,其实就是一个加密的动作
- SSL 现在应该叫 TLS 了,二者都只是规范,很安全
- 而 OpenSSl 是 SSL 规范的代码实现;既然是代码,就可能存在 Bug ,只是被发现和没被发现
虽然https里s是在最后的,但是这个加密动作其实是在http前进行的,否则就没有意义了
因为http 和 s 是分开的模块,所以你可以只部署一台简单的https服务器做外壳,内部接多个普通的http应用就可以了。
为什么要https
- 《论程序员的自我修养》
- 有了https才能做一些其他的事情,比如~
不要那么多废话,告诉我怎么搞
密钥文件 - 先自己想出一个密码
# DES -> 3DES -> AES 128,192,256
openssl genrsa --aes256 -out me.key 2048证书申请 - 用自己想出的密码,打造一个模具出来
证书文件 - 这里就有两种选择了
- 权威 - 把模具交给专业的权威机构打造成密码箱
- 我就是权威 - 自己用模具打造密码箱
你当然可以给不同的服务,用不同的密码打造配套的模具
然后呢
其实部署的时候,只需要用到上面提到的2个东西
- 密钥文件 - 用来开密码箱的密码
- 证书文件 - 用模具打造出来的密码箱
以Nginx为例,就是:
server { |
权威和我就是权威的区别
根证书 - 权威机构打造模具的锤子是开过光的。直接内置在各大浏览器和操作系统里面,不可能被伪造。
二级根证书 - 这可是开过光的锤子,金贵的很,当然不能直接给你们用。所以我们先用这个开过光的锤子,打造一批锤子出来,再用这批锤子去打造你们的模具。
自签名证书 - 纯手工打造
自签名根证书 - 我给我自己的锤子开光~
- openssl genrsa -out ca.key 4096
- openssl req -new -x509 -key ca.key -out ca.cert
权利和义务
签发出去的证书,就像身份证一样:
- 正面是权利 - 机构可以证明你就是你。
- 反面是义务 - 证是机构发的,出了事情肯定会去找机构。
名词解释
- X.509 证书标准,主要定义了证书中应该包含哪些内容
- 编码
- PEM(Privacy Enhanced Mail): 文本格式
- 以”—–BEGIN…”开头”—–END…”结尾,内容是BASE64编码
- 查看PEM格式证书的信息:openssl x509 -in certificate.pem -text -noout
- Apache和*NIX服务器偏向于使用这种编码格式
- DER(Distinguished Encoding Rules): 二进制格式
- 不可读
- 查看DER格式证书的信息:openssl x509 -in certificate.der -inform der -text -noout
- Java和Windows服务器偏向于使用这种编码格式
- 二者转换:
- openssl x509 -in cert.pem -outform der -out cert.der
- openssl x509 -in cert.pem -outform der -out cert.der
- PEM(Privacy Enhanced Mail): 文本格式
文件扩展名
- KEY 公钥或者私钥文件
- CSR 证书请求(Certificate Signing Request),核心内容是一个公钥和申请人的信息
- CRT 证书文件,大多是PEM编码,常见于*Nix系统
- CRE 证书文件,大多是DER编码,常见于Windows系统
- PFX/P12 是PKCS#12标准(Personal Information Exchange Syntax Standard)常用的后缀名,用来存放证书和密钥的二进制文件。*NIX 服务器的 CRT 和 KEY 文件是分开在不同的文件中的,但是Windows的IIS则把他们打包进一个文件里面,使用密码进行打包/提取
- JKS 是Java Key Storage的缩写,是java用来存放密钥的文件。一般是用java的keytool工具进行生成