nginx配置https访问 生成ssl自签名证书,浏览器直接访问

news2024/11/30 8:44:11

问题

nginx配置自签名ssl证书,来支持https访问nginx,在浏览器中访问nginx时,提示有风险。而访问其他各大网站时,也是使用了https协议,为什么可以直接访问,而不提示有风险呢?

解疑

先从ssl证书说起。是否使用https协议或者说是否使用ssl认证,是后台网站服务器来决定的。如果想使用https协议,则在后台服务中配置ssl证书即可。配置了ssl证书后,浏览器访问网站服务,就要使用https协议。在这个过程中,浏览器会先获取到网站服务器中的证书信息,然后浏览器本身维护了一个受信任的证书列表。只要网站服务返回的证书在这个受信任的证书列表里面,那么说明这个服务是安全的,浏览器就直接访问到服务了。如果返回的证书没在受信任列表中,那么浏览器认为这个服务是不安全的,就会发出报警信息,不过用户可以手动选择信任此网站,继续访问服务。
由上面的描述可知,使用了ssl证书后,是浏览器为了安全起见,去验证服务器的证书是否信任,信任才能直接访问。大厂的网站的https协议浏览器没有发出报警,是因为大厂都使用了第三方授权的SSL证书,这些证书浏览器默认都是受信任的证书,所以直接就可以访问。但是第三方授权SSL证书一般都要收费才能获取。
而本项目中使用的证书,是自签名证书,浏览器受信任证书列表中没有它,所以就发出报警了。

上述说的是https单项认证,即浏览器认证后台服务证书。也可以开启双向认证,即浏览器认证服务器证书,服务器也认证浏览器证书。但是对于大众网站来说,一般都是单向认证即可。

解决

通过上面的描述可知,想要使自签名证书在浏览器中不报警,那么就要加入到浏览器信任列表中。网上搜了很多nginx生成证书并加入浏览器信任列表的方法,但大部分都不能跳过浏览器的报警。下面记录可以成功跳过浏览器报警的证书生成方式和配置方式。
使用java提供的工具进行生成。
第一步:

keytool -genkeypair -keyalg RSA -dname "CN=Demo" -alias server -keystore server.jks -keypass 123456 -storepass 123456 -ext SAN=dns:域名,ip:后端服务ip

生成server.jks文件。

第二步:

keytool -exportcert -file server.cer -alias server -keystore server.jks -storepass 123456

生成server.cer文件。

第三步:

keytool -importcert -file server.cer -alias server1 -keyalg client_trusk.jks -storepass 123456 -keypass 123456

输出如下:
在这里插入图片描述
输入是即可。

第四步:

keytool -importkeystore -srckeystore server.jks -destkeystore server-pkcs12.p12 -deststoretype PKCS12

在这里插入图片描述
输入相应的密码即可。生成server-pkcs12.p12文件。

第五步:

openssl x509 -inform der -in server.cer -out server-pem.pem

生成了server-pem.pem文件。

第六步:

openssl pkcs12 -nocerts -nodes -in server-pkcs12.p12 -out server.key

生成server.key文件。

第七步:
将server.key文件和server-pem.pem文件配置到nginx服务的config配置文件中,将server.cer文件安装在浏览器受信任列表中。这样,浏览器访问nginx就可以不再报警,直接访问了。

参考文章:Nginx证书配置:cer文件和jks文件转nginx证书.crt和key文件
(注意:参考文章方式有问题,按照参考文章配置出来的nginx无法让浏览器跳过报警,本博客对该文章进行了优化和纠错)

扩展

在上面的操作中,一共生成了如下几个文件:
在这里插入图片描述
而最终,只用到了其中的三个文件。那么这几个文件到底都是干啥的呢?具体可参考关于PEM, DER, CRT, CER,KEY等各类证书与密钥文件后缀的解释一文,这里只做一下简单记录。

在上述步骤中,第一步生成了jks文件,jks文件表示Java 密钥库. 同时包含证书和私钥。

第二步,在第一步生成的jks文件中,导出了cer文件。而cer文件是只包含证书,不保存私钥。一般Linux使用.crt后缀,.cer是windows后缀。因为jks中既包括私钥,也包括证书,所以第二步上讲证书提取出来成了cer文件。而这个cer文件,也是要最后在浏览器中安装到受信任列表的证书文件。

