【笔记】使用 openssl 生成服务器证书

2024-06-21 22:04

本文主要是介绍【笔记】使用 openssl 生成服务器证书,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

CSR 即证书签名申请(Certificate Signing Request),获取 SSL 证书,需要先生成 CSR 文件并提交给证书颁发机构(CA)。CSR 包含了用于签发证书的公钥、用于辨识的名称信息(Distinguished Name)(例如域名)、真实性和完整性保护(例如数字签名),通常从 Web 服务器生成 CSR,同时创建加解密的公钥私钥对。

CSR 文件中包含的内容:

名称说明
CN(通用名称)服务器端证书验证时这里为域名(FQDN) 以 https://www.baidu.com 的证书这里填写的内容为 baidu.com
Email(邮箱)证书申请主体的联系邮箱
O (组织/公司)证书主体所在的公司
OU (部门/单位)证书主体所在的部门
L (城市)证书主体所在的城市
ST (省份)证书主体所在的省份
C (国家)证书主体所在的国家
哈希签名以上内容在填写完成后,会生成一个 哈希签名,以防止篡改
公钥证书公钥

在生成 CSR(证书签名请求文件) 后,就可以将这个文件提交到 CA 机构,由 CA 机构生成对应的证书,CA 机构会验证 CSR 中的信息,在确认信息可信后,会使用自己的私钥对其中的信息进行数字签名后生成实际的服务器证书。

如果是自签名证书,也就是不需要通过CA进行认证,或者自身就是一个 CA证书,则不需要由 CA 机构去颁发证书。

首先生成一个 CA 的自签名证书:

# 创建一个 私钥PEM文件和对应的私钥签名CSR文件
openssl req -new -nodes -sha256 -newkey rsa:2048 -keyout ca.key -out ca.csr \
-subj "/C=CN/ST=Zhejiang/L=Hangzhou/O=Ghimi Technology/OU=Ghimi Cloud/CN=ghimi.top"
# -nodes no des 的缩写,表示私钥PEM不需要设置密码
# -sha256 表示签名使用的算法为 sha256,256位共 32字节长度
# -newkey 表示会创建新的私钥 PEM 文件
# rsa:2048 表示非对称加密算法使用 rsa 算法,密钥长度 2048 位,256 字节长度
# -keyout 指定输出密钥文件名称,当前为 ca.key
# -out 指定输出签名文件名称,当前未 ca.csr
# -subj 用于设置 csr 签名文件中包含的信息# 基于私钥签名创建证书
openssl x509 -req -in ca.csr -key ca.key -out ca.crt -days 3650
# -days 3650 有效期10年
# 查看证书信息
openssl x509 -text -noout -in ca.crt

然后基于上面的 ca 证书生成一个服务器证书:

# 创建一个 私钥PEM文件和对应的私钥签名CSR文件
openssl req -new -nodes -sha256 -newkey rsa:2048 -keyout server.key -out server.csr \
-subj "/C=CN/ST=Zhejiang/L=Hangzhou/O=Ghimi Technology/OU=Ghimi Blog/CN=blog.ghimi.top"
# -nodes no des 的缩写,表示私钥PEM不需要设置密码
# -sha256 表示签名使用的算法为 sha256,256位共 32字节长度
# -newkey 表示会创建新的私钥 PEM 文件
# rsa:2048 表示非对称加密算法使用 rsa 算法,密钥长度 2048 位,256 字节长度
# -keyout 指定输出密钥文件名称
# -out 指定输出签名文件名称
# -subj 用于设置 csr 签名文件中包含的信息# 基于私钥签名创建证书
openssl x509 -req -in server.csr -out server.crt -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 \
-extensions SAN \
-extfile <(cat /etc/ssl/openssl.cnf <(printf "\n[SAN]\nsubjectAltName=DNS:dns.ghimi.top,IP:127.0.0.1"))
# -days 3650 有效期10年
# -CA 用于指定 ca 证书
# -CAkey 用于指定 ca 证书私钥
# -CAcreateserial 如果 ca 序列号文件不存在,则创建一个
# 查看证书信息
openssl x509 -text -noout -in server.crt

我们在请求 https 网址的时候,服务器会将自己的服务器证书发送到客户端以客户端去验证,客户端会拿自己本地的 CA 证书去验证服务器证书是通过该CA颁发的,如果是则身份认证通过。如果本地的CA无法验证服务器发来的证书时则会提示不安全或者拒绝连接。
一下为请求百度主页后返回的服务器证书信息:

