OpenSSL 学习笔记

openssl 下载安装地址

http://slproweb.com/products/Win32OpenSSL.html

安装之后配置环境变量

在path变量添加一条路径D:\soft\OpenSSL-Win64\bin

查看安装版本

C:\Users\ynadmin>openssl version
OpenSSL 3.0.5 5 Jul 2022 (Library: OpenSSL 3.0.5 5 Jul 2022)

常用命令

version 用于查看版本信息
genrsa 用于生成私钥
rsa RSA密钥管理(例如:从私钥中提取公钥)
req 生成证书签名请求(CSR)
X509 X.509证书管理

OpenSSL支持的加密算法:des des3 bf cast cast5 rc2 rc4 rc5 aes等

pem、key:私钥文件,对数据进行加密解密
csr:证书签名请求文件,将其提交给证书颁发机构(ca、CA)对证书签名
crt:由证书颁发机构(ca、CA)签名后的证书或者自签名证书,该证书包含证书持有人的信息、持有人的公钥以及签署者的签名等信息

创建一个文件夹用于存放生成证书文件

生成ca根证书私钥

openssl genrsa -aes256 -out ca.key 2048

genrsa:使用RSA算法生成私钥
-aes256:使用256位密钥的AES算法对私钥进行加密
-out:输出文件路径
2048:私钥长度
这里会输入两遍私钥文件的密码

D:\soft\OpenSSL-Win64\bin\2022_09_16>openssl version
OpenSSL 3.0.5 5 Jul 2022 (Library: OpenSSL 3.0.5 5 Jul 2022)

D:\soft\OpenSSL-Win64\bin\2022_09_16>openssl genrsa -aes256 -out ca.key 2048
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:

生成ca根证书请求文件csr

D:\soft\OpenSSL-Win64\bin\2022_09_16>openssl req -new -key ca.key -out ca.csr
Enter pass phrase for ca.key:----输入密码
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:----国家
State or Province Name (full name) [Some-State]:----省份
Locality Name (eg, city) []:----城市
Organization Name (eg, company) [Internet Widgits Pty Ltd]:----公司名
Organizational Unit Name (eg, section) []:----组织名
Common Name (e.g. server FQDN or YOUR name) []:CA20220916(必填全限定域名或名字,不要重复)
Email Address []:----邮箱

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:----输入密码
An optional company name []:----可选的公司名

D:\soft\OpenSSL-Win64\bin\2022_09_16>

使用自己的私钥签发根证书(自签发证书)

openssl x509 -req -days 365 -signkey ca.key -in ca.csr -out ca.crt

x509:用于自签名证书,生成x509格式的证书
-req:请求签名
-days:证书有效期
-signkey:证书签发的私钥
-in:证书请求文件,有效的文件路径
-out:ca签名后的证书输出路径

D:\soft\OpenSSL-Win64\bin\2022_09_16>openssl x509 -req -days 365 -signkey ca.key -in ca.csr -out ca.crt
Enter pass phrase for ca.key:----输入密码
Certificate request self-signature ok
subject=C = AU, ST = Some-State, O = Internet Widgits Pty Ltd, CN = CA20220916

D:\soft\OpenSSL-Win64\bin\2022_09_16>

生成服务器私钥

openssl genrsa -aes256 -out server.key 2048

生成服务器端证书请求文件

openssl req -new -key server.key -out server.csr
填写和ca根证书请求文件一样的信息,两者要保持一样

使用ca根证书为服务器端签发证书

为保证签发成功,请确认以下事项
1.运行目录中是否含有openssl.cnf配置文件
2.请确认配置文件中[ CA_default ]下面的路径及文件是否存在
3.主要校验文件夹是newcerts,文件名index.txt,serial,serial文件输入默认的"01"字符

openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf

-in:输入证书签名请求文件
-out:签名后的证书输出路径
-cert:ca根证书
-keyfile:ca根证书私钥文件
-config:配置文件

