OpenSSL 安装配置
加密解密和签名区别
公钥加密数据,然后私钥解密的情况被称为加密解密,私钥加密数据,公钥解密一般被称为签名和验证签名.
openssl中的算法
OpenSSL一共提供了8种对称加密算法,其中7种是分组加密算法,仅有的一种流加密算法是RC4。这7种分组加密算法分别是AES、DES、Blowfish、CAST、IDEA、RC2、RC5,都支持电子密码本模式(ECB)、加密分组链接模式(CBC)、加密反馈模式(CFB)和输出反馈模式(OFB)四种常用的分组密码加密模式。其中,AES使用的加密反馈模式(CFB)和输出反馈模式(OFB)分组长度是128位,其它算法使用的则是64位。事实上,DES算法里面不仅仅是常用的DES算法,还支持三个密钥和两个密钥3DES算法。
ca证书由专门的机构颁发
如何使用
1.下载地址
https://slproweb.com/products/Win32OpenSSL.html
2.安装
一直下一步
3.配置环境变量
3.1创建私钥
生成 私钥文件 文件名server.key的密钥
openssl genrsa -out server.key 2048
3.2通过命令行交互方式创建证书申请文件
CSR是Certificate Signing Request的英文缩写,即证书签名请求文件,是证书申请者在申请数字证书时由CSP(加密服务提供者)在生成私钥的同时也生成证书请求文件,证书申请者只要把CSR文件提交给证书颁发机构后,证书颁发机构使用其根证书私钥签名就生成了证书公钥文件,也就是颁发给用户的证书。
生成证书签名请求文件
server.csr
openssl req -new -key server.key -out server.csr
3.3用私钥签名证书申请文件,创建有效时间为10年的自签名证书
生成了一个证书 server.crt
openssl x509 -req -in server.csr -out server.crt -signkey server.key -days 3650
3.4删除密钥中的密码(如果不删除密码,在应用加载的时候会出现输入密码进行验证的情况,不方便自动化部署。)
openssl rsa -in server.key -out server.key
3.5生成pem格式的公钥
有些服务,需要有pem格式的证书才能正常加载,可以用下面的命令:
openssl x509 -in server.crt -out server.pem -outform PEM -days 365
-new:表示生成一个新证书签署请求
-x509:专用于CA生成自签证书,如果不是自签证书则不需要此项
-key:生成请求时用到的私钥文件
-out:证书的保存路径
-days:证书的有效期限,单位是day(天),默认是365天
4.将证书和私钥合并为 pfx 文件
舍弃 3.4 和 3.4 步骤
openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt
需要输入一个密码。假设123456
这将将 server.crt
和 server.key
文件合并为 server.pfx
文件。
生成的 server.pfx
文件包含了公钥、私钥和证书链。它可以用于使用 SSL 保护的 Web 服务器。
以下是每个命令的详细说明:
-
openssl genrsa
:生成 RSA 私钥。 -
-out
:指定私钥文件的名称。 -
2048
:指定私钥的长度。 -
openssl req
:生成证书签名请求。 -
-new
:生成新请求。 -
-key
:指定私钥文件的名称。 -
-out
:指定 CSR 文件的名称。 -
openssl x509
:生成 SSL 证书。 -
-req
:使用 CSR 文件进行签名。 -
-days
:指定证书的有效期(以天为单位)。 -
-in
:指定 CSR 文件的名称。 -
-signkey
:指定私钥文件的名称。 -
-out
:指定证书文件的名称。 -
openssl pkcs12
:将证书和私钥合并为 pfx 文件。 -
-export
:将证书和私钥导出为 pfx 文件。 -
-out
:指定 pfx 文件的名称。 -
-inkey
:指定私钥文件的名称。 -
-in
:指定证书文件的名称。
postman 调用接口会提示 Self signed certificate (自签名证书)
C#使用
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseSerilog() .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>() .UseUrls(config["Url2"]) .UseKestrel(option => { option.ConfigureHttpsDefaults(i => { i.ServerCertificate = new System.Security.Cryptography.X509Certificates.X509Certificate2(@"D:\mes\server.pfx", "123456"); }); }) ;});
本地运行正常,windowsserver2016上运行报指定的网络密码不正确的错误。好像是需要更高级服务器版本才能支持。这个版本默认的加密是AES256,而Windows Server 2016不支持这个版本加密。
OpenSSL 1.0 和 1.1 的默认加密方式是 RC4。
OpenSSL3 默认的加密方式是 AES-256-GCM
openssl enc -ciphers 命令来查看支持的加密方式列表
报 The server mode SSL must use a certificate with the associated private key. 错误