nginx如何将http访问的网站改成https访问


Posted in Servers onMarch 31, 2021

1. 背景

我有个用于数据展示的网站使用nginx对外提供http访问,另外一个系统用超链接的方式跳转到我的网站提供给终端用户访问。后来对方说他们的站点是https访问的,不能直接访问http,所以需要我支持https访问。

所以这里仅限于展示类网站的参考,交互式网站我也不会。

***对nginx的了解仅限于可以通过配置文件完成网站访问的配置,其他没有深入理解。***

2. 预备知识

https:

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 

简单来讲就是网站中嵌入证书,用户通过浏览器和网站服务器交互时数据会被加密,保证安全。

证书体系:

树状结构,可能有多层证书办法机构,最顶层的叫根证书机构,持有根证书私钥,可以签发下一级证书,每个机构或者人使用的证书由证书颁发机构颁发,简单来讲就是用颁发机构的私钥,对证书人的个人信息、公钥等诸多信息做数字签名,对外宣称这个证书由他证明。证书可以公开访问以验证持有者身份,由颁发机构背书,证书对应私钥由持有人持有,不对外公开,用于解密他人通过证书中公钥加密的私密消息。

有点类似于公安机构对于身份证的颁发,全国总上层有一个公安部,负责所有省级公安厅的管理,省级负责市级,...,最终由派出所给个人颁发身份证,我们拿着身份证就可以对外证明自己的身份,因为有派出所的背书,而派出所又有上级、上上级一直到公安部的背书。不同的是我们的身份证里并没有证书包含的那么多消息。

备注:证书依赖于公钥加密体制,公钥密码体系包含公钥、私钥两把密钥,公钥用户加密、验签,私钥用于解密、签名。

3. 操作过程

3.1 证书生成

主要过程是:根证书 -->服务器证书,这里的服务器证书指的是我上面所提到需要添加https访问的网站服务器,

1. 生成根证书私钥、生成根证书请求、创建自签发根证书

#生成根证书私钥
openssl genrsa -out root.key 2048
 
#生成根证书请求
openssl req -new -key root.key -out root.csr
 
#用根证书私钥自签生成根证书
openssl x509 -req -in root.csr -extensions v3_ca -signkey root.key -out root.crt

这里根证书私钥自签证书的原因是,证书的格式都是一致的,需要有证书颁发签发,因为根证书颁发机构没有上级,所以根证书颁发机构给自己签发证书,因此有需要大家都信任他。

2. 生成服务器证书私钥、生成服务器证书请求、使用根证书私钥签发服务器证书,这里注意此服务器证书的commonName需要设置成nginx配置文件中的server_name,保持一致。

#生成服务器证书私钥
openssl genrsa -out server.key 2048
 
#生成服务器证书请求
openssl  req -new -key server.key  -out server.csr
 
#生成服务器证书
openssl x509 -days 365 -req -in server.csr -extensions v3_req -CAkey root.key -CA root.crt -CAcreateserial -out server.crt -extfile openssl.cnf

 这里有个openssl.cnf文件需要注意,里面描述了需要颁发的服务器证书的一些信息,内容如下

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
 
[req_distinguished_name]
countryName = CN
countryName_default = CN
stateOrProvinceName = Guizhou
stateOrProvinceName_default = Guizhou
localityName = Guizhou
localityName_default = Guizhou
organizationalUnitName = (如果网页访问是ip就写ip,如果是域名就写域名)
organizationalUnitName_default = (如果网页访问是ip就写ip,如果是域名就写域名)
commonName = (如果网页访问是ip就写ip,如果是域名就写域名)
commonName_max = 64
 
