随着互联网的飞速发展,我们的工作生活已经离不开互联网,HTTP虽然使用极为广泛, 但是存在不小的安全缺陷, 主要是其数据的明文传送和消息完整性检测的缺乏, 而这两点恰好是网络支付,网络交易等网站应用中安全方面最需要关注的。

谷歌、火狐、360等浏览器开始要求强制使用HTTPS网站,小程序开发也必须是HTTPS网站,企业、网站网页部署HTTPS加密似乎已经势不可挡,今天来讲解一下怎么通过Nginx快速把我们的http网站升级成https

HTTPS介绍

再此之前我们先简单了解一下HTTP和HTTPS;

什么是HTTPS???

HTTPS是一种通过计算机网络进行安全通信的传输协议,经8*由HTTP进行通信**,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。

特点

  • 内容加密:采用混合加密技术,中间者无法直接查看明文内容;
  • 验证身份:通过证书认证客户端访问的是自己的服务器;
  • 保护数据完整性:防止传输的内容被中间人冒充或者篡改。

总结: HTTPS牛X!

HTTP和HTTPS的原理

HTTPS 主要由两部分组成:HTTP + SSL / TLS,也就是在 HTTP 上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过 TLS 进行加密,所以传输的数据都是加密后的数据。

HTTP 原理

① 客户端的浏览器首先要通过网络与服务器建立连接,该连接是通过TCP来完成,一般 TCP 连接的端口号是80。 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和许可内容。

② 服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是 MIME 信息包括服务器信息、实体信息和可能的内容。

HTTPS 原理

① 客户端将它所支持的算法列表和一个用作产生密钥的随机数发送给服务器

② 服务器从算法列表中选择一种加密算法,并将它和一份包含服务器公用密钥的证书发送给客户端;该证书还包含了用于认证目的的服务器标识,服务器同时还提供了一个用作产生密钥的随机数;

③ 客户端对服务器的证书进行验证(有关验证证书,可以参考数字签名),并抽取服务器的公用密钥;然后,再产生一个称作 pre_master_secret 的随机密码串,并使用服务器的公用密钥对其进行加密(参考非对称加 / 解密),并将加密后的信息发送给服务器;

④ 客户端与服务器端根据pre_master_secret以及客户端与服务器的随机数值独立计算出加密和 MAC密钥;

⑤ 客户端将所有握手消息的 MAC 值发送给服务器;

⑥ 服务器将所有握手消息的 MAC 值发送给客户端;

HTTPS优缺点

人有悲欢离合,月有阴晴圆缺,世间万物皆不可称完美,HTTPS自然也有它的优缺点。

优点

  • 使用 HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;
  • HTTPS 协议是由 SSL+HTTP构建的可进行加密传输、身份认证的网络协议,要比 HTTP安全,可防止数据在传输过程中被窃取、改变,确保数据的完整性;
  • HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本;

缺点

  • 相同网络环境下,HTTPS 协议会使页面的加载时间延长近 50%,增加 10%到 20%的耗电。此外,HTTPS 协议还会影响缓存,增加数据开销和功耗;
  • 成本增加。部署 HTTPS 后,因为 HTTPS 协议的工作要增加额外的计算资源消耗,例如 SSL 协议加密算法和 SSL 交互次数将占用一定的计算资源和服务器成本。

配置HTTPS

在网络安全如此重要的今天,HTTPS的必要性还是毋庸置疑的,话不多说,冲冲冲!

需要准备的资源

一台可用的服务器

首先需要有一台可用的服务器,后续用作域名解析。如果没有服务器可以先购买一台云服务器。

一个备案过的域名

需要一个备过案的域名,用于解析服务器的IP地址。在对应购买的域名的服务商网站控制台可以完成备案。

SSL证书

SSL证书有免费和收费两个渠道。

我们这边主要介绍腾讯云和阿里云(排名不分先后)两个免费申请SSL证书的方式,当然资金允许情况下也可以直接购买。

阿里云申请免费SSL证书

阿里云免费证书规则:自2021年起,免费证书申请将切换到证书资源包下每个实名个人/企业主体在一个自然年内可以一次性领取20张免费证书,免费证书每张证书有效期一年。免费证书仅支持绑定一个单域名,不支持绑定通配符域名或者IP。

阿里云申请免费SSL证书文档:官方文档地址

腾讯云申请免费SSL证书

