网站和API支持HTTPS,最好在Nginx上配置

news2025/1/12 2:42:46

随着我们网站用户的增多,我们会逐渐意识到HTTPS加密的重要性。在不修改现有代码的情况下,要从HTTP升级到HTTPS,让Nginx支持HTTPS是个很好的选择。今天我们来讲下如何从Nginx入手,从HTTP升级到HTTPS,同时支持静态网站和SpringBoot应用,希望对大家有所帮助!

生成SSL自签名证书

虽然自签名证书浏览器认为并不是安全的,但是学习下SSL证书的生成还是很有必要的! 

  • 首先创建SSL证书私钥,期间需要输入两次用户名和密码,生成文件为blog.key
    openssl genrsa -des3 -out blog.key 2048
  • 利用私钥生成一个不需要输入密码的密钥文件,生成文件为blog_nopass.key
    openssl rsa -in blog.key -out blog_nopass.key
  • 创建SSL证书签名请求文件,生成SSL证书时需要使用到,生成文件为blog.csr
    openssl req -new -key blog.key -out blog.csr
  • 在生成过程中,我们需要输入一些信息,需要注意的是Common Name需要和网站域名一致;
    Enter pass phrase for blog.key:
    -----
    Country Name (2 letter code) [XX]:CN                                         # 国家代码
    State or Province Name (full name) []:jiangsu                                # 省份
    Locality Name (eg, city) [Default City]:jiangsu                              # 城市
    Organization Name (eg, company) [Default Company Ltd]:macrozheng             # 机构名称
    Organizational Unit Name (eg, section) []:dev                                # 单位名称
    Common Name (eg, your name or your server's hostname) []:blog.macrozheng.com # 网站域名
    Email Address []:macrozheng@qq.com                                           # 邮箱
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:                                                     # 私钥保护密码,可以不输入直接回车
    An optional company name []:                                                 # 可选公司名称,可以不输入直接回车
  • 生成SSL证书,有效期为365天,生成文件为blog.crt
    openssl x509 -req -days 365 -in blog.csr -signkey blog.key -out blog.crt
  • 其实最终有用的文件是两个,一个是证书文件blog.crt,另一个是不需要输入密码的证书私钥文件blog_nopass.key

Nginx支持HTTPS

SSL证书生成好了,接下来我们就可以配置Nginx来支持HTTPS了!

安装Nginx

  • 我们还是使用在Docker容器中安装Nginx的方式,先下载Nginx的Docker镜像;
    docker pull nginx:1.10

  • 下载完成后先运行一次Nginx,由于之后我们要把宿主机的Nginx配置文件映射到Docker容器中去,运行一次方便我们拷贝默认配置;
    docker run -p 80:80 --name nginx \
    -v /mydata/nginx/html:/usr/share/nginx/html \
    -v /mydata/nginx/logs:/var/log/nginx  \
    -d nginx:1.10
  • 运行成功后将容器中的Nginx配置目录拷贝到宿主机上去;

    docker container cp nginx:/etc/nginx /mydata/nginx/
  • 将宿主机上的nginx目录改名为conf,要不然/mydata/nginx/nginx这个配置文件目录看着有点别扭;

    mv /mydata/nginx/nginx /mydata/nginx/conf
  • 创建的Nginx容器复制完配置后就没用了,停止并删除容器;

    docker stop nginx
    docker rm nginx
  • 使用Docker命令重新启动Nginx服务,需要映射好配置文件,由于我们要支持HTTPS,还需要开放443端口

    docker run -p 80:80 -p 443:443 --name nginx \
    -v /mydata/nginx/html:/usr/share/nginx/html \
    -v /mydata/nginx/logs:/var/log/nginx  \
    -v /mydata/nginx/conf:/etc/nginx \
    -d nginx:1.10

 

配置支持HTTPS

  • 将我们生成好的SSL证书和私钥拷贝到Nginx的html/ssl目录下;
    cp blog_nopass.key /mydata/nginx/html/ssl/
    cp blog.crt /mydata/nginx/html/ssl/
  • 接下来我们需要给blog.macrozheng.com这个域名添加HTTPS支持,在/mydata/nginx/conf/conf.d/目录下添加Nginx配置文件blog.conf,配置文件内容如下;
    ssl_ciphers          ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; # 配置SSL加密算法
        ssl_prefer_server_ciphers  on; # 优先采取服务器算法
        ssl_session_cache    shared:SSL:10m; # 配置共享会话缓存大小
        ssl_session_timeout  10m; # 配置会话超时时间
    
        location / {
            root   /usr/share/nginx/html/www;
            index  index.html index.htm;
        }
    
        location /admin {
            alias   /usr/share/nginx/html/admin;
            index  index.html index.htm;
        }
    
        location /app {
            alias   /usr/share/nginx/html/app;
            index  index.html index.htm;
        }
    
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
  • 通过HTTPS访问blog.macrozheng.com这个域名,由于我们使用的是自己签名的SSL证书,浏览器会提示您的连接不是私密连接,点击继续前往可以通过HTTPS正常访问;
  • 我们可以查看下证书的颁发者信息,可以发现正好是之前我们创建SSL证书签名请求文件时录入的信息;
  • 接下来我们需要给api.macrozheng.com这个域名添加HTTPS支持,通过这个域名可以使用HTTPS访问我们的SpringBoot应用,api.crtapi_nopass.key文件需要自行生成,在/mydata/nginx/conf/conf.d/目录下添加Nginx配置文件api.conf,配置文件内容如下;
    server {
        listen       80; # 同时支持HTTP
        listen       443 ssl; # 添加HTTPS支持
        server_name  api.macrozheng.com; #修改域名
    
        #ssl配置
        ssl_certificate      /usr/share/nginx/html/ssl/api/api.crt; # 配置证书
        ssl_certificate_key  /usr/share/nginx/html/ssl/api/api_nopass.key; # 配置证书私钥
        ssl_protocols        TLSv1 TLSv1.1 TLSv1.2; # 配置SSL协议版本 # 配置SSL加密算法
        ssl_ciphers          ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
        ssl_prefer_server_ciphers  on; # 优先采取服务器算法
        ssl_session_cache    shared:SSL:10m; # 配置共享会话缓存大小
        ssl_session_timeout  10m; # 配置会话超时时间
    
        location / {
            proxy_pass   http://192.168.3.101:8080; # 设置代理服务访问地址
            proxy_set_header  Host $http_host; # 设置客户端真实的域名(包括端口号)
            proxy_set_header  X-Real-IP  $remote_addr; # 设置客户端真实IP
            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for; # 设置在多层代理时会包含真实客户端及中间每个代理服务器的IP
            proxy_set_header X-Forwarded-Proto $scheme; # 设置客户端真实的协议(http还是https)
            index  index.html index.htm;
        }
    
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
  • 通过HTTPS访问api.macrozheng.com这个域名,访问地址为:https://api.xx.com/sw...
  • 任意调用一个接口测试下,比如说登录接口,可以发现已经可以通过HTTPS正常访问SpringBoot应用提供的接口。

 

使用受信任的证书

之前我们使用的是自签名的SSL证书,对于浏览器来说是无效的。使用权威机构颁发的SSL证书浏览器才会认为是有效的,这里给大家推荐两种申请免费SSL证书的方法,一种是从阿里云申请,另一种是从FreeSSL申请。

阿里云证书

  • 阿里云上可以申请的免费证书目前只有支持单个域名的DV级SSL证书。比如说你有blog.macrozheng.comapi.macrozheng.com两个二级域名需要使用HTTPS,就需要申请两个SSL证书。
  • 申请成功后点击下载Nginx证书即可;
  • 下载完成后解压会有下面两个文件;
    blog.macrozheng.com.key # 证书私钥文件
    blog.macrozheng.com.pem # 证书文件
  • 拷贝证书文件到Nginx的指定目录下,然后修改配置文件blog.conf,只要修改证书配置路径即可,修改完成后重启Nginx;
    #SSL配置
    ssl_certificate      /usr/share/nginx/html/ssl/blog/blog.macrozheng.com.pem; # 配置证书
    ssl_certificate_key  /usr/share/nginx/html/ssl/blog/blog.macrozheng.com.key; # 配置证书私钥
  • 再次通过HTTPS访问blog.macrozheng.com这个域名,发现证书已经有效了,连接也是安全的了。

FreeSSL证书

  • 如果你有使用通配符域名的需求,可以上FreeSSL申请SSL证书,不过免费的有效期只有3个月,这就意味着你过3个月就要重新申请一次了。附上官网地址:https://freessl.cn/

 

使用acme.sh自动申请证书

  • acme.sh脚本实现了acme协议, 可以从letsencrypt生成免费的证书。一般我们申请的证书有效期都是1年,过期就要重新申请了,使用acme.sh脚本可以实现到期自动申请,再也不用担心证书过期了!
  • https://github.com/acmesh-official/acme.sh   官网地址

 

 

 

 

 

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

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

相关文章

GEE-PIE遥感大数据处理技术

随着航空、航天、近地空间等多个遥感平台的不断发展,近年来遥感技术突飞猛进。由此,遥感数据的空间、时间、光谱分辨率不断提高,数据量也大幅增长,使其越来越具有大数据特征。对于相关研究而言,遥感大数据的出现为其提…

机器学习深度学习——针对序列级和词元级应用微调BERT

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——NLP实战(自然语言推断——注意力机制实现) 📚订阅专栏:机…

独立站怎么搭建?看这一篇就够了!强烈建议收藏!

独立站是跨境卖家对外销售的一个重要渠道,也是品牌塑造和品牌宣传的重要阵地。那么新手如何从0到1搭建出一个属于自己的独立站呢? 01.购买域名: 域名就相当于是一个网站的门牌号,是独立站的重要组成部分。卖家可以选择自己注册&…

C语言:指针(超深度讲解)

目录 指针: 学习目标: 指针可以理解为: 字符指针: 定义:字符指针 char*。 字符指针的使用: 练习: 指针数组: 概念:指针数组是一个存放指针的数组。 实现模拟二维…

【0基础入门Python Web笔记】四、python 之计算器的进阶之路

四、python 之计算器的进阶之路 往期导航越来越智能的加法计算器加减乘除计算器来点课程作业?更多实战项目可进入下方官网 往期导航 一、python 之基础语法、基础数据类型、复合数据类型及基本操作 二、python 之逻辑运算和制流程语句 三、python 之函数以及常用内…

服务器中了Cylance勒索病毒,数据该怎么恢复?

近日,在市面上出现了一种名为Cylance的勒索病毒。经过云天数据恢复中心技术工程师对比分析后发现,该病毒不属于已知的任何勒索病毒家族中的成员,属于一种新型的勒索病毒,那接下来我们分析一下这种勒索病毒。 中了Cylance勒索病毒的…

AVL树Java实现

文章目录 AVL树(平衡二插搜索树)1.概念二插搜索树AVL树的基本概念 2.AVL数的实现定义AVL树AVL树的插入AVL树的旋转右单旋左单旋左右双旋右左双旋 删除元素 3. 验证AVL树4.AVL树性能分析 AVL树(平衡二插搜索树) 1.概念 二插搜索树 要想了解AVL树,就得先知道二插搜…

HIDS-wazuh 的配置和防御

目录 安装wazuh 常用内容 检测sql注入 主动响应 安装wazuh 本地测试的话建议用ova文件,直接导入虚拟机就能用了 官网:Virtual Machine (OVA) - Installation alternatives 常用内容 目录位置:/etc/ossec 配置文件&…

装箱和拆箱

1. 概念 装箱 将值类型转换成等价的引用类型 装箱的步骤 拆箱 将一个已装箱的引用类型转换为值类型,拆箱操作需要声明拆箱后转换的类型 拆箱的步骤 1)获取已装箱的对象的地址 2)将值从堆上的对象中复制到堆栈上的值变量中 2. 总结 装箱和拆箱…

