https是个好东西,最起码不会在浏览器右下角跳出来“小红包”。

加个小字是因为我遇到的都是会跳小苹果的红包,简称小红包。

什么是https

  1. http还是指的http,最后的s是新东西,指的是SSL 安全套阶层,其实就是一个加密的动作

    • SSL 现在应该叫 TLS 了,二者都只是规范,很安全
    • 而 OpenSSl 是 SSL 规范的代码实现;既然是代码,就可能存在 Bug ,只是被发现和没被发现
  2. 虽然https里s是在最后的,但是这个加密动作其实是在http前进行的,否则就没有意义了

  3. 因为http 和 s 是分开的模块,所以你可以只部署一台简单的https服务器做外壳,内部接多个普通的http应用就可以了。

为什么要https

  1. 《论程序员的自我修养》
  2. 有了https才能做一些其他的事情,比如~

不要那么多废话,告诉我怎么搞

  1. 密钥文件 - 先自己想出一个密码

    # DES -> 3DES -> AES 128,192,256
    openssl genrsa --aes256 -out me.key 2048
  2. 证书申请 - 用自己想出的密码,打造一个模具出来

  3. 证书文件 - 这里就有两种选择了

    • 权威 - 把模具交给专业的权威机构打造成密码箱
    • 我就是权威 - 自己用模具打造密码箱
  4. 当然可以给不同的服务,用不同的密码打造配套的模具

然后呢

其实部署的时候,只需要用到上面提到的2个东西

  1. 密钥文件 - 用来开密码箱的密码
  2. 证书文件 - 用模具打造出来的密码箱

以Nginx为例,就是:

server {
...
listen 443 ssl;
server_name localhost;
ssl_certificate /etc/CA/nginx.crt; # 证书文件的相对或者绝对路径
ssl_certificate_key /etc/CA/nginx.key; # 密钥文件的相对或者绝对路径
...
}

权威和我就是权威的区别

  1. 根证书 - 权威机构打造模具的锤子是开过光的。直接内置在各大浏览器和操作系统里面,不可能被伪造。

  2. 二级根证书 - 这可是开过光的锤子,金贵的很,当然不能直接给你们用。所以我们先用这个开过光的锤子,打造一批锤子出来,再用这批锤子去打造你们的模具。

  3. 自签名证书 - 纯手工打造

  4. 自签名根证书 - 我给我自己的锤子开光~

    1. openssl genrsa -out ca.key 4096
    2. 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

文件扩展名

  • 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工具进行生成