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

2023-10-27

随着我们网站用户的增多,我们会逐渐意识到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   官网地址

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

网站和API支持HTTPS,最好在Nginx上配置 的相关文章

随机推荐

  • java swing的EventQueue解析

    java swing是一个单线程的GUI框架 且线程不安全的 swing要求所有对于控件的操作 比如创建控件和设置属性 只能在它的事件分发线程中进行 否则就会出现线程安全问题 这个事件分发线程就是AWT EventQueue线程 swing
  • crc16校验代码中 多项式码明明是8005 为什么要用A001来异或,还有CRC16-REV=A001是什么意思

    0x8005 1000 0000 0000 0101B 0xA001 1010 0000 0000 0001B 对比两个二进制高低bai位正好是完du全相反的 CRC校验分为zhi正向校验与反向校验 正dao向校验高位在左 反向校验低位在左
  • 两种时间选择器的三种使用场景(带效果图)

    前言 顺便看一下效果图 在Android 开发中时间选择器的使用场景还是很多的 我这边也是常用的有两种方法 根据不同是使用需求和场景来使用 大家如果在开发中有这种需求的可以看一下本篇 一 DatePickerDialog日期选择器 这个我看
  • 【STM32学习笔记】软件使用---win10下 keil5打开keil4工程的问题

    环境 操作系统 win10 keil版本 keil MDK5 24a 问题 1 keil5打开keil4 工程卡死 2 keil5 编译图标变为保存 解决 1 keil5打开keil4卡死 安装 MDK V4 Legacy Support
  • AndroidManifest.xml中一些常用的属性

    一 关于AndroidManifest xml AndroidManifest xml 是每个android程序中必须的文件 它位于整个项目的根目录 描述了package中暴露的组件 activities services 等等 他们各自的
  • 十行 Python 代码实现酷炫功能

    一 生成二维码 二维码又称二维条码 常见的二维码为QR Code QR全称Quick Response 是一个近几年来移动设备上超流行的一种编码方式 而生成一个二维码也非常简单 在Python中我们可以通过MyQR模块了生成二维码 而生成一
  • 【JAVA】JSP中通过Get和Post方式传递页面参数(三种方式)。

    一 通过FORM 表单 Get request getParameter方式实现页面传参 1 Login jsp 登录页
  • 基于elementUI和vue做的简单界面

    今天学习了elementUI和vue 做了一个简单的学生列表界面
  • 判断点是否在对角线两点构成的矩形中

    已知一个矩形的对角线的两个点坐标分别为 A 0 123456789 0 523456789 B 0 423456789 0 323456789 判断C 0 223456789 0 423456789 点是否在A和B构成的矩形中 一 Java
  • 可编程渲染管线与着色器语言

    可编程渲染管线与着色器语言 Programming pipeline shading language Sampler Direct3D 9 asm ps A sampler is a input pseudo register for a
  • JavaWeb基础1——MySQL

    导航 黑马Java笔记 踩坑汇总 JavaSE JavaWeb SSM SpringBoot 瑞吉外卖 SpringCloud SpringCloudAlibaba 黑马旅游 谷粒商城 目录 一 概念 二 下载安装配置卸载 三 关系型数据库
  • php svg写入文字转png,php如何实现svg转化png

    php实现svg转化png的方法 首先通过 drawInlineSVG 方法将svg转为canvas 然后使用 base64 image content 方法将canvas转为png即可 推荐 PHP视频教程 svg转png实现 1 php
  • 2021年3月最新的山东大学网络认证的网址

    http 202 194 15 87 srun portal pc ac id 9 srun wait 1 theme basic
  • 共创开发闭环,轻流CEO薄智元:让无代码回归本质

    以无代码的开发形式为基础 以业务人员为用户定位 奔向 无代码 的路径为企业提供个性化解决方案和产品 使开展业务各个环节的负责人深入地参与到系统开发中去 形成圆桌闭环 这是轻流的答案 作者 斗斗 出品 产业家 数字化需求迫切 人员成本高 研发
  • Faster Rcnn 代码解读之 blob.py

    Fast R CNN Copyright c 2015 Microsoft Licensed under The MIT License see LICENSE for details Written by Ross Girshick Bl
  • Java Comparator的使用-构建自己的Comparator(Lambda)

    引文 在开发的过程中 通常会对一些List进行排序 如果仅仅对某一个数字型的字段进行排序 排序的种类有很多 无论是使用Java 8 新特性的Stream排序 或者是使用Array sort方法都可以 但有时候我们需要对字符串类型 并且可能会
  • 深度学习训练模型的硬件条件(点评)

    比较系统性的文章 包括本地硬件搭建 云端训练环境介绍 原文地址 https blog csdn net u010327061 article details 80775135 之前热衷于学习理论知识 目前想跑代码了发现不知道从何下手 自己电
  • node网页爬虫

    前言 以前听后端的同事说 用网页爬虫可以抓取到许多电影下载资源 当时就跃跃欲试 想学习一下 无奈当时太懒 也经受不住生活中各种能获得即时快乐感事情的诱惑 时间都没有用到正经事情上 把这件事情耽搁了好几年 前段时间在掘金看到一篇有关爬虫的文章
  • 【pip command】之 pip install

    目录 前言 1 用法 2 安装位置 3 安装步骤 4 参数处理顺序 5 运行时依赖项的安装顺序 5 1 示例记录 安装 pywifi 后提示 No module named comtypes 6 Requirements File Form
  • 网站和API支持HTTPS,最好在Nginx上配置

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