第三步也是对cer证书的一个操作,让这个证书受信任之类的,固定操作,记住即可。

第四步是将第一步生成的jks文件,转换成了p12格式的文件。p12文件是二进制格式,同时包含证书和私钥。可以看出是对jks文件换了一种格式而已,p12还包含证书和私钥。

第五步将cer证书转换成了pem格式。pem文件是使用Base64 ASCII编码后的纯文本文件。不管是证书还是密钥,只要是pem格式,使用文本编辑器打开都是类似的样子,一串冗长的字符串。可以看出,pem只是一种文件格式,证书和私钥,都可以转成pem格式。这里是将证书转成了pem格式。

第六步将p12文件转换成了.key文件,.key文件是私钥,与证书一一配对。即将p12文件中的私钥提取出来了。

第七步就是将.key文件(私钥)和.pem文件(证书)配置到了nginx中,将.cer文件(windows格式证书)配置到了浏览器信任列表中,这样就跳过了浏览器报警。

公钥/私钥/证书三者的区别

在ssl证书中,一会有公钥,一会儿有私钥,一会儿有证书,完全搞蒙蔽了。下面来梳理一下:
首先,私钥是放在服务器中的。如在上面的nginx中,将.key文件(私钥)放在了服务器中。
证书,是配置在服务器中的ssl证书,如nginx中的pem文件就是证书,证书中也有公钥。当浏览器访问ssl协议的网站时,会获取到网站证书,同时也会获取到公钥。然后浏览器拿着获取到的公钥,与网站进行传输,然后到服务器后,服务器通过私钥对数据进行解密。所以https就采用了非对称加密方式保证了数据安全性。

在SpringBoot项目配置https访问单项认证谷歌有效证书一文中,在后台只配置了一个.keystore文件。是因为.keystore文件,既是证书文件,也含有公钥,也含有私钥。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/26250.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MyBatis--动态SQL

Emp类 1.if标签 通过test属性中的表达式判断标签中的内容是否有效 (是否会拼接到SQL中) 接口 映射 测试 2.Where标签 where标签的三个作用 若where标签中有条件成立 , 会自动生成where关键字会自动将where标签中内容前多余的and去掉 , 但是其中内容后多余的and无法去掉若where标…

mysql explain和DESC性能分析

mysql explain和DESC 根据执行时间去只可以粗略的判断sql的性能,我们如果想去查看一条sql语句的性能还需要explain去查看sql的执行计划。 EXPLAIN 或者 DESC 命令获取 MySQL 如何执行 SELECT 语句的信息,包括在 SELECT 语句执行过程中表如何连接和连接的…

如何做好供应商绩效管理?

供应商绩效管理是一种商业行为,用于衡量、分析和管理供应商的绩效。供应商管理专业人员寻求削减成本,减轻风险并推动持续改进。企业可使用供应商管理系统来监测供应商的绩效水平。 供应商绩效管理最佳实践 所有企业都必须发展核心竞争力,有…

【Linux 网络编程 】

Linux 网络编程背景知识:主机字节序列和网络字节序列IP地址的转换API网络编程接口网络节序与主机节序转换函数IP地址转换函数数据读写TCP编程编程步骤:客户端链接服务端成功的条件多线程实现服务端并发多进程实现服务端并发注意:UDP编程编程步…

自动化测试基础简介(本质)

目录 前言 1.自动化基础 2.分层的自动化测试 2.1 单元自动化测试 2.2 接口自动化测试 2.3 UI自动化测试 3.适合自动化的项目 4.自动化测试模型 4.1线性测试 4.2模块化与类库 4.3数据驱动测试 4.4关键字驱动测试 5.POM设计模式 总结 前言 随着软件系统规模的日益…

应对Redis缓存污染问题,你应该知道这些内容

前言 我们在使用Redis做为缓存时,能加速我们对于热点数据的查询。但是如果缓存中有大量的数据不再热门了,从而占据着大量的内存空间,那么我们的Redis性能就会收到很大影响。该如何解决这个问题呢?本文给你答案。 什么是缓存污染…

kafka开发环境搭建

1 kafka开发环境 1.1 安装Java环境 1.1.1 下载linux下的安装包 登陆网址https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 下载完成后,Linux默认下载位置在当前目录下的Download或下载文件夹下,通过命令cd ~/…

