CA OpenSSL自签名证书(服务器/客户端)

news/2025/1/3 6:03:36/
  • 参考文章

https://juejin.cn/post/7092789498823573518
https://blog.csdn.net/mengting2040/article/details/120001810

目录

    • 使用 OpenSSL 生成证书
      • 创建根证书
        • 创建 Root Pair
        • 创建 Root Key
        • 创建 Root Crt
      • 创建服务器端证书
        • 创建服务器端key
        • ip需要换成自己服务器的外网ip地址,或者域名都可以
        • 配置白名单,多个用逗号隔开,例如: IP:172.17.0.1,IP:0.0.0.0,这里需要注意,虽然0.0.0.0可以匹配任意,但是仍然需要配置你的服务器外网ip,如果省略会造成错误,后面会讲到
        • 把 extendedKeyUsage = serverAuth 键值设置到extfile.cnf文件里,限制扩展只能用在服务器认证
        • 生成服务器签名的证书
      • 创建客户端证书
        • 创建客户端key
        • 生成客户端签名请求需要用到的临时文件
        • 继续设置证书扩展属性
        • 生成客户端签名证书

使用 OpenSSL 生成证书

创建根证书

创建 Root Pair

Root Pair 即根证书的公钥和私钥,创建 Root Pair 需要在绝对安全的环境下,可以断开网络、拔掉网线和网卡,如果是在测试环境则无所谓。
首先我们创建一个 root 文件夹,用来存放根证书相关的文件:

mkdir root

创建 Root Key

可以使用 genrsa 命令创建 Root key,如下创建一个4096位的RSA私钥,并用aes256加密(密码为lettin11),保存为root/ca.key文件

openssl genrsa -aes256 -passout pass:lettin11 -out root/ca.key 4096

创建 Root Crt

这一步就是创建根证书了,需要通过 req 子命令来创建,而且需要一个 Root CA 的 openssl.cnf 配置文件,可以复制下来自己修改(文件路径:root/openssl.cnf)

# OpenSSL root CA configuration file.
# Copy to `./root/openssl.cnf`.[ ca ]
# `man ca`
default_ca = CA_default[ CA_default ]
# Directory and file locations.
dir               = ./root
new_certs_dir     = $dir
database          = $dir/index.txt
serial            = $dir/serial# The root key and root certificate.
private_key       = $dir/ca.key
certificate       = $dir/ca.crtpolicy            = policy_strict[ policy_strict ]
# The root CA should only sign intermediate certificates that match.
# See the POLICY FORMAT section of `man ca`.
countryName             = match
stateOrProvinceName     = match
organizationName        = match
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional[ req ]
# Options for the `req` tool (`man req`).
default_bits        = 2048
distinguished_name  = req_distinguished_name
string_mask         = utf8only# Extension to add when the -x509 option is used.
x509_extensions     = v3_ca[ req_distinguished_name ]
# See <https://en.wikipedia.org/wiki/Certificate_signing_request>.
countryName                     = Country Name (2 letter code)
stateOrProvinceName             = State or Province Name
localityName                    = Locality Name
0.organizationName              = Organization Name
organizationalUnitName          = Organizational Unit Name
commonName                      = Common Name
emailAddress                    = Email Address[ v3_ca ]
# Extensions for a typical CA (`man x509v3_config`).
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true
keyUsage = critical, digitalSignature, cRLSign, keyCertSign[ v3_intermediate_ca ]
# Extensions for a typical intermediate CA (`man x509v3_config`).
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true, pathlen:0
keyUsage = critical, digitalSignature, cRLSign, keyCertSign

用私钥ca.key生成CA认证机构的证书ca.crt
其实就是相当于用私钥生成公钥,再把公钥包装成证书

openssl req -config root/openssl.cnf \-key root/ca.key \-passin pass:lettin11\-new \-x509 \-days 36500\-sha256 \-extensions v3_ca \-out root/ca.crt \-subj /C=CN/ST=Shanghai/L=Shanghai/O=Lettin/OU=Lettin/CN=Lettin/emailAddress=zhangyunxin@lettin.cn

创建服务器端证书

创建一个 server文件夹,用来存放服务器证书相关的文件:

mkdir server

创建服务器端key

openssl genrsa -out server/server.key 4096

ip需要换成自己服务器的外网ip地址,或者域名都可以

openssl req -subj "/CN=172.17.0.1" -sha256 -new -key server/server.key -out server/server.csr

配置白名单,多个用逗号隔开,例如: IP:172.17.0.1,IP:0.0.0.0,这里需要注意,虽然0.0.0.0可以匹配任意,但是仍然需要配置你的服务器外网ip,如果省略会造成错误,后面会讲到

