随笔-网络-制作SSL/TLS自签证书

一、基本理论

参考:理解HTTPS协议的交互过程-CSDN博客

前置条件:

服务器向正规CA机构 将自己的公钥 进行数字签名,制作出数字证书

交互流程:

主要流程1:服务端发送数字证书给客户端,证书内容包含服务器的公钥

主要流程2:客户端校验证书合法性,取得服务器公钥,以继续后面的流程

后续流程:图中描述已经很具体,见图中文字描述

要点:客户端校验证书合法性(即如何知道不是一个第三方攻击者提供的证书)?

参考:浏览器如何验证HTTPS证书的合法性? - 知乎

大致意思:

1、 浏览器或者操作系统会自带或者手动安装CA机构的公钥,收到服务器的用CA机构数字签名后的数字证书后,解析出CA机构,并找到本地对应CA机构的公钥,用找到的对应CA机构的公钥计算出Hash Value H2

2、如果是攻击者在数字签名证书将CA机构信息改成一个正规的CA机构名称,浏览器也就能解析出正规的CA机构,这样不是也能计算出正确的Hash Value H2吗

答:因为Certificate Signature是正规CA机构的私钥加密,这个私钥攻击者是没有,所以计算不出来正确的Hash Value H2

二、制作自签证书

根据上面的流程和理论,制作自签证书的步骤如下:

大致流程:

1、先创建一个私有CA机构;2、然后用私有CA机构对服务器的公钥进行数字签名生成数字证书

详细流程:

1、创建一个私有CA(包含了CA私钥和CA公钥),并安装到客户端的浏览器或者操作系统上,以能够找到CA公钥用于计算CA私钥加密后的服务器数字证书,然后能通过证书校验、

2、创建服务器的私钥和CSR(证书签名请求),然后使用步骤1的私有CA机构为服务器的CSR发布证书

3、将步骤2生成的证书放到服务器上(比如9000 lighthttpd的证书路径配置:/svc9000/etc/lighttpd/server.pem)

详细步骤:

第一种

参考: 安全网络 Red Hat Enterprise Linux 9 | Red Hat Customer Portal

1、创建一个私有CA

为私有CA 生成私钥

openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:P-256 -out rootCA.key

使用上一个命令生成的私钥创建证书

openssl req -key rootCA.key -new -x509 -days 3650 -addext keyUsage=critical,keyCertSign,cRLSign -subj "/C=CN/ST=省/L=市/O=公司/OU=公司/CN=192.168.99.124" -out rootCA.crt

生成的 rootCA.crt 文件是一个自签名 CA 证书,可用于为其他证书签名 10 年

2、创建服务器的私钥和CSR(证书签名请求)

使用 OpenSSL 为 TLS 服务器证书创建私钥

openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:P-256 -out server.key

使用之前创建的私钥创建 CSR

openssl req -key server.key -new -out server-cert.csr -subj "/C=CN/ST=省/L=市/O=公司/OU=公司/CN=192.168.99.124"

3、然后使用步骤1的私有CA机构为步骤2的服务器的CSR发布证书

openssl x509 -req -in server-cert.csr -CA rootCA.crt -CAkey rootCA.key -days 3650 -extfile openssl.cnf -extensions server-cert -out server-cert.crt

4、(可选)制作server.pem

cp -a server.key server.pem; cat server-cert.crt >> server.pem

5、将server.key server.crt放到服务器上的指定路径

6、测试结果:microhttpd https 服务器启动失败

好像是 Key and private certificate don't match 没继续排查,使用第二种方式成功了

第二种(使用不同参数)

参考:wiki SSL证书签名及使用

1、本地PC:创建一个私有CA

openssl genrsa -out rootCA.key 1024 (去掉了-aes256)

openssl req -new -key rootCA.key -out rootCA.csr -subj "/C=CN/ST=省/L=市/O=公司/OU=公司/CN=192.168.99.124"

openssl x509 -req -days 3650 -sha1 -extensions v3_ca -signkey rootCA.key -in rootCA.csr -out rootCA.crt

2、创建服务器的私钥和CSR(证书签名请求)

openssl genrsa -out server.key 1024  (去掉了-aes256)

openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=省/L=市/O=公司/OU=公司/CN=192.168.99.124"

3、然后使用步骤1的私有CA机构为步骤2的服务器的CSR发布证书

将步骤2的文件下载到本地

openssl x509 -req -days 3650 -sha1 -extensions  v3_req -CA rootCA.crt -CAkey rootCA.key   -CAcreateserial -in server.csr -out server.crt

4、(可选)制作server.pem

cp -a server.key server.pem; cat server.crt >> server.pem

5、将server.key server.crt放到服务器上的指定路径

6、microhttpd https 服务器启动成功

posted @ 2024-04-13 11:46  LiYanbin  阅读(190)  评论(0编辑  收藏  举报