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的值一样代表内容没有被更改且确定是由发送者签名过