https://www.jianshu.com/p/37ded4da1095 这位大佬的blog写的很好
前言
之前编写vpn程序时遇到的一个问题是,如何用openssl生成自签名证书并授权(因为使用vpn的隧道需要进行加密通信,这就需要证书了)
这里简单记录一下如何使用openssl生成自签名证书以及服务器,客户端证书
相关概念
公钥加密大家应该不陌生,这里不过多赘述
pem、key:私钥文件,对数据进行加密解密
csr:证书签名请求文件,将其提交给证书颁发机构(ca、CA)对证书签名
crt:由证书颁发机构(ca、CA)签名后的证书或者自签名证书,该证书包含证书持有人的信息、持有人的公钥以及签署者的签名等信息
生成流程
首先需要生成私钥文件(key)
然后生成证书签名请求文件(包含公钥)
最后由证书颁发机构(ca)验证后签名
开始之前
openssl有一系列的配置文件,你为了生成新的证书及相关内容(又不影响到默认的配置文件),你需要进行一些操作
说白了,就是复制一份openssl的结构到你自己创建的目录下。
在你想创建证书的目录下执行以下命令。
mkdir -p ./demoCA/certs
mkdir -p ./demoCA/crl
mkdir ./demoCA/newcerts
mkdir -p ./demoCA/private
touch ./demoCA/index.txt
touch ./demoCA/serial
echo 01 > ./demoCA/serial
cp /usr/local/openssl/ssl/openssl.cnf openssl.cnf
至于为什么要打这些命令
可用通过 cat /usr/local/openssl/ssl/openssl.cnf 命令
查看,openssl.cnf里有注释。
openssl生成自签名根证书
1.生成ca根证书私钥
openssl genrsa -aes256 -out ca.key 2048
genrsa:使用RSA算法生成私钥
-aes256:使用256位密钥的AES算法对私钥进行加密
-out:输出文件路径
2048:私钥长度
输入完命令会让你输入两遍私钥文件的密码(一定要记得,忘了就remake吧哈哈)
2.生成csr
openssl req -new -key ca.key -out ca.csr
req:执行证书签发命令
-new:新的证书签发请求
-key:指定私钥文件的路径
-out:csr文件的输出路径
3.自签名证书
openssl x509 -req -days 365 -signkey ca.key -in ca.csr -out ca.crt
x509:用于自签名证书,生成x509格式的证书(x509告诉openssl使用自签名证书)
-req:请求签名
-days:证书有效期
-signkey:证书签发的私钥
-in:证书请求文件,有效的文件路径
-out:ca签名后的证书输出路径
使用ca证书签名 服务器/客户端 证书
1.生成私钥
openssl genrsa -aes256 -out server.key 2048
2.生成csr
openssl req -new -key server.key -out server.csr
3. 使用根证书签发csr得到crt
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf
-in:输入证书签名请求文件
-out:签名后的证书输出路径
-cert:ca根证书
-keyfile:ca根证书私钥文件
-config:配置文件
生成过期证书
生成过期证书也很容易,我们可以生成一个有效期一天的证书,第二天它就过期了(哈哈
openssl genrsa -aes256 -out server.key 2048
openssl req -new -key server.key -out server.csr
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf -days 1