轻松学习string类常用接口(附模拟实现)

目录 String的常用接口说明(最常用的) string类对象的容量操作 string类对象的访问及遍历操作 string类对象的修改操作 string类非成员函数 深浅拷贝 简介:Cstring 是C中的字符串。 字符串对象是一种特殊类型的容器,专门设计来操作的字符序列。 不像…

MySQL 全文检索的实现

微信搜「古时的风筝」,还有更多技术干货 这有朋友聊到他们的系统中要接入全文检索,这让我想起了很久以前为一个很古老的项目添加搜索功能的事儿。 一提到全文检索,我们首先就会想到搜索引擎。也就是用一个词、一段文本搜索出匹配的内容。一般…

Vue3中的组合Api与响应函数

文章目录1. 组合Api介绍setup2. 响应函数2.1 ref2.2 reactive2.3 toRef和toRefs2.4 readonly2.5 customRef1. 组合Api介绍 组合Api其实时用于解决功能、数据和业务逻辑分散的问题,使项目更益于模块化开发以及后期维护。 vue2.x — optionsApi 配置式Api — react类…

STM32 定时器定时计算

STM32 定时器定时计算STM32 定时器频率例子公式referenceSTM32 定时器频率 定时时间 定时器频率 / 倍频 /装载周期 htim1.Init.Prescaler 72-1;htim1.Init.CounterMode TIM_COUNTERMODE_UP;htim1.Init.Period 1*1000*1000;tim 72x10^6 / (72-1)/ 110001000 1us 根据定时…

RAC/RAC One Node 修改私网/心跳网卡名

cDAS RAC/RAC One Node一般采用ib ip作为私网/心跳ip,有些现场可能会有修改心跳/私网网卡的需求,一般修改网卡也会伴随修改心跳/私网ip的需求。若心跳/私网有高可用,可以一个个修改。 场景1:心跳网卡有高可用 原心跳网卡名 原心…

Vue中 引入使用 localforage 改进本地离线存储(突破5M限制)

1. 简介 说到本地存储数据,首先想到的是 localStorage,应该很多小伙伴都用过,使用很简单。然而,localStorage 却有下面一些缺点: 存储容量限制,大部分浏览器应该最多5M。我就遇到过localStorage存储字符然…

H264码流中SPS PPS详解

1 SPS和PPS从何处而来? 2 SPS和PPS中的每个参数起什么作用? 3 如何解析SDP中包含的H.264的SPS和PPS串? 1 客户端抓包 在做客户端视频解码时,一般都会使用Wireshark抓包工具对接收的H264码流进行分析,如下所示&…

Transform+ASM插桩系列(3)——Transform+ASM的实战

回顾 在上一章讲到创建完buildSrc之后,实现了项目的plugin之后,就可以在plugin注册我们的Transform。这期文章将正式进入重头戏,今天的学习内容有【认识Transform】、【认识AMS】、【插桩实战】 前言 插桩的技巧中,我们要知道 …

Python实现LDA和KNN人脸识别模型(LinearDiscriminantAnalysis和KNeighborsClassifier算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术。用摄像机或摄像头采集含…

【2021-TITS】Deep Learning in Lane Marking Detection: A Survey

概述 回顾了针对路面标线的深度学习算法,主要分析了他们的网络架构及优化目标;此外还总结了现有车道标线相关的数据集,评价基准及常见的数据处理技术 PaperCode 总结 创新点: 1.总结深度学习网络架构、优化目标2.总结了相关现有…

使用Portman、Postman和Newman自动化API测试

几个月前我换了工作和公司,很喜欢这样的变化,但多少会有些不知所措。现在事情已经安排好了一些,我可以回来做一些我喜欢的事情。 现在正在工作的团队是一个新团队,我们正在努力弄清楚我们的流程,并试图尽可能地实现自…

编译原理实验一:源程序的预处理及词法分析程序的设计与实现(python)

实验目的 设计并实现一个包含预处理功能的词法分析程序,加深对编译中词法分析过程的理解。 实验要求 1、实现预处理功能 源程序中可能包含有对程序执行无意义的符号,要求将其剔除。 首先编制一个源程序的输入过程,从键盘、文件或文本框输…

[附源码]java毕业设计校园拓展活动管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…