隨著個(gè)人隱私越來越受重視, HTTPS也漸漸的流行起來, 甚至有許多網(wǎng)站都做到了全站HTTPS,
然而這種加密和信任機(jī)制也不斷遭遇挑戰(zhàn),比如戴爾根證書攜帶私鑰,Xboxlive證書私鑰瀉露,
還有前一段時(shí)間的沃通錯(cuò)誤頒發(fā)Github根域名SSL證書事件. 因此本文從非對(duì)稱加密說起,
介紹了證書的簽證流程, 并且通過openssl的命令行工具對(duì)這些過程都轉(zhuǎn)化為相對(duì)具體的命令,
也算是一個(gè)溫故知新的簡要記錄吧.

前言

一般來說,常見的數(shù)字加密方式都可以分為兩類,即對(duì)稱加密和非對(duì)稱加密. 對(duì)于對(duì)稱加密來說,
加密和解密用的是同一個(gè)密鑰, 加密方法有AES,DES,RC4,BlowFish等; 對(duì)應(yīng)的, 非對(duì)稱加密在
加密和解密時(shí), 用的是不同的密鑰, 分別稱為公鑰或私鑰. 非對(duì)稱加密的加密方法有RSA, DSA,
Diffie-Hellman等.

OpenSSL是一個(gè)開源項(xiàng)目,為傳輸層安全(TLS)和安全套接字(SSL)協(xié)議提供了比較完整的實(shí)現(xiàn),
同時(shí)也致力于將自身打造為一個(gè)通用的密碼學(xué)工具集. 其中包括:

  • libssl : 提供了SSL(包括SSLv3)和TLS的服務(wù)器端以及客戶端的實(shí)現(xiàn).
  • libcrypto : 通用的密碼學(xué)庫以及對(duì)X.509的支持
  • openssl : 一個(gè)多功能的命令行工具

本文主要使用openssl的命令行工具來示例非對(duì)稱加密的流程, 如果有興趣的話,也可以用其SDK
來實(shí)現(xiàn)更具體的操作.

加解密過程

創(chuàng)建公私鑰對(duì)

首先用openssl生成私鑰:

openssl genrsa -out private.pem 1024 當(dāng)然為了更加安全,可以在生成私鑰的時(shí)候同時(shí)指定密碼, 這樣即使不小心瀉露了私鑰,也能增加別人的盜用難度:
openssl genrsa -aes256 -passout stdin -out private.pem 1024 o