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
相关推荐
路人蛃10 小时前
通过国内扣子(Coze)搭建智能体并接入discord机器人
人工智能·python·ubuntu·ai·aigc·个人开发
MC皮蛋侠客11 小时前
Ubuntu安装Mongodb
linux·mongodb·ubuntu
2201_7534369512 小时前
ubuntu基础搭建
linux·运维·ubuntu
iHero15 小时前
【Nextcloud】在 Ubuntu 22.04.3 LTS 上的 Nextcloud Hub 10 (31.0.2) 后台任务cron 的优化
android·linux·ubuntu·nextcloud
witton16 小时前
x86版Ubuntu的容器中运行ARM版Ubuntu
linux·arm开发·ubuntu·docker·容器·arm·qemu
atwdy17 小时前
MacOS安装linux虚拟机
linux·运维·ubuntu·macos·utm
紫云无堤1 天前
20250717 Ubuntu 挂载远程 Windows 服务器上的硬盘
服务器·windows·ubuntu
wydxry1 天前
断网情况下,网线直连 Windows 笔记本 和Ubuntu 服务器
服务器·windows·ubuntu
时空无限1 天前
ubuntu 22.04 pam 模块设置用户登录失败锁定
linux·数据库·ubuntu
苏三福1 天前
ros2 标定相机
人工智能·ubuntu