[root]# curl -kv https://www.baidu.com
* Host www.baidu.com:443 was resolved. # 域名解析完成
* IPv6: 240e:e9:6002:15a:0:ff:b05c:1278, 240e:e9:6002:15c:0:ff:b015:146f # 域名解析到 ipv6 地址
* IPv4: 180.101.50.242, 180.101.50.188 # 域名解析到 ipv4 地址
*   Trying 180.101.50.242:443... # 尝试用第一个 ipv4 地址建立连接
* Connected to www.baidu.com (180.101.50.242) port 443 # 与百度服务器建立连接
* ALPN: curl offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1): # tlsv1.3 客户端发起握手请求,包含一个随机数
* TLSv1.3 (IN), TLS handshake, Server hello (2): # tlsv1.2 服务器返回握手请求,包含一个服务器随机数,不兼容 tlsv1.3 协议降级为 tlsv1.2
* TLSv1.2 (IN), TLS handshake, Certificate (11): # tlsv1.2 服务器返回证书信息
* TLSv1.2 (IN), TLS handshake, Server key exchange (12): # tlsv1.2 服务器进行密钥交换
* TLSv1.2 (IN), TLS handshake, Server finished (14): # 服务器前期通信结束
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16): # 客户端交换密钥
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1): # 客户端修改加密算法
* TLSv1.2 (OUT), TLS handshake, Finished (20): # 客户端发起握手结束信息
* TLSv1.2 (IN), TLS handshake, Finished (20): # 服务器端发起握手结束信息
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256 / prime256v1 / RSASSA-PSS
# 加密连接建立,使用 tlsv1.2 通信 / 密钥交换协议:ECDHE 非对称加密协议:RSA 对称加密协议:AES128 哈希散列算法:SHA256(SHA-2)
* ALPN: server accepted http/1.1
* Server certificate:
# 服务器证书信息 C(国家):CN中国; ST(省份): beijing(北京);L(城市):北京 O(组织/公司): 北京百度网络科技有限公司 CN(域名): baidu.com
*  subject: C=CN; ST=beijing; L=beijing; O=Beijing Baidu Netcom Science Technology Co., Ltd; CN=baidu.com
*  start date: Jul  6 01:51:06 2023 GMT # 证书创建时间
*  expire date: Aug  6 01:51:05 2024 GMT # 证书过期时间
*  issuer: C=BE; O=GlobalSign nv-sa; CN=GlobalSign RSA OV SSL CA 2018 # 证书颁发机构(CA)
*  SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
*   Certificate level 0: Public key type RSA (2048/112 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 1: Public key type RSA (2048/112 Bits/secBits), signed using sha256WithRSAEncryption
*   Certificate level 2: Public key type RSA (2048/112 Bits/secBits), signed using sha256WithRSAEncryption

加密版本

上面的命令生成的私钥都是没有加密的,如果需要可以设置密码,这里设置密码为: 123456

# 生成 ca 私钥和自签名证书请求
openssl req -new -passout pass:123456 -sha256 -newkey rsa:2048 -keyout ca.key -out ca.csr \
-subj "/C=CN/ST=Zhejiang/L=Hangzhou/O=Ghimi Technology/OU=Ghimi Cloud/CN=ghimi.top"
# -passout pass:123456 , 指定私钥密码为 123456
# 生成 ca 自签名根证书
openssl x509 -req -in ca.csr -passin pass:123456 -key ca.key -out ca.crt -days 3650
# -passin pass:123456 , 指定ca 私钥密码为 123456
# 生成服务器私钥和服务器证书请求
openssl req -new -passout pass:123456 -nodes -sha256 -newkey rsa:2048 -keyout server.key -out server.csr \
-subj "/C=CN/ST=Zhejiang/L=Hangzhou/O=Ghimi Technology/OU=Ghimi Blog/CN=blog.ghimi.top"
# 使用 ca 自签名根证书和 服务器证书请求文件 生成服务器证书
openssl x509 -req -in server.csr -out server.crt \
-CA ca.crt -CAkey ca.key -passin pass:123456 -CAcreateserial -days 3650 \
-extensions SAN \
-extfile <(cat /etc/ssl/openssl.cnf <(printf "\n[SAN]\nsubjectAltName=DNS:dns.ghimi.top,IP:127.0.0.1"))

参考资料

  • Openssl生成自签名证书,简单步骤
  • openssl自签名证书
  • OpenSSL生成CA自签名根证书和颁发证书

这篇关于【笔记】使用 openssl 生成服务器证书的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1082462

相关文章

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

AI一键生成 PPT

AI一键生成 PPT 操作步骤 作为一名打工人,是不是经常需要制作各种PPT来分享我的生活和想法。但是,你们知道,有时候灵感来了,时间却不够用了!😩直到我发现了Kimi AI——一个能够自动生成PPT的神奇助手!🌟 什么是Kimi? 一款月之暗面科技有限公司开发的AI办公工具,帮助用户快速生成高质量的演示文稿。 无论你是职场人士、学生还是教师,Kimi都能够为你的办公文

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n