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

①基本概念
HTTP(Hypertext Transfer Protocol)
- 超文本传输协议,使用该协议进行访问的数据是没有任何加密措施的,任何人都可以使用监听等手段窃取传输过程中的信息数据,因此是一种不安全的传输协议。
HTTPS(Hypertext Transfer Protocol Secure)
- 超文本传输安全协议,基于HTTP的基础之上结合了SSL与TLS协议,提供了加密通讯以及服务器身份鉴定的能力,是一种安全的传输协议。
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 phrase与Verifying - Enter PEM pass phrase,创建密码同时会有二次确认,记住这个密码,后面会用到!

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

第二步:根据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的信息,来看一下都是什么意思:
| 名称 | 填写内容 | 示例(说明) |
| 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 [] | 邮箱 | (根据实际填写) |

填写完成后,会在目录下生成pem格式的CA证书文件customCA.pem,但我们需要把它转成crt格式,输入以下命令
# customCA.pem是刚才生成的pem格式证书openssl x509 -outform der -in customCA.pem -out customCA.crt然后我们会得到一个crt格式的CA证书文件customCA.crt

第三步:创建用以生成域名证书的配置文件
输入以下命令(一行一行输入)
cat >> study.ext <<EOFauthorityKeyIdentifier=keyid,issuerbasicConstraints=CA:FALSEkeyUsage=digitalSignature, nonRepudiation, keyEncipherment, dataEnciphermentsubjectAltName=@alt_names[alt_names]# 注意这里test.study.cn是需要关联的域名,替换成你自己的即可DNS.1 = test.study.cnEOF
然后我们会得到一个study.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自签证书

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





沪ICP备2024044120号-1
沪公网安备31010902100826号