echo subjectAltName = IP:172.17.0.1,IP:0.0.0.0 >> extfile.cnf

把 extendedKeyUsage = serverAuth 键值设置到extfile.cnf文件里,限制扩展只能用在服务器认证

echo extendedKeyUsage = serverAuth >> extfile.cnf

生成服务器签名的证书

openssl x509 -req -days 36500 -sha256 -passin pass:lettin11 -in server/server.csr -CA root/ca.crt -CAkey root/ca.key \-CAcreateserial -out server/server.crt -extfile extfile.cnf

创建客户端证书

创建一个 clinet文件夹,用来存放客户端证书相关的文件:

mkdir client

创建客户端key

openssl genrsa -out client/client.key 4096

生成客户端签名请求需要用到的临时文件

openssl req -subj '/CN=client' -new -key client/client.key -out client/client.csr

继续设置证书扩展属性

echo extendedKeyUsage = clientAuth >> extfile.cnf

生成客户端签名证书

openssl x509 -req -days 36500 -sha256 -passin pass:lettin11 -in client/client.csr -CA root/ca.crt -CAkey root/ca.key \-CAcreateserial -out client/client.crt -extfile extfile.cnf

http://www.ppmy.cn/news/63730.html

相关文章

Oracle限制单个用户的并发连接数

Oracle限制单个用户的并发连接数 开启RESOURCE_LIMIT参数查看对用户的资源限制限制用户的并发连接数 开启RESOURCE_LIMIT参数 检查资源限制是否开启&#xff1a; SQL> show parameter resource_limitNAME TYPE VALUE ---- ---- ----- resource_limit boolean TRUE这个参数…

前端三剑客 HTML+CSS+JS

文章目录 一、HTML1.1 基础标签1.2 列表1.3 表格1.4 表单 二、CSS2.1 引入方式2.2 CSS 选择器2.2.1 基本选择器2.2.2 组合选择器 2.3 常用属性2.3.1 背景2.3.2 文本2.3.3 字体2.3.4 display元素类型2.3.5 浮动2.3.6 盒子模型 三、JavaScript3.1 引入方式3.2 数据类型3.2.1 数组…

【Android取证篇】Android设备USB调试打开方式(开发者模式)

【Android取证篇】Android设备USB调试打开方式(开发者模式) Android各个版本系统手机开启”USB调试”的入口不全相同&#xff0c;仅供参考—【蘇小沐】 1、【Android1.0-3.2】 路径&#xff1a;在应用列表选择「设置」->「应用程序」->「开发」->勾选「USB调试」选…

Android 12.0 Launcher3桌面禁止左右滑动

1.概述 在12.0的rom定制化开发中,由于Launcher3有一些功能需要定制,这样的需求也好多的, 现在功能需求要求桌面固定在Launcher3的app列表页,不让左右移动,就是禁止左右移动的功能实现,所以需要禁止滑动分析页面滑动部分的功能,然后禁用桌面左右滑动功能 2.Launcher3桌…

动设备维护管理的新趋势——在线监测与故障诊断系统

随着工业自动化水平的提高&#xff0c;动设备在现代工业中扮演着越来越重要的角色。然而&#xff0c;动设备故障率高、维修难度大、维护费用高是工厂面临的重要挑战之一。针对这些问题&#xff0c;在线监测与故障诊断系统逐渐成为动设备维护管理的新趋势。 图.设备工程师正在维…

三、FM1288调试方案-音质评价标准

本篇主要介绍什么样的音质算是好的处理效果,或者最终调试完成后,怎么去评价调试的结果好不好?标准是什么? 文章目录 1. 音频问题2. 客观评价标准3. 主观评价标准1. 音频问题 通过调试,主要解决以下几个音频问题:   1、回声: 通话时,对方的声音经过speaker放出后,被…

服装供应链管理包含哪些内容,如何选择服装供应链管理系统?

服装供应链管理是指对服装工厂的采购、生产、物流、仓储和销售等环节的管理&#xff0c;包括原材料的采购、成品的制造、配送、零售等多个环节。 选择合适的服装供应链管理系统&#xff0c;能够帮助服装工厂提高供应链管理的效率、优化库存管理、降低运营成本、保证服装生产的品…

SSD系列3——损失计算

SSD系列&#xff1a; SSD系列1——网络结构 SSD系列2——PriorBox SSD系列3——损失计算 一、确定正、负样本标签 损失计算的第一步是对所有的PriorBox赋予正、负样本的标签&#xff0c;并确定对应的真实物体标签。 在SSD的PriorBox生成过程中&#xff0c;一共生成了8732个Pri…