openssl在Linux下编译和自签名证书制作

kipway@kipway.com

2017.9.3(update 2017.11.19)

本文的内容在openssl的文档中都能找到,为了便于使用,特记录于此。以下使用openssl 1.0.2L长周期支持版,系统为ubuntu1404

1.编译openssl

采用默认方式就行了。

./config
make
make test
make install
成功后,会安装在/usr/local/ssl目录中。

2.配置openssl工具

在~/目录下建立一个ca目录,将openssl1.0.2L中apps/demoCA目录拷贝到~/ca目录,并在创建ca/demoCA/newcerts子目录,一切使用默认配置,以下的操作终端窗口命令行当前目录均在~/ca目录中。

3.制作自签名根证书

制作自己的根证书,本例为cakipway:

# 创建根证书的RSA private key 文件
openssl genrsa -out cakipway.key 2048   
# 创建根证书申请csr文件
openssl req -new -key cakipway.key -out cakipway.csr  
# 创建自签名根证书
openssl x509 -req -days 3650 -in cakipway.csr -signkey cakipway.key -out cakipway.crt 
# 转换证书格式pem->der,用于TLS协议中传输
openssl x509 -in cakipway.crt -outform der -out cakipway.cer

4.制作和签发服务器证书

本例制作一个srv_h58服务器证书,使用上面的cakipway签发。

#创建服务器private key
openssl genrsa -out srv_h58.key 2048
#创建服务器证书申请
openssl req -new -key srv_h58.key -out srv_h58.csr
#使用cakipway.crt签发服务器证书
openssl ca -days 3650 -in srv_h58.csr -out srv_h58.crt -cert cakipway.crt -keyfile cakipway.key
# 转换证书格式pem->der,用于TLS协议中传输
openssl x509 -in srv_h58.crt -outform der -out srv_h58.cer
制作srv_h58.csr时会要求输入一些参数,如实填写就行了,注意Common Name要填写服务器的IP(局域网使用IP)或网站的域名:
Common Name (e.g. server FQDN or YOUR name) []:192.168.1.58

5.自签发证书在局域网应用

https网站或者wss服务在服务端安装服务器证书srv_h58.cer 和private key srv_h58.key(注意保密)使用。

由于是我们自己签发的,默认条件下FireFox是不会认的。 打开选项->高级->证书->查看证书->证书机构->导入根证书cakipway.crt->确定。这样FireFox访问由cakipway签发的证书的https网站就是绿色安全标志了。

6.进阶SAN扩展证书

使用前面得方法建立的证书你会发现在chrome 58及以后版本不认(FireFox还认),因为chrome 58及以后只认带SAN扩展的证书。SAN(Subject Alternative Name)是SSL标准x509中 定义的一个扩展。使用了SAN字段的SSL证书,可以扩展此证书支持的域名,使得一个证书可以支持多个不同域名的解析。需要使用下面方法在正书中添加SAN扩展字段, 将/usr/local/ssl/openssl.cnf文件复制到~/ca目录,修改v3_req字段:

[ v3_req ]
# Extensions to add to a certificate request
basicConstraints        = CA:FALSE
keyUsage            = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName          = @alt_names
[ alt_names ]
DNS.1 = kipway.com
DNS.2 = *.kipway.com
DNS.3 = tomchina.cn
DNS.4 = *.tomchina.cn
IP.1 = 127.0.0.1
IP.2 = 125.82.165.226
其中alt_names的内容,比如DNS.1,DNS.2,IP1,IP2等为你需要签署的授权域名和IP。 在制作自签发根证书签发时需要带上-extensions v3_ca参数,如3中的对应部分改为:
# 创建自签名根证书
openssl x509 -req -days 3650 -in cakipway.csr -signkey cakipway.key -out cakipway.crt  -extensions v3_ca
在创建服务器证书申请时带上配置和扩展参数,如4中对应部分改为下:
#创建服务器证书申请
openssl req -new -key srv_h58.key -out srv_h58.csr -config openssl.cnf
#使用cakipway.crt签发服务器证书
openssl ca -days 3650 -in srv_h58.csr -out srv_h58.crt -cert cakipway.crt -keyfile cakipway.key -config openssl.cnf -extensions v3_req
制作好到SAN扩展的证书在chrome的证书管理中导入后,访问该网站就可以看到绿色小锁https标识了。