[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment

3.2 nginx配置

打开nginx配置中HTTPS server部分的注释,修改server_name、ssl_certificate、ssl_certificate_key、location中的root等字段。

...
 # HTTPS server
 #
 server {
  listen  443 ssl;
  server_name xxx.com(网址访问地址);

 ssl on;
  ssl_certificate  xxx.crt(服务器证书);
  ssl_certificate_key xxx.key(服务器证书私钥);

  ssl_session_cache shared:SSL:1m;
  ssl_session_timeout 5m;

  ssl_ciphers HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers on;

  location / {
   root xxx(前端代码目录);
   index index.html index.htm;
  }
 }
...

启动nginx,即可对外提供服务了。

3.3 浏览器访问

到现在我们已经在服务器端配置了https访问,但是浏览器访问的时候会提示证书错误,因为浏览器现在还不认识我们的证书,不确定它是不是安全的。就像我们都拿着公安部颁发的身份证去证明身份没问题,但是你拿着自己颁发的一个身份证去证明别人就不一定会信了,因为没人知道你的颁发机构是什么情况。

所以我们要把服务器证书的颁发机构,即我们上面生成的根证书添加到浏览器的信任列表中,具体操作方法:如果是windows系统,可以直接双击根证书文件,点击安装,安装到受信任的根证书颁发机构,这时候就可以顺利访问了。

以上就是nginx如何将http访问的网站改成https访问的详细内容,更多关于nginx http访问改成https访问的资料请关注三水点靠木其它相关文章!


Tags in this post...

Servers 相关文章推荐
nginx location中多个if里面proxy_pass的方法
Mar 31 Servers
Nginx+SpringBoot实现负载均衡的示例
Mar 31 Servers
Nginx进程调度问题详解
Sep 25 Servers
Nginx下SSL证书安装部署步骤介绍
Dec 06 Servers
iSCSI服务器CHAP双向认证配置
Apr 01 Servers
Windows Server 2012 R2 磁盘分区教程
Apr 29 Servers
nginx 配置指令之location使用详解
May 25 Servers
利用nginx搭建RTMP视频点播、直播、HLS服务器
May 25 Servers
项目中Nginx多级代理是如何获取客户端的真实IP地址
May 30 Servers
Linux中文件的基本属性介绍
Jun 01 Servers
Linux安装Docker详细教程
Jul 07 Servers
Apache Kafka 分区重分配的实现原理解析
Jul 15 Servers
Nginx+Tomcat实现负载均衡、动静分离的原理解析
使用nginx动态转换图片大小生成缩略图
Mar 31 #Servers
Nginx反向代理多个服务器的实现方法
基于nginx实现上游服务器动态自动上下线无需reload的实现方法
为什么 Nginx 比 Apache 更牛逼
Mar 31 #Servers
Nginx的rewrite模块详解
Mar 31 #Servers
nginx常用命令放入shell脚本详解
Mar 31 #Servers
You might like
php连接数据库代码应用分析
2011/05/29 PHP
php加密解密函数authcode的用法详细解析
2013/10/28 PHP
php通过curl模拟登陆DZ论坛
2015/05/11 PHP
php分页查询的简单实现代码
2017/03/14 PHP
ThinkPHP框架实现导出excel数据的方法示例【基于PHPExcel】
2018/05/12 PHP
MC Dialog js弹出层 完美兼容多浏览器(5.6更新)
2010/05/06 Javascript
javascript中setTimeout的问题解决方法
2014/05/08 Javascript
javascript拖拽应用实例(二)
2016/03/25 Javascript
js获取html的span标签的值方法(超简单)
2016/07/26 Javascript
详解Jquery的事件操作和文档操作
2016/12/19 Javascript
AngularJS之ionic 框架下实现 Localstorage本地存储
2017/04/22 Javascript
jQuery 控制文本框自动缩小字体填充
2017/06/16 jQuery
jQuery菜单实例(全选,反选,取消)
2017/08/28 jQuery
对于input 框限定输入值为浮点型的js代码
2017/09/25 Javascript
Node层模拟实现multipart表单的文件上传示例
2018/01/02 Javascript
简单的Vue SSR的示例代码
2018/01/12 Javascript
vue 指定组件缓存实例详解
2018/04/01 Javascript
Vue结合Video.js播放m3u8视频流的方法示例
2018/05/04 Javascript
vue填坑之webpack run build 静态资源找不到的解决方法
2018/09/03 Javascript
js计算两个时间差 天 时 分 秒 毫秒的代码
2019/05/21 Javascript
[01:11:48]Fnatic vs IG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
2018/06/25 Python
对Python强大的可变参数传递机制详解
2019/06/13 Python
详解Python并发编程之从性能角度来初探并发编程
2019/08/23 Python
Python 将json序列化后的字符串转换成字典(推荐)
2020/01/06 Python
美国面料纺织品商城:Fabric.com
2017/06/28 全球购物
巴西食品补充剂在线零售商:Músculos na Web
2017/08/07 全球购物
Vision Direct比利时:在线订购隐形眼镜
2019/08/27 全球购物
PHP中如何使用Cookie
2015/10/28 面试题
大学生求职中的自我评价
2013/10/01 职场文书
调解员先进事迹材料
2014/02/07 职场文书
《小池塘》教学反思
2014/02/28 职场文书
上海世博会口号
2014/06/19 职场文书
2015秋季运动会通讯稿
2015/07/18 职场文书
《好妈妈胜过好老师》:每个孩子的优秀都是有源头的
2020/01/03 职场文书
德生BCL3000抢先使用感受和评价
2022/04/07 无线电