openssl 生成证书步骤

本地测试RSA非对称加密功能时,需要用到签名证书。本文记录作者使用openssl本地生成证书的步骤,并没有深入研究openssl,难免会有错误,欢迎指出!!!

生成证书标准流程:

1、生成私钥(.key)

2、用私钥生成证书请求(.csr)

3、将证书请求文件(.csr)提交给证书颁发机构(CA),CA会对提交的证书请求中的所有信息生成一个摘要,然后使用CA根证书对应的私钥进行加密,这就是所谓的"签名"操作,完成签名后就会得到真正的签发证书(.cer或.crt)

一、openssl生成证书

1、生成一个 2048 位的 RSA 私钥

openssl genrsa -out private.key 2048

2、使用私钥来生成新的证书签名请求(.csr)

openssl req -new -key private.key -out private.csr -subj "/C=CN/ST=shanghai/L=shanghai/O=example/OU=it/CN=domain1/CN=domain2"
  • -new 表示创建一个新的证书请求;
  • -key 后面跟着的是私钥文件;
  • -out 后面是输出的CSR文件;
  • -subj 是请求中的主题信息。你将被要求提供一些信息,如你的国家、省份、城市、组织名称等。这些信息将包含在你的证书中。
    • /C= 是证书的国家代码。
    • /ST= 是州或省份名称。
    • /L= 是城市名称。
    • /O= 是组织名称。
    • /OU= 是组织单位名称。
    • /CN= 是通用名称,通常是域名。
    • /emailAddress= 是电子邮件地址。

3、有了私钥和证书签名请求后,我们可以选择做3件事:

3.1 标准CA签发流程

  • 将证书请求(.csr)提交给CA认证机构申请证书(.crt);
  • CA机构会用他的根证书对应的私钥来签名(由CA机构操作);

3.2 生成自签名证书

可以看到标准CA签发流程是用CA机构的私钥去签名。而自签名证书是用自己的私钥签署自己的证书请求,生成自签名SSL证书。

注意:自签名证书不会被浏览器信任,只能用于内部或测试用途。如果你需要一个可被浏览器信任的证书,你需要从受信任的证书颁发机构(CA)获取签名证书。

openssl x509 -req -in private.csr -out private.crt -signkey private.key -days 365
  • openssl x509 -req 表示签名请求,生成证书。
  • -in private.csr 表示输入的CSR文件名。
  • -out private.crt 表示输出的CRT文件名。
  • -signkey private.key 表示用于签名的私钥文件名。
  • -days 表示证书的有效期。

生成的证书格式默认是 PEM,即 Privacy Enhanced Mail,它是 Base64 编码的 ASCII 码文件,常用于存储证书和密钥。PEM 格式的证书通常以 -BEGIN CERTIFICATE- 开始,以 -END CERTIFICATE- 结束,如图:

3.3 私有CA签发证书

如果我们把3.2生成自签名证书(ca.crt)和私钥(ca.key)当作私有的CA机构,然后签署其他的证书签名请求,生成私有CA签名的证书,这个过程,可以理解为是私有CA签发证书。

CA签名证书命令:

  • ca.key就是3.2的private.key;

  • ca.crt就是3.2的private.crt;

  • server.csr就是我们需要签名的证书请求

    openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365

  • -req 表示要处理的输入文件是一个证书签名请求(CSR)。

  • -in server.csr 表示要处理的CSR文件名为server.csr。

  • -CA ca.crt 表示CA的证书文件名为ca.crt。

  • -CAkey ca.key 表示CA的私钥文件名为ca.key。

  • -CAcreateserial 表示如果CA的证书和私钥不存在,则创建它们。

  • -out server.crt 表示生成的服务器证书输出文件名为server.crt。

二、命令简化

生成 私钥(.key) 和 证书签名请求(.csr) 可以用一条命令实现:

openssl req -new -newkey rsa:2048 -nodes -keyout my.key -out my.csr -subj "/C=CN/ST=shanghai/L=shanghai/O=example/OU=it/CN=domain1/CN=domain2"

生成 私钥(.key) 和 证书签名请求(.csr) 再生成 签名证书(.crt)可以用一条命令实现:

openssl req -x509 -newkey rsa:2048 -nodes -keyout my.key -out my.crt -days 3650  -subj "/C=CN/ST=shanghai/L=shanghai/O=example/OU=it/CN=domain1/CN=domain2"

三、其他命令

使用私钥生成对应的公钥:

openssl rsa -in private.key -pubout -out public.pub

从证书中提取公钥:

openssl x509 -in private.crt -pubkey -outform PEM -out public_key.pem
相关推荐
初级代码游戏2 小时前
openssl 正确生成v3带SAN的证书
https·证书·ssl·openssl·tls·v3
hunter2062062 小时前
ubuntu向一个pc主机通过web发送数据,pc端通过工具直接查看收到的数据
linux·前端·ubuntu
张3蜂3 小时前
docker Ubuntu实战
数据库·ubuntu·docker
白粥行4 小时前
linux-ubuntu学习笔记碎记
linux·ubuntu
果果开发ggdoc.cn4 小时前
WordPress免费证书插件
服务器·https·ssl
PaLu-LI6 小时前
ORB-SLAM2源码学习:Initializer.cc⑧: Initializer::CheckRT检验三角化结果
c++·人工智能·opencv·学习·ubuntu·计算机视觉
sunnyday04267 小时前
feign调用跳过HTTPS的SSL证书校验配置详解
java·网络·https·ssl
m0_7482515212 小时前
Ubuntu介绍、与centos的区别、基于VMware安装Ubuntu Server 22.04、配置远程连接、安装jdk+Tomcat
java·ubuntu·centos
狂小虎12 小时前
Ubuntu下载zenodo文件Ubuntu download zenodo
ubuntu·数据集·zenodo
多恩Stone14 小时前
【ubuntu 连接显示器无法显示】可以通过 ssh 连接 ubuntu 服务器正常使用,但服务器连接显示器没有输出
服务器·ubuntu·计算机外设