openssl生成证书并签名

2022-06-10

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

reference

https://www.jianshu.com/p/37ded4da1095

http://t.zoukankan.com/qifei-liu-p-9155663.html