自建CA证书与带CA的SSL自签证书

1688 字
8 分钟
自建CA证书与带CA的SSL自签证书

①基本概念#

HTTP(Hypertext Transfer Protocol)#

  • 超文本传输协议,使用该协议进行访问的数据是没有任何加密措施的,任何人都可以使用监听等手段窃取传输过程中的信息数据,因此是一种不安全的传输协议

HTTPS(Hypertext Transfer Protocol Secure)#

  • 超文本传输安全协议,基于HTTP的基础之上结合了SSLTLS协议,提供了加密通讯以及服务器身份鉴定的能力,是一种安全的传输协议

SSL(Secure Socket Layer)#

  • 安全套接层,通俗点说就是数据加密,它的作用就是对服务器与客户端之间传输的数据流进行加密。

SSL证书#

  • 可以理解为服务器的“营业执照”,通常由公认受信的互联网数字证书颁发机构,也就是CA(Certificate Authority),经过服务器身份验证后所签发的“营业执照”,即SSL证书

域名#

  • 可以理解为一个网站的标识符,访问一个网站需要知道对应服务器的IP地址,但是如果靠IP地址来记忆对应的网站着实有些麻烦,而域名的存在便是简化了这种访问成本,例如本站的域名是elysium-stack.cn,当你访问本站时你不需要知道本站的IP是什么,DNS服务器会自动将域名进行解析并找到对应的站点IP地址,从而进一步访问,通常域名会与SSL证书进行绑定

②为什么要使用SSL证书#

最根本的目的是保护数据在传输过程中的安全!如果你的系统要做信息安全等级保护等保测评),那么就必须要使用基于HTTPS协议的安全连接。那么你可能发现了一个问题:

Q:如果我的系统部署在内网,CA没办法验证我的服务器,那我不是就拿不到公认CA签发的SSL证书了吗?

A:确实如此,但是我们可以自建CA同时自己签发证书

③什么是自签证书#

自签证书是不受信任的CA所签发的SSL证书,讲人话就是自己手搓的SSL证书,自签证书可以分为两种:

  • 带CA的自签证书

    • 先手搓一个CA,然后再手搓一张SSL证书,同时使用自己的CA来进行证书的签发,便于管理与控制证书吊销等操作,一般会用这个(本文也将以此为例)。
  • 不带CA的自签证书

    • 直接手搓一张SSL证书

④创建CA证书与自签证书#

正片开始 接下来笔者会详细说明如何创建自己的CA以及如何通过自己的CA来签发证书

  • 前置条件:

    • 一台linux服务器或mac电脑

    • OpenSSL库(笔者的版本是3.0.13

    • 一个自定义的域名且必须要满足域名的命名规则

以下笔者会以test.study.cn域名为例

第一步:创建自定义CA密钥#

在控制台中输入以下命令

# customCA这个名字可以自己改
openssl genrsa -des3 -out customCA.key 2048

接着会提示Enter PEM pass phraseVerifying - Enter PEM pass phrase,创建密码同时会有二次确认,记住这个密码,后面会用到!

创建CA密钥
创建CA密钥

然后在目录中会自动生成文件customCA.key

CA密钥文件生成
CA密钥文件生成

第二步:根据CA密钥,创建CA证书#

在控制台中输入以下命令

# customCA.key是第一步中生成的,3650是证书的有效期(单位:天),那这里就是10年的有效期
openssl req -x509 -new -nodes -key customCA.key -sha256 -days 3650 -out customCA.pem

接着会提示Enter pass phrase for customCA.key要求输入第一步中你创建的密码,输入即可

填写CA证书信息
填写CA证书信息

验证通过后需要填写关于CA的信息,来看一下都是什么意思:

名称填写内容示例(说明)
Country Name (2 letter code) [AU]国家代码CN(中国)
State or Province Name (full name) [Some-State]省级名称Shanghai(上海)
Locality Name (eg, city) []市级名称Shanghai(上海)
Organization Name (eg, company) [Internet Widgits Pty Ltd]组织名称StudyCA(根据实际修改)
Organizational Unit Name (eg, section) []组织单位名称StudyCA(根据实际修改)
Common Name (e.g. server FQDN or YOUR name) []CA证书名称Study Cert(根据实际修改)
Email Address []邮箱(根据实际填写)

CA证书信息填写完成
CA证书信息填写完成

填写完成后,会在目录下生成pem格式的CA证书文件customCA.pem,但我们需要把它转成crt格式,输入以下命令

# customCA.pem是刚才生成的pem格式证书
openssl x509 -outform der -in customCA.pem -out customCA.crt

然后我们会得到一个crt格式的CA证书文件customCA.crt

CA证书文件生成
CA证书文件生成

第三步:创建用以生成域名证书的配置文件#

输入以下命令(一行一行输入)

cat >> study.ext <<EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage=digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName=@alt_names
[alt_names]
# 注意这里test.study.cn是需要关联的域名,替换成你自己的即可
DNS.1 = test.study.cn
EOF

创建ext配置文件
创建ext配置文件

然后我们会得到一个study.ext的配置文件

ext配置文件生成
ext配置文件生成

第四步:创建域名证书密钥#

输入以下命令

# test.study.cn.csr和test.study.cn.csr.key是域名test.study.cn.csr的密钥
openssl req -new -sha256 -nodes -out test.study.cn.csr -newkey rsa:2048 -keyout test.study.cn.csr.key

接着需要填写关于域名的信息,也还是先看一下都是什么意思:

名称填写内容示例(说明)
Country Name (2 letter code) [AU]国家代码CN(中国)
State or Province Name (full name) [Some-State]省级名称Shanghai(上海)
Locality Name (eg, city) []市级名称Shanghai(上海)
Organization Name (eg, company) [Internet Widgits Pty Ltd]组织名称Study(根据实际修改)
Organizational Unit Name (eg, section) []组织单位名称Study(根据实际修改)
Common Name (e.g. server FQDN or YOUR name) []域名test.study.cn(根据实际修改)
Email Address []邮箱(根据实际填写)
A challenge password []创建私钥保护密码(根据实际填写)
An optional company name []额外公司名称(根据实际填写)

填写域名证书信息
填写域名证书信息

第五步:根据【第一步的CA密钥】、【第二步的CA证书】、【第三步的配置文件】、【第四步域名证书密钥】生成自签域名证书#

只需一行命令,如下:#

# 365是证书的有效期(单位:天),那这里就是1年的有效期
openssl x509 -req -in test.study.cn.csr -CA customCA.pem -CAkey customCA.key -CAcreateserial -out test.study.cn.crt -days 365 -sha256 -extfile study.ext

提示需要输入【第一步的CA证书密码】,输入即可

签发域名证书
签发域名证书

完成后,我们就能得到自定义CA证书与域名test.study.cn的SSL自签证书

CA证书与自签域名证书生成完成
CA证书与自签域名证书生成完成

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

自建CA证书与带CA的SSL自签证书
https://blog.elysium-stack.cn/posts/custom-ssl/
作者
梅莉
发布于
2025-08-13
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
梅莉
多思考 · 多学习
公告
本站已于2026年6月26日于Halo搬迁至Astro,如发现友链遗失请联系站长。
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
分类
标签
站点统计
文章
19
分类
3
标签
29
总字数
18,333
运行时长
0
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.13.5
文章许可
CC BY-NC-SA 4.0

文章目录