OpenSSL自签名证书
HTTPS安全通信需要“数字证书”,.NetCore中支持X.509格式标准的安全证书,所以我们先要搞一个X509自签名证书(正规的网站需要向CA机构申请证书),这里推荐大家用OpenSSL工具生成证书。
Windows版本下载地址: http://slproweb.com/products/Win32OpenSSL.html ,如果只是自测使用,下载简化版Light的exe格式的直接安装就行。
1、在OpenSSL工具bin目录下运行cmd
2、进入命令模式,输入以下命令
>openssl
就是等待输入命令的状态
3、生成私钥文件.key
>genrsa -out test1.key 2048
4、生成csr证书签名请求文件
该文件实际是用来向CA机构申请证书的,由于我们是自签名,所以接下来我们用这个文件生成.cer证书
>req -new -key test1.key -out test1.csr
注意,证书密码是123456
这里的Common Name是我们本地映射的一个域名
要让谷歌认,得找个域名,修改hosts文件
127.0.0.1 www.test.com
5、准备http.ext
再OpenSSL的bin目录下,创建一个http.ext文件,并填入以下内容
keyUsage = nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = serverAuth, clientAuth subjectAltName=@SubjectAlternativeName [ SubjectAlternativeName ] DNS.1=www.test.com
注意,这里的DNS.1写我们的Common Name的域名
6、生成.Cer证书
x509 -req -days 365 -in test1.csr -signkey test1.key -out test1.cer -extfile http.ext
查看证书
x509 -in test1.cer -text -noout
可以看到,我们的域名信息已经读取进去了
7、生成.pfx证书
pkcs12 -export -out test1.pfx -inkey test1.key -in test1.cer
一顿操作,发现bin目录下,多了这么几个文件,我们需要用到的就是test1.pfx文件
8、创建一个.NetCore WebApi项目,不勾选HTTPS选项,我们来自己实现
修改program.cs文件
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseKestrel(options => { //设置监听端口 int port =5002; options.ListenAnyIP(port); //监听https端口 int httpsPort = 5003; options.ListenAnyIP(httpsPort, config => { string certPath = @"E:\CarsonYang\Demo\HttpsDemo\HttpsDemo\bin\Debug\net5.0\test1.pfx"; string certPwd ="123456"; var x509ca = new X509Certificate2(certPath, certPwd); //config.UseHttps(certPath, certPwd); config.UseHttps(x509ca); }); }); webBuilder.UseStartup(); });
certPath是刚刚的pfx文件,certPwd是证书密码
9、启动访问一下
https://www.test.com:5003/swagger/index.html
10、导入证书,解决信任问题
“运行”输入“certlm.msc”直接打开系统证书管理页面,选择“受信任的根证书颁发机构”右击导入你生成的.cer证书
在【证书】上右键,【所有任务】,【导入】
选择刚刚生成的pfx文件,下一步下一步,直到完成。
提示导入成功
再次启动webapi项目,访问地址
https://www.test.com:5003/swagger/index.html
大功告成啦
留下您的脚步
最近评论