腾讯云免费证书规则:只支持绑定1个域名,可以支持绑定二级域名 abc.com、或是三级域名 example.abc.com。同一主域最多只能申请20张免费证书,每张有效期一年,免费证书到期后如需继续使用证书,需要重新申请并安装。

腾讯云申请免费SSL证书文档:官方文档地址

域名升级成HTTPS

我们如果直接用域名解析IP地址,域名也是可以访问的,但是是HTTP环境的。
我们使用的Nginx来配置升级HTTPS

登录服务器

市场上有很多终端登录工具,比如:xshell、Putty、FinalShell等等,大家可以根据自己的喜好自行安装SSH工具进入服务器(下文以FinalShell工具为示例)。

下载并安装FinalShell

大家也可自行搜索下载SSH客户端,登录页面大同小异,下面以FinalShell工具为例,安装完成后开始登录我们的服务器。



服务器安装Nginx

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,在SSH连接工具连接成功后,输入命令安装Nginx;

// 安装nginx
yum install -y nginx// 设置nginx开机启动
systemctl start nginx.service
systemctl enable nginx.service

但是nginx默认使用端口 80, 我们购买的服务器实例一般默认不开启端口80,默认只有 22 和 3389端口,我们可以通过设置,打开80和443端口;登录相应服务器管理网站打开端口服务,我们这边以阿里云为例开始设置。


设置好之后,我们直接访问我们服务器的公网IP地址,就可以看到如下画面,就代表Nginx设置好了;

Nginx服务器安装SSL证书

单域名升级HTTPS

Github地址:完整的单域名nginx.conf文件配置(清晰注释) – 点击进入


当我们在上面申请成功免费的SSL证书之后,点击下载证书。

下载完成会得到一个压缩包,我们解压之后选择Nginx文件夹,里面的两个文件就是我们后续需要配置的文件。
下载到本地的压缩文件包解压后Nginx文件夹包含:

  • .crt文件:是证书文件,crt是pem文件的扩展名。
  • .key文件:证书的私钥文件。

这时候我们打开我们的SSH工具,进入Nginx的配置:

// 进入nginx目录,默认安装在/etc/nginx,这个目录如果未找到,可以根据nginx安装的位置进入
cd /etc/nginx
步骤一

在Nginx的安装目录下创建cert目录,并且将下载的全部文件拷贝到/etc/nginx/cert目录中(使用SSH工具附带的本地文件上传功能,将本地证书文件和密钥文件上传到Nginx服务器的证书目录[示例中为/etc/nginx/cert])。如果申请证书时是自己创建的CSR文件,请将对应的私钥文件放到cert目录下并且命名为a.key;



步骤二

然后开始Nginx配置,编辑Nginx配置文件(nginx.conf)

```
// 进入nginx目录,默认安装在/etc/nginx,这个目录如果未找到,可以根据nginx安装的位置进入
cd /etc/nginx// 编辑nginx的配置文件
vi nginx.conf
```

步骤三

修改与证书相关的配置内容按i键进入编辑模式,增加代码,监听443端口,如下

```server {listen       443 ssl;listen       [::]:443;server_name  localhost;ssl on;root /usr/share/nginx/html;index index.html index.htm;#证书文件名称ssl_certificate cert/a.crt;#私钥文件名称ssl_certificate_key cert/a.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout  5m;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_prefer_server_ciphers on;# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;location / {}error_page 404 /404.html;location = /40x.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}```修改完成后,按Esc键、输入`:wq!`并按Enter键,保存修改后的配置文件并退出编辑模式。

步骤四

执行命令/sbin/nginx -s reload 重启服务器即可!(如果重启未成功,说明配置文件nginx.conf错误,检查是否有错误,后执行重启)


步骤五

验证是否安装成功,证书安装完成后,可通过访问证书的绑定域名验证该证书是否安装成功。例如:https://www.域名.com

二级域名配置HTTPS

Github地址:完整的单域名+ 二级域名nginx.conf文件配置(完美注释) – 点击进入


上述步骤成功之后,我们就可以通过https://www.域名.com 来访问我们网站了,但是问题来了,因为我们申请的免费SSL证书是单域名绑定,也就是只能让https://www.域名.com 下的内容实现HTTPS访问,我们的二级域名api.域名.com还是只能HTTP访问。

假设我们现在希望api.域名.com以HTTPS访问应该怎么办呢?

添加二级域名解析

首先我们需要添加二级域名的解析,首先保证httpL//api.域名.com可以正常访问,IP地址处就填写我们的公网IP地址。

二级域名申请SSL证书

