nginx配置https访问 生成ssl自签名证书,浏览器直接访问_nginx cer证书-程序员宅基地

技术标签: nginx  日常开发总结  https  ssl  

问题

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文件,既是证书文件,也含有公钥,也含有私钥。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq1309664161/article/details/127962653

智能推荐

linux devkmem 源码,linux dev/mem dev/kmem实现访问物理/虚拟内存-程序员宅基地

文章浏览阅读451次。dev/mem: 物理内存的全镜像。可以用来访问物理内存。/dev/kmem: kernel看到的虚拟内存的全镜像。可以用来访问kernel的内容。调试嵌入式Linux内核时,可能需要查看某个内核变量的值。/dev/kmem正好提供了访问内核虚拟内存的途径。现在的内核大都默认禁用了/dev/kmem,打开的方法是在 make menuconfig中选中 device drivers --> ..._dev/mem 源码实现

vxe-table 小众但功能齐全的vue表格组件-程序员宅基地

文章浏览阅读7.1k次,点赞2次,收藏19次。vxe-table,一个小众但功能齐全并支持excel操作的vue表格组件_vxe-table

(开发)bable - es6转码-程序员宅基地

文章浏览阅读62次。参考:http://www.ruanyifeng.com/blog/2016/01/babel.htmlBabelBabel是一个广泛使用的转码器,可以将ES6代码转为ES5代码,从而在现有环境执行// 转码前input.map(item => item + 1);// 转码后input.map(function (item) { return item..._让开发环境支持bable

FPGA 视频处理 FIFO 的典型应用_fpga 频分复用 视频-程序员宅基地

文章浏览阅读2.8k次,点赞6次,收藏29次。摘要:FPGA视频处理FIFO的典型应用,视频输入FIFO的作用,视频输出FIFO的作用,视频数据跨时钟域FIFO,视频缩放FIFO的作用_fpga 频分复用 视频

R语言:设置工作路径为当前文件存储路径_r语言设置工作目录到目标文件夹-程序员宅基地

文章浏览阅读575次。【代码】R语言:设置工作路径为当前文件存储路径。_r语言设置工作目录到目标文件夹

background 线性渐变-程序员宅基地

文章浏览阅读452次。格式:background: linear-gradient(direction, color-stop1, color-stop2, ...);<linear-gradient> = linear-gradient([ [ <angle> | to <side-or-corner>] ,]? &l..._background线性渐变

随便推点

【蓝桥杯省赛真题39】python输出最大的数 中小学青少年组蓝桥杯比赛 算法思维python编程省赛真题解析-程序员宅基地

文章浏览阅读1k次,点赞26次,收藏8次。第十三届蓝桥杯青少年组python编程省赛真题一、题目要求(注:input()输入函数的括号中不允许添加任何信息)1、编程实现给定一个正整数N,输出正整数N中各数位最大的那个数字。例如:N=132,则输出3。2、输入输出输入描述:只有一行,输入一个正整数N输出描述:只有一行,输出正整数N中各数位最大的那个数字输入样例:

网络协议的三要素-程序员宅基地

文章浏览阅读2.2k次。一个网络协议主要由以下三个要素组成:1.语法数据与控制信息的结构或格式,包括数据的组织方式、编码方式、信号电平的表示方式等。2.语义即需要发出何种控制信息,完成何种动作,以及做出何种应答,以实现数据交换的协调和差错处理。3.时序即事件实现顺序的详细说明,以实现速率匹配和排序。不完整理解:语法表示长什么样,语义表示能干什么,时序表示排序。转载于:https://blog.51cto.com/98..._网络协议三要素csdn

The Log: What every software engineer should know about real-time data's unifying abstraction-程序员宅基地

文章浏览阅读153次。主要的思想,将所有的系统都可以看作两部分,真正的数据log系统和各种各样的query engine所有的一致性由log系统来保证,其他各种query engine不需要考虑一致性,安全性,只需要不停的从log系统来同步数据,如果数据丢失或crash可以从log系统replay来恢复可以看出kafka系统在linkedin中的重要地位,不光是d..._the log: what every software engineer should know about real-time data's uni

《伟大是熬出来的》冯仑与年轻人闲话人生之一-程序员宅基地

文章浏览阅读746次。伟大是熬出来的  目录  前言  引言 时间熬成伟大:领导者要像狼一样坚忍   第一章 内圣外王——领导者的心态修炼  1. 天纵英才的自信心  2. 上天揽月的企图心  3. 誓不回头的决心  4. 宠辱不惊的平常心  5. 换位思考的同理心  6. 激情四射的热心  第二章 日清日高——领导者的高效能修炼  7. 积极主动,想到做到  8. 合理掌控自己的时间和生命  9. 制定目标,马..._当狼拖着受伤的右腿逃生时,右腿会成为前进的阻碍,它会毫不犹豫撕咬断自己的腿, 以

有源光缆AOC知识百科汇总-程序员宅基地

文章浏览阅读285次。在当今的大数据时代,人们对高速度和高带宽的需求越来越大,迫切希望有一种新型产品来作为高性能计算和数据中心的主要传输媒质,所以有源光缆(AOC)在这种环境下诞生了。有源光缆究竟是什么呢?应用在哪些领域,有什么优势呢?易天将为您解答!有源光缆(Active Optical Cables,简称AOC)是两端装有光收发器件的光纤线缆,主要构成部件分为光路和电路两部分。作为一种高性能计..._aoc 光缆

浏览器代理服务器自动配置脚本设置方法-程序员宅基地

文章浏览阅读2.2k次。在“桌面”上按快捷键“Ctrl+R”,调出“运行”窗口。接着,在“打开”后的输入框中输入“Gpedit.msc”。并按“确定”按钮。如下图 找到“用户配置”下的“Windows设置”下的“Internet Explorer 维护”的“连接”,双击选择“自动浏览器配置”。如下图 选择“自动启动配置”,并在下面的“自动代理URL”中填写相应的PAC文件地址。如下..._設置proxy腳本