表现层消息一致性处理

设计表现层返回结果的模型类, 用于后端与前端进行数据格式统一,也称为前后端数据协议 Data public class R {private Boolean flag;private Object data;private String msg;public R(){}public R(Boolean flag){this.flag flag;}public R(Boolean fla…

如何使用NLP库解析Python中的文本

Python是一种强大的面向对象的编程(object-oriented programming,OOP)语言,在人工智能领域有着广泛的用途。正是鉴于其实用性,以Google为首的大型科技公司,已经对其开发了Tensorflow等代码库,帮…

相交链表00

题目链接 相交链表 题目描述 注意点 保证 整个链式结构中不存在环函数返回结果后,链表必须 保持其原始结构如果 listA 和 listB 没有交点,intersectVal 为 0 解答思路 两个链表从头开始遍历,如果其是在同一个位置处相交,则在…

(AcWing)没有上司的舞会

Ural 大学有 NN 名职员,编号为 1∼N。 他们的关系就像一棵以校长为根的树,父节点就是子节点的直接上司。 每个职员有一个快乐指数,用整数 Hi 给出,其中 1≤i≤N。 现在要召开一场周年庆宴会,不过,没有职…

智能问答FAQ的原始问答数据怎么整理?

整理智能问答FAQ的原始数据是构建一个智能问答系统的重要步骤之一。 如何整理原始问答数据以及如何将其转化为智能问答系统 1. 收集原始数据 收集原始数据是整理智能问答FAQ的第一步。可以从以下途径收集原始数据: 网络搜索:通过搜索引擎、论坛、社交…

小白到运维工程师自学之路 第七十九集 (基于Jenkins自动打包并部署Tomcat环境)2

紧接上文 4、新建Maven项目 clean package -Dmaven.test.skiptrue 用于构建项目并跳过执行测试 拉到最后选择构建后操作 SSH server webExec command scp 192.168.77.18:/root/.jenkins/workspace/probe/psi-probe-web/target/probe.war /usr/local/tomcat/webapps/ /usr/loca…

伦敦银和伦敦金的区别

伦敦银河伦敦金并称贵金属交易市场的双璧,一般投资贵金属的投资者其实不是交易伦敦金就是交易伦敦银。相信经过一段时间的学习和投资,不少投资者都能分辨二者的区别。下面我们就来谈谈伦敦银和伦敦金有什么异同,他们在投资上是否有差别。 交易…

股票预测和使用LSTM(长期-短期-记忆)的预测

一、说明 准确预测股市走势长期以来一直是投资者和交易员难以实现的目标。虽然多年来出现了无数的策略和模型,但有一种方法最近因其能够捕获历史数据中的复杂模式和依赖关系而获得了显着的关注:长短期记忆(LSTM)。利用深度学习的力…

Android初学之android studio运行java/kotlin程序

第一步骤:File—>New—>New Module,然后弹出一个框,(左边)选择Java or Kotlin Library,(右边)编辑自己的图书馆名、包名、类名,选择Java一个语言,然后F…

分享漂亮electerm主题

Electerm 字体建议设置为:Consolas 和 Microsoft YaHei UI 主题配置如下: themeNameNice main-dark#171717 main-light#2E3338 text#ddd text-light#fff text-dark#888 text-disabled#777 primary#CACACA info#FFD166 success#06D6A0 error#EF476F wa…

Unity shader 入门之渲染管线一、总览

如下示意图 应用阶段(ApplicationStage):准备场景信息(视景体,摄像机参数)、粗粒度剔除、定义每个模型的渲染命令(材质,shader)——由开发者定义,不做讨论。几何阶段(GemetryStage)&…