.NetCore+OpenSSL实现Https
前言
最近,有时间研究了一下HTTPS安全通信的原理,感兴趣的同学可以看下上一篇博文深入理解Https如何保证通信安全 ,随即联想到近段时间开发的.NetCore项目,.NetCore API应用程序是默认支持HTTP(5000端口)和HTTPS(5001端口)的,但由于项目都是在内网中使用,所以走的都是HTTP,忽略了HTTPS的实战应用,所以本着“厚积薄发”的原则,和大家分享下实操经验。
OpenSSL自签名证书
HTTPS安全通信需要“数字证书”,.NetCore中支持X.509格式标准的安全证书,所以我们先要搞一个X509自签名证书(正规的网站需要向CA机构申请证书),这里推荐大家用OpenSSL工具生成证书。
Windows版本下载地址: http://slproweb.com/products/Win32OpenSSL.html ,如果只是自测使用,下载简化版Light的exe格式的直接安装就行。
CMD窗口启动OpenSSL:
第一步:生成私钥文件.key
genrsa -out test.key 2048
2048:表示私钥文件字节大小
第二步:生成cer格式证书(适用windows系统)
req -new -x509 -key test.key -out test.cer -days 3650
-509:表示生成x509证书而不是生成证书请求文件csr
-key:指定私钥文件,与生成的cer(实际就是包含公钥)形成密钥对
-days 3650:设置证书有效期,以天为单位
后续会要求输入证书的相关信息:
其中Common Name一定要注意:要设置你的网站的域名(如果是本地环境,可以自定义一个域名,修改系统Host文件,将127.0.0.1指向自定义域名,如:www.samples.com)
第三步:生成.pfx证书(包含私钥和公钥),.NetCore项目中使用
pkcs12 -export -out test.pfx -inkey test.key -in test.cer
然后按照提示设置证书密码:
完成以上步骤后,我们就可以在根目录得到三份文件
然后,你只要在本地安装.cer证书就可以安全访问自签名的HTTPS网站了。
.NetCore API项目开启HTTPS
为Kestrel服务器开启Https端口监听,并使用X509格式证书验证。
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(builder =>
{
builder.UseKestrel(options =>
{
//设置监听端口
var configure = options.ApplicationServices.GetRequiredService<IConfiguration>();
var port = configure.GetValue<int>("Http:Port");
options.ListenAnyIP(port);
//监听https端口
var httpsPort = configure.GetValue<int>("Https:Port");
options.ListenAnyIP(httpsPort, config =>
{
var certPath = configure.GetValue<string>("Cert:path");
var certPwd = configure.GetValue<string>("Cert:pwd");
var x509ca = new X509Certificate2(certPath, certPwd);
//config.UseHttps(certPath, certPwd);
config.UseHttps(x509ca);
});
});
builder.UseStartup<Startup>();
});
证书路径和证书密码我这里是通过配置文件配置的,证书密码就是上面我们生成.pfx文件时输入的Export PassWord。
打开IE浏览器访问https,正常访问且锁标志安全显示
至此,自签名证书已实现HTTPS安全通信。
但是奇怪的问题来了,Chrome浏览器却依旧不支持,Chrome打开后提示没有指定主题名称:
关于这个问题我也是在网上找了几个版本的解决方案,大多数都是说修改openssl配置文件openssl.cnf,且多是在Linux环境下的操作,对于我们这个windows简化版本的OpenSSL来说确定无效。
于是根据网上的一些其他思路,自己摸索出了下面的方式:
第一步:同样生成私钥文件.key
genrsa -out test1.key 2048
第二步:生成csr证书签名请求文件
该文件实际是用来向CA机构申请证书的,由于我们是自签名,所以接下来我们用这个文件生成.cer证书
req -new -key test1.key -out test1.csr
csr文件要求输入以下证书信息:
同样,这里需要注意Common Name域名配置
第三步:生成.Cer证书
x509 -req -days 365 -in test1.csr -signkey test1.key -out test1.cer -extfile http.ext
这里注意: -extfile http.ext ,根目录下新增http.ext文件,并填写以下内容:
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName=@SubjectAlternativeName
[ SubjectAlternativeName ]
DNS.1=www.samples.com
DNS.1=www.samples.com 这里实际上就是指定主题备用名称,和证书文件中的Common Name域名保持一致。
完了之后,我们可以看下证书信息:
x509 -in test1.cer -text -noout
我们发现http.ext文件中的信息已成功加入证书信息中。
第四步:同样,生成.pfx证书(包含私钥和公钥)
pkcs12 -export -out test1.pfx -inkey test1.key -in test1.cer
然后打开Chrome浏览器,访问正常且安全
本文向大家介绍了windows环境下使用OpenSSL生成自签名证书的操作步骤,模拟了HTTPS的数字证书,以及解决Chrome浏览器证书不可信问题的解决方案,并结合.NetCore项目实现了HTTPS安全通信。
.NetCore+OpenSSL实现Https的更多相关文章
- 基于OpenSSL的HTTPS通信C++实现
HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版.即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL.Nebula是一个为开发者提供一个快速开发 ...
- openssl生成https证书
openssl生成https证书 分类: 其它2009-09-03 16:20 452人阅读 评论(0) 收藏 举报 includemoduleaccessapachessl服务器 openssl生成 ...
- 基于openssl搭建https服务器
1. 搭建web环境 我这里使用源码编译安装方式安装httpd.详情可以参加我的一篇博客http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_1 ...
- Nginx详解二十一:Nginx深度学习篇之配置苹果要求的openssl后台HTTPS服务
配置苹果要求的证书: 1.服务器所有的连接使用TLS1.2以上的版本(openssl 1.0.2) 2.HTTPS证书必须使用SHA256以上哈希算法签名 3.HTTPS证书必须使用RSA2048位或 ...
- OPENSSL 生成https 客户端证书
下面说下拿服务器证书.(前提是服务器是https,客户端认证用的时候),服务端不给的时候,我们自己去拿(不给怼他!,哈哈,开个玩笑,都会给的) openssl s_client -connect 域名 ...
- 基于openssl的https服务配置
环境: CA服务器:192.168.1.121 WEB服务器: 192.168.1.107 一.在CA服务器上生成自签证书 1.生成根私钥 (umask 077;openssl genrsa -out ...
- OpenSSL和https原理
https原理: 浏览器请求服务端的公钥证书,server将注冊的证书发送给client. client向办法机构验证证书的合法性,证书 包含公钥,server网址及一些信息. 验证完成,client ...
- linux下使用openssl生成https的crt和key证书
x509证书一般会用到三类文,key,csr,crt Key 是私用密钥openssl格,通常是rsa算法. Csr 是证书请求文件,用于申请证书.在制作csr文件的时,必须使用自己的私钥来签署申,还 ...
- LInux基于nginx与OpenSSL实现https访问
注意!!首先在nginx安装时添加--with-http_ssl_module模块,否则将会报错,只能从头开始了 自建证书: 通过openssl命令(软件包:openssl :openssl-deve ...
随机推荐
- SpringBoot Validation参数校验 详解自定义注解规则和分组校验
前言 Hibernate Validator 是 Bean Validation 的参考实现 .Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的 ...
- 『心善渊』Selenium3.0基础 — 18、使用Selenium操作浏览器的弹窗
目录 1.操作浏览器自带弹窗 2.操作浏览器页面自定义弹窗 1.操作浏览器自带弹窗 (1)说明: webdriver中处理JavaScript所生成的alert.confirm 以及prompt 弹窗 ...
- hdu 6048 Puzzle 拼图 逆序数
关于拼图和逆序数的关系可以看看这个 http://www.guokr.com/question/579400/ 然后求逆序数在判断就行了 按题意生成原始排列,观察发现,每一轮数后方比该数小的数的数量( ...
- mysql,mongodb,redis区别
MongoDB: 它是一个内存数据库,数据都是放在内存里面的. 对数据的操作大部分都在内存中,但 MongoDB 并不是单纯的内存数据库. MongoDB 是由 C++ 语言编写的,是一个基于分布式文 ...
- Nacos实战一:架构及部署
2018年,阿里巴巴开源 Nacos,由此成为继 Eureka.Consul.Apollo 等服务注册发现&配置的又一开源框架,到如今2021年,Nacos 已经历了 0.01->1.4 ...
- cordova自定义插件开发流程
cordova自定义插件开发:1.cordova安装:npm install -g cordova2.plugman安装:npm install -g plugman3.cordova创建工程:cor ...
- npm run start失败&Node.js 查询指定端口运行情况及终止占用端口办法
缘由: node.js项目中运行npm run start命令脚本报错,No such file or directory 最开始以为是命令脚本找不到所谓的执行路径,但后面发现不是,是package. ...
- 物理机连接虚拟机中的数据库及Windows添加防火墙允许端口详细操作步骤
公司项目中因为会使用到SQL server数据库,但是自己电脑无论安装2008R2或者2014版本都不成功,我想可能是和之前安装的一些Windows的软件存在冲突. 于是便单独创建了一台虚拟机,在虚拟 ...
- 交换机H3C S3100V2-52TP-WiNet
H3C S3100V2-52TP-WiNet参数 使用手册三层交换机 默认管理IP:192.168.0.234 将电脑IP设置为192.168.0.0这一组,网络连接交换机,默认用户名密码都为adm ...
- C语言:虚拟地址 和编译模式
所谓虚拟地址空间,就是程序可以使用的虚拟地址的有效范围.虚拟地址和物理地址的映射关系由操作系统决定,相应地,虚拟地址空间的大小也由操作系统决定,但还会受到编译模式的影响.这节我们先讲解CPU,再讲解编 ...