随着个人隐私越来越受重视, HTTPS也渐渐的流行起来, 甚至有许多网站都做到了全站HTTPS,
然而这种加密和信任机制也不断遭遇挑战,比如戴尔根证书携带私钥,Xboxlive证书私钥泻露,
还有前一段时间的沃通错误颁发Github根域名SSL证书事件. 因此本文从非对称加密说起,
介绍了证书的签证流程, 并且通过openssl的命令行工具对这些过程都转化为相对具体的命令,
也算是一个温故知新的简要记录吧.

前言

一般来说,常见的数字加密方式都可以分为两类,即对称加密和非对称加密. 对于对称加密来说,
加密和解密用的是同一个密钥, 加密方法有AES,DES,RC4,BlowFish等; 对应的, 非对称加密在
加密和解密时, 用的是不同的密钥, 分别称为公钥或私钥. 非对称加密的加密方法有RSA, DSA,
Diffie-Hellman等.

OpenSSL是一个开源项目,为传输层安全(TLS)和安全套接字(SSL)协议提供了比较完整的实现,
同时也致力于将自身打造为一个通用的密码学工具集. 其中包括:

  • libssl : 提供了SSL(包括SSLv3)和TLS的服务器端以及客户端的实现.
  • libcrypto : 通用的密码学库以及对X.509的支持
  • openssl : 一个多功能的命令行工具

本文主要使用openssl的命令行工具来示例非对称加密的流程, 如果有兴趣的话,也可以用其SDK
来实现更具体的操作.

加解密过程

创建公私钥对

首先用openssl生成私钥:

openssl genrsa -out private.pem 1024 当然为了更加安全,可以在生成私钥的时候同时指定密码, 这样即使不小心泻露了私钥,也能增加别人的盗用难度:
openssl genrsa -aes256 -passout stdin -out private.pem 1024 o