申请SSL证书的步骤与上面一致,这里就不在赘述了。最多可以申请20张免费证书,只是申请域名SSL证书的时候,记得填写我们的api.域名.com,申请成功后我们下载到本地。

把下载的证书文件放入服务器

这里步骤与上述一致,这里简单说下:
这时候我们打开我们的SSH工具,进入Nginx的配置:

// 进入nginx目录
cd /etc/nginx

在Nginx的安装目录下创建cert目录,并且将下载的全部文件拷贝到/etc/nginx/cert目录中(使用SSH工具附带的本地文件上传功能,将本地证书文件和密钥文件上传到Nginx服务器的证书目录[示例中为/etc/nginx/cert])。

为了避免与其他证书文件呼啸,我们可以将对应的私钥文件放到cert目录下并且命名为api.key、api.crt;

编辑nginx.conf文件
    // 进入nginx目录,默认安装在/etc/nginx,这个目录如果未找到,可以根据nginx安装的位置进入cd /etc/nginx// 编辑nginx的配置文件vi nginx.conf// 我们也可以把**nginx.conf文件**保存至本地然后打开编辑修改,# 我们也可以把nginx.conf文件保存至本地然后修改
开启监听8100端口用于二级域名使用

nginx.conf文件中添加监听8100端口(别忘记检查服务器是否开启了8100端口):

    server {listen       8100 default_server;listen       [::]:8100 default_server;server_name  _;# 这里root表示指向的目录,可以根据自身配置路径root         /usr/share/nginx/html;# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;location / {}error_page 404 /404.html;location = /40x.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}
二级域名指向8100端口并配置SSL证书

nginx.conf文件中再次添加监听443接口:

    server {listen       443 ssl;# 注:域名处修改成自己的域名地址server_name  api.域名.com;ssl on;#证书文件名称ssl_certificate cert/api.crt;#私钥文件名称ssl_certificate_key cert/api.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout  5m;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_prefer_server_ciphers on;# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;location / {# 注:域名处修改成自己的域名地址proxy_pass http://www.域名.com:8100;proxy_set_header Host $host;# 获取请求的ip地址proxy_set_header X-real-ip $remote_addr;# 获取请求的多级ip地址,当请求经过多个反向代理时,会获取多个ip,英文逗号隔开}root /usr/share/nginx/html;index index.html index.htm;error_page 404 /404.html;location = /40x.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}

http自动重定向至https

其实很简单只需要在80端口配置那里添加rewrite重定向即可,

    server {# 80端口配置listen       80 default_server;listen       [::]:80 default_server;# 注意这里改写成自己的域名!!!server_name www.域名.com;# http请求时直接重定向到httpsrewrite ^(.*)$ https://${server_name}$1 permanent; root         /usr/share/nginx/html/video;# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;# location部分用于匹配网页位置location / {}# 404 配置error_page 404 /404.html;location = /40x.html {}# 5xx 配置error_page 500 502 503 504 /50x.html;location = /50x.html {}}

结尾

好了,以上就是本篇全部的配置内容啦。

如果遇到问题可以在下方评论区贴出,一定会第一时间回复!

码字不易。如果觉得本篇文章对你有帮助的话,希望能可以留言点赞支持,非常感谢~

参考资料

HTTPS原理 - 百度百科

感悟

前两天有位老哥评论我两年的一篇博客(搜索引擎搜索标题:JS做一个可输入分钟的倒计时钟功能就可以搜到这篇博客),当时写的一个倒计时的Demo有个bug,没想到在2021年被这位老哥发现了,记得当时想了很久也没找到解决那个bug的方案,两年后的现在发现燕来并没有想象的那么难。

估计现在觉得痛苦万分的事情,也许两年后也会淡然一笑吧。

我像一只趴在窗户上的苍蝇,前途一片光明,却找不到出路

超详细域名和二级域名、子域名免费配置SSL证书变成升级HTTPS(完整配置文件)相关推荐

  1. 网站是HTTP?10分钟变成HTTPS!域名免费添加配置SSL证书,变成https//环境

    对于小程序request请求需要https域名.navigator.geolocation定位也需要在https环境下才可以生效等问题: 前端开发越来越需要https环境来来测试一下API接口和各类问 ...

  2. pfx证书密码怎么查询_网站是HTTP?10分钟变成HTTPS!域名免费添加配置SSL证书,变成https//环境...

    对于小程序request请求需要https域名.navigator.geolocation定位也需要在https环境下才可以生效等问题: 前端开发越来越需要https环境来来测试一下API接口和各类问 ...

  3. 顶级域名、一级域名、二级域名、子域名如何区分

    本文转自:https://www.cnblogs.com/ambon/articles/5631391.html 总结: 几级域名就是几个点来分的,  .com是一级域名, xxx.com就是一级域名 ...

  4. tp5子域名index.php,tp5实现绑定子域名,并且根据子域名定义路由规则

    tp5实现绑定子域名,并且根据子域名定义路由规则 发布时间:2020-10-03 TP5的路由规则,可以绑定子域名到对应的模块,然后根据域名不同,使用不同的路由规则 use \think\Route; ...

  5. 根域名、顶级域名、二级域名_找到出售顶级域名的7个最佳地方(+专家提示)

    根域名.顶级域名.二级域名 We have been often asked by many readers about the best places to find premium domain ...

  6. 域名管理系统 二级域名_域名系统简介

    域名管理系统 二级域名 by Sumedh Nimkarde 由Sumedh Nimkarde 域名系统简介 (An introduction to the Domain Name System) Y ...

  7. 一级域名和二级域名的区别是什么?作用怎样?

    顶级.二级.三级域名的区别和构成 顶级.二级.三级域名的区别 一个完整的域名由二个或二个以上部分组成,各部分之间用英文的句号"."来分隔,最后一个"."的右边部 ...

  8. MVC利用Routing实现多域名绑定一个站点、二级域名以及二级域名注册Area

    最近有这么个需求:在一个站点上绑定多个域名,每个域名进去后都要进入不同的页面.实现了这个功能以后,对于有多个域名,且有虚拟空间,但是虚拟空间却只匹配有一个站点的用户来说,可以节省很多小钱钱. 很久以前 ...

  9. SSL证书绑定了顶级域名后二级域名还需再申请吗

    现在普遍情况下,SSL证书都是需要与域名绑定的,不少企业为了拓展业务的需要,很多情况下网站都存在有多个二级域名.那要是在顶级域名已绑定了SSL证书的前提下,那些企业网站的二级域名还需要申请吗? 这个问 ...

  10. php5.6 开二级域名,PHP二级域名session共享方案

    一般来讲网站都会有主站和子站,比如域名是linuxidc.com,那么一般来讲linuxidc.com和www.linuxidc.com就会是主站,而像bbs.linuxidc.com就会作为论坛而存 ...

最新文章

  1. Transferring GANs: generating images from limited data 论文学习
  2. python爬虫抖某音爬取视频 Airtest+fiddler
  3. 如何根据两个顺序构造⼀个唯⼀的⼆叉树?
  4. echarts做企业关系图谱_echarts 关系图
  5. 拳王虚拟项目公社:通过网络卖虚拟产品,月入1W的全自动化推广引流技术
  6. 异步与多线程的区别 线程安全 (总结)
  7. catia 二次开发:高版本的catia vba项目在低版本的catia上运行,报错
  8. Android 手机设置中铃声设置里的通知音量与铃声音量的分离
  9. Linux工控主板的多通道高速并行采集方案(基于libiio)
  10. Image2icon for Mac(icns图标转换制作工具)
  11. 服装管理系统c语言(大一)
  12. COPY NAV导航网格寻路(4) -- 生成nav网格
  13. Apereo CAS 4.1 反序列化命令执行漏洞复现
  14. backtrack5实现局域网DNS欺骗
  15. 与新晋图灵奖得主的虚拟对话
  16. 28 电子商务风险控制
  17. Node.js 发展史介绍与安装初体验
  18. 【考研政治】时政(思维导图)
  19. phpfetion.php,php 飞信2012最新可用api 接口免费分享phpfetion
  20. 网易云 短信验证码+验证+tp5

热门文章

  1. pmos低电平驱动_详细讲解MOSFET管驱动电路
  2. Latex特殊符号波浪号~,^
  3. 嵌入式开发是什么,与纯软件什么区别?
  4. 巨人肩膀上的迁移学习(2)---图像回归
  5. 【BZOJ】3613: [Heoi2014]南园满地堆轻絮-贪心
  6. Cyclone IV E系列介绍
  7. 关于百度BAE搭建微信公众平台git的使用
  8. 百度云库计算机网页制作说课PPT,网页制作说课资料得
  9. linux系统添加网卡驱动,linux添加网卡及驱动
  10. 【2020年高被引学者】 汤继良 密歇根州立大学