随笔-网络-制作SSL/TLS自签证书
一、基本理论
前置条件:
服务器向正规CA机构 将自己的公钥 进行数字签名,制作出数字证书
交互流程:
主要流程1:服务端发送数字证书给客户端,证书内容包含服务器的公钥
主要流程2:客户端校验证书合法性,取得服务器公钥,以继续后面的流程
后续流程:图中描述已经很具体,见图中文字描述
要点:客户端校验证书合法性(即如何知道不是一个第三方攻击者提供的证书)?
大致意思:
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 服务器启动成功
本文来自博客园,作者:LiYanbin,转载请注明原文链接:https://www.cnblogs.com/stellar-liyanbin/p/18132584