Fork me on GitHub

基于OpenSSL颁发SSL证书

HTTPS(安全超文本传输协议,Hypertext Transfer Protocol over Secure Socket Layer)):是一个安全通信通道,它基于HTTP开发用于在客户计算机和服务器之间交换信息
SSL(安全套接字层,Secure Socket Layer):是在客户端和服务器之间建立一条SSL安全通道的安全协议;
TLS(传输层安全协议,Transport Layer Security):用于两个应用程序之间提供保密性和数据完整性;TLS的前身是SSL;
OpenSSL是TLS/SSL协议的开源实现,提供开发库和命令行程序;

服务器端证书

创建服务器端私钥(private key)

openssl genrsa -des3 -out server.key 2048 #运行时会提示输入密码,此密码用于加密key文件, des3即加密算法

去除key文件口令的命令:

mv server.key server_org.key
openssl rsa -in server_org.key -out server.key    

ssl private key

生成证书签署请求Certificate Signing Request(CSR)

用于向CA机构申请证书

openssl req -new -days 3650 -key server.key -out server.csr

创建CA证书

准备工作

mkdir -p ./demoCA/newcerts
touch ./demoCA/index.txt
touch ./demoCA/serial
echo 01 > ./demoCA/serial

创建根证书的私匙

openssl genrsa -des3 -out ca.key 2048

利用私钥创建根证书

openssl req -new -x509 -key ca.key -out ca.crt 

两步骤合并即

$ openssl req -new -x509 -days 3650 -keyout ca.key -out ca.crt 
req              //使用openssl的req子命令  
-new             //生成新的证书请求  
-x509            //生成自签名证书  
-days 5480       //自签名证书的有效期5480天(15年)【仅当使用了 -x509 选项后有效】  
-keyout CA.key   //私钥文件名指定为CA.key【此选项的一般作用是新生成文件命名;但若同时使用了-key选项,则此选项用于原私钥文件的更名】  
-out CA.crt      //指定输出所生成自签名证书的信息到文件,且文件名为CA.crt【建议不要省略】 

运行中会提示输入一些 Distinguished Name fields,即证书的识别名信息字段,简称为DN字段

DN字段名 缩写 说明 填写要求
Country Name C 证书持有者所在国家 要求填写国家代码,用2个字母表示
State or Province Name ST 证书持有者所在州或省份 填写全称,可省略不填
Locality Name L 证书持有者所在城市 可省略不填
Organization Name O 证书持有者所属组织或公司 最好还是填一下
Organizational Unit Name OU 证书持有者所属部门 可省略不填
Common Name CN 证书持有者的通用名 必填。 对于非应用证书,它应该在一定程度上具有惟一性; 对于应用证书,一般填写服务器域名或通配符样式的域名。
Email Address 证书持有者的通信邮箱 可省略不填

如果不想在运行过程中逐个输入这些DN字段的值,则可以使用 -subj 选项在命令中直接指定。选项 -subj 的使用形式为:

-subj arg

其中,arg是选项 -subj 的参数,其格式类似于:/key0=value0/key1=value1/key2=… 形式。每一个 /key=value 形式的单元,都对应了一个完整的DN字段。其中,
/:是每一个DN字段的开始标志;
key0、key1等等:就是上述表中提到的DN字段名的缩写;
=:DN字段的名和值之间的间隔符;
value0、value1等等:就是原本你要在运行过程中逐个输入的DN字段的值。
对于您要将值置为空的DN字段,您可以略去不写

openssl req -new -x509 -days 2048 -subj /C=CN/ST=JiangSu/O=beecloud/CN=example.com -keyout ca.key -out ca.crt

指定自签名证书的密钥长度和类型:

openssl req -newkey rsa:2048 -x509 -days 3650 -keyout ca.key -out ca.crt

CA签署证书,并将证书颁发给请求者

openssl ca -in server.csr -cert ca.crt -keyfile ca.key -out server.crt  -days 3650

查看证书中的信息

#查看证书的全部信息
openssl x509 -in server.crt -noout -text
#查看证书中的信息:-serial 查看序列号 -subject 查看主体信息
openssl x509 -in server.crt -noout -serial -subject    

吊销证书

在客户端获取要吊销的证书的serial:

把证书格式转换成pkcs12格式

openssl pkcs12 -export -in ca.crt -inkey ca.key -out ca.pfx

不使用CA,创建自签名证书

openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt    
轻轻的我走了,正如我轻轻的来