D:\soft\OpenSSL-Win64\bin\2022_09_16>openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf
Using configuration from openssl.cnf
Enter pass phrase for ca.key:----输入密码
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Sep 16 03:12:59 2022 GMT
            Not After : Sep 16 03:12:59 2023 GMT
        Subject:
            countryName               = AU
            stateOrProvinceName       = Some-State
            organizationName          = Internet Widgits Pty Ltd
            commonName                = CA20220916
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            X509v3 Subject Key Identifier:
                F4:BF:4A:B4:4C:73:7F:F5:E4:07:CD:C2:BF:56:32:14:B8:01:57:78
            X509v3 Authority Key Identifier:
                DirName:/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd/CN=CA20220916
                serial:18:D8:10:8D:DE:40:9D:C0:A6:D1:4D:3D:19:3F:4C:F8:11:11:EF:4A
Certificate is to be certified until Sep 16 03:12:59 2023 GMT (365 days)
Sign the certificate? [y/n]:y----输入y


1 out of 1 certificate requests certified, commit? [y/n]y----输入y
Write out database with 1 new entries
Data Base Updated

D:\soft\OpenSSL-Win64\bin\2022_09_16>

生成随机客户端001密钥

生成随机客户端001证书申请文件

使用ca根证书为客户端001签发证书

查看openssl变化





通过crt文件获得cer文件(本质一样,window多用于cer,crt多用于unix)


通过crt得到cer

openssl x509 -inform PEM -in xxx.crt -out xxx.cer

通过cer和key得到pfx

openssl pkcs12 -export -in xxx.cer -inkey xxx.key -out xxx.pfx

IIS使用pfx步骤




https通讯流程

1.浏览器先建立一个tcp的连接
2.浏览器获取证书
3.浏览器验证证书->去ca(证书颁发机构)验证,ca(证书颁发机构)已经把根证书存到了我们的操作系统中
4.浏览器通过公钥加密一个对称密钥(一段数据),
5.服务器接收到密文,通过自己的私钥解密得到对称密钥
6.接下来的传输使用对称加密算法,以及对称密钥进行通信

将证书添加信任

控制面板 -> Internet选项 -> 内容 -> 发行者 -> 受信任的根证书颁发机构 -> 导入 -》选择xxx.crt

浏览器访问仍然不信任

必须带有Subject Alternative Name.

签发csr时,修改openssl.cnf文件

在[ req ]节添加
req_extetions = v3_req
[ v3_req ] 
# Extensions to add to a certificate request 
basicConstraints = CA:FALSE 
keyUsage = nonRepudiation, digitalSignature, keyEncipherment 
subjectAltName = @alt_names
-extensions v3_req
[alt_names]
DNS.1 = localhost
DNS.2 = 127.0.0.1

openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf -extensions v3_req

还有一个缺少可信证书问题

此时尝试将网站发布ip设为未配置,后用localhost访问,浏览器没有显示错误,所以判断和证书的域名有关

添加一个域名
[alt_names]
DNS.1 = localhost
DNS.2 = www.og.haha

重新发布一个证书server03.pfx,重新配置网站绑定证书为server03证书

以管理员权限打开C:\Windows\System32\drivers\etc\hosts 文件,在最后一行添加 172.168.56.221 www.og.haha

使用浏览器测试网址,浏览器已经满意该证书及网址

对于访问这个网站的用户,需要让浏览器认为该网址安全的条件是,1.设置hosts文件的域名信息,2.以受信任的根证书颁发机构条件安装根证书文件

证书颁发流程

1.使用openssl生成密钥对,私钥和公钥
2.公钥加申请者信息加域名合并一个csr文件,发送到CA
3.CA将申请文件产生HASH
4.HASH使用CA的私钥加密生成签名crt证书
5.返回证书给申请者

数字签名及验证

1.内容MSG转成HASH
2.HASH经发送者私钥加密,该内容被数字签名
3.再经由接收者的公钥加密内容和数字签名发送给接收者
4.接收者使用自己的私钥解密一次得到数字签名和内容
5.验证数字签名,获得内容的HASH值A
6.发送者的公钥解密数字签名获得HASH值B
7.对比A和B的值一样代表内容没有被更改且确定是由发送者签名过

posted @ 2022-09-20 09:58  8848-自律即自由  阅读(260)  评论(0编辑  收藏  举报