当前位置: 首页 > news >正文

Nginx配置之https

文章目录

    • https配置
      • openssl实现私有CA签发证书
      • 免费SSL证书申请教程(推荐)
      • 部署ssl证书实现https

https配置

生成私钥,生成证书签署请求并获得证书,然后在nginx.conf中配置

示例

server {
  listen       443 ssl;
  server_name  www.idfsoft.com;
  ssl_certificate      /etc/nginx/ssl/nginx.crt;
  ssl_certificate_key  /etc/nginx/ssl/nginx.key;
  ssl_session_cache    shared:SSL:1m;
  ssl_session_timeout  5m;
  ssl_ciphers  HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers  on;
  location / {
    root   html;
    index  index.html index.htm;
  }
}

获取证书有方式有两种,其一是openssl实现私有CA签发证书,其二是免费SSL证书申请。在个人实验环境中二者选其一即可,但在企业的生产环境中必须要购买证书进行部署。

openssl实现私有CA签发证书

#创建私有CA存放位置
[root@localhost ~]# mkdir -p /etc/pki/CA
[root@localhost ~]# cd /etc/pki/CA
[root@localhost CA]# mkdir private
#服务端生成密钥
[root@localhost CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048)
Generating RSA private key, 2048 bit long modulus (2 primes)
....+++++
.........................+++++
e is 65537 (0x010001)
#提取公钥
[root@localhost CA]# openssl rsa -in private/cakey.pem -pubout
writing RSA key
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1R3BrFLzEFub1t8k2CPd
EZcUoXvmSJVGNf99LgISs+zzY7Jl0s97bcNLaB91h/riPNHq9Z/hyeqfTbSVNKeO
s4Z6RuM7m/Bpm1cSt53FOgrz41GBs/DT9V0CzJABCiWjJziQOIn93JElTNOttDKD
AOMwo88u+b1kG/GcSfkLpNn871X/5YKp1YRXMmE8TLfvpp6hXmvojai2MpxIGCcJ
DC/oDtKOKtsPGUAW6xB7ZpIcQsw+n3JMhiCgKsYeGZ1ZKHM9LFTB7s02Xe0pQwhZ
fzQ3N1nR9fpC6eiU3DkV1h4V+2mUD36Omgqz9H3+DrPn+xAfGSVBtxrmBFvxJMAV
+wIDAQAB
-----END PUBLIC KEY-----
#生成自签署证书,请记住这里填写的信息,后面生成的证书签署请求文件填写的信息要与这里完全一致
[root@localhost CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:HB
Locality Name (eg, city) [Default City]:WH
Organization Name (eg, company) [Default Company Ltd]:www.yf.com
Organizational Unit Name (eg, section) []:www.yf.com
Common Name (eg, your name or your server's hostname) []:www.yf.com
Email Address []:1@2.com
[root@localhost CA]# ls
cacert.pem  private
[root@localhost CA]# mkdir certs newcerts crl
[root@localhost CA]# touch index.txt && echo 01 > serial
[root@localhost CA]# ls
cacert.pem  certs  crl  index.txt  newcerts  private  serial
[root@localhost CA]# cd /usr/local/nginx/conf/
[root@localhost conf]# mkdir ssl
[root@localhost conf]# cd ssl/
#客户端生成密钥
[root@localhost ssl]# (umask 077;openssl genrsa -out nginx.key 2048)
Generating RSA private key, 2048 bit long modulus (2 primes)
.....+++++
..............................+++++
e is 65537 (0x010001)
#客户端生成证书签署请求文件,这里填写的信息要与前面的完全一致,不然无法签署成功
[root@localhost ssl]# openssl req -new -key nginx.key -days 365 -out nginx.csr
Ignoring -days; not generating a certificate
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:HB
Locality Name (eg, city) [Default City]:WH
Organization Name (eg, company) [Default Company Ltd]:www.yf.com
Organizational Unit Name (eg, section) []:www.yf.com
Common Name (eg, your name or your server's hostname) []:www.yf.com
Email Address []:1@2.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@localhost ssl]# ls
nginx.csr  nginx.key
#CA签署客户端的证书
[root@localhost ssl]# openssl ca -in nginx.csr -out nginx.crt -days 365
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Oct 13 12:38:41 2022 GMT
            Not After : Oct 13 12:38:41 2023 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = HB
            organizationName          = www.yf.com
            organizationalUnitName    = www.yf.com
            commonName                = www.yf.com
            emailAddress              = 1@2.com
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                04:7E:A7:7C:55:34:E8:B8:52:D0:C5:CE:FA:C4:14:E2:A5:96:08:A2
            X509v3 Authority Key Identifier:
                keyid:76:81:2D:69:5B:17:F6:52:4C:C4:91:7C:BC:FD:90:21:01:C0:49:F7

Certificate is to be certified until Oct 13 12:38:41 2023 GMT (365 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
[root@localhost ssl]# ls
nginx.crt  nginx.csr  nginx.key
#csr是证书签署请求文件,已完成了它的使命,后续不再用到
[root@localhost ssl]# rm -f nginx.csr
[root@localhost ssl]# ls
nginx.crt  nginx.key
#后续如何部署ssl证书请往后看,点击文章目录跳转到【部署ssl证书实现https】

免费SSL证书申请教程(推荐)

阿里云免费SSL证书介绍:

​ 免费证书只能保护一个域名(带www和不带www可以通用),阿里云个人账号和企业账号均可申请,多个域名可以申请多个免费证书,免费为每个通过实名验证的阿里云账号提供20张DigiCert DV单域名证书。申请教程如下:

一、证书选购

  1. 打开阿里云SSL证书申请页面,点击“选购证书”
  2. 证书选择
    选择证书类型:免费版(个人)DV

选择品牌:DigiCert
域名类型:单域名(1个域名)
选择域名个数:只能选择1
购买数量:可以购买多个
购买时长:最多购买一年

总配置费用为0元,点击“立即购买”,结算即可。

二、证书申请

购买完的SSL证书是未签发状态,还要提交证书申请,阿里云系统会将请求发送给CA机构审核。

  1. 登录到阿里云SSL控制台
  2. 在刚购买未签发的免费版SSL,选择“证书申请”
    如下图:

image-20221013190049448

  1. 填写SSL证书申请表单

证书绑定域名:免费证书只能填写一个域名,带www和不带www域名可以通用
申请人姓名:按照实际填写
申请人手机号:按照实际填写
申请人邮箱:按照实际填写
所在地:按照实际填写
域名验证方式:参考(阿里云SSL证书申请域名验证选择及操作流程)
CSR生成方式:系统生成

image-20221013190201517

  1. 完成DNS验证

如果你的域名在阿里云,直接点图片里的链接跳转。如不是则自行打开自己的域名控制台

image-20221013190442203

image-20221013190632907

把证书申请的DNS验证信息复制过来

image-20221013190931160

添加后看到此项的状态是【正常】的即可

image-20221013191055990

完成上述操作后,回到证书申请界面,点击【验证】,验证成功后点击【提交申请】

image-20221013191813237

  1. 下载证书

看到证书的状态是【已签发】,则证明该证书可以实际使用了,点击【下载】

image-20221013192253836

证书下载界面可以看到有这么多类型,这里我选择nginx,因为我要部署到nginx服务器上,根据服务类型选择相对应的

image-20221013192406599

下载到本地后上传至nginx服务器

image-20221013192544265

部署ssl证书实现https

[root@localhost conf]# pwd
/usr/local/nginx/conf
[root@localhost conf]# mkdir ssl

将本地的证书文件上传至nginx服务器

image-20221013193611256

[root@localhost conf]# cd ssl/
[root@localhost ssl]# ls
8617472_www.helloyf.fun.key  8617472_www.helloyf.fun.pem
#我这里改名是为了方便记忆。pem证书可以更名为crt证书
[root@localhost ssl]# mv 8617472_www.helloyf.fun.key nginx.key
[root@localhost ssl]# mv 8617472_www.helloyf.fun.pem nginx.crt
[root@localhost ssl]# ls
nginx.crt  nginx.key

#进行配置https,直接在原有配置中取消这大一段的注释
[root@localhost conf]# vim nginx.conf
    #HTTPS server

    server {
        listen       443 ssl;
        server_name  www.helloyf.fun;		#将此修改为自己的域名

        ssl_certificate      ssl/nginx.crt;		#【pem|crt】证书存放的位置
        ssl_certificate_key  ssl/nginx.key;		#key证书存放的位置

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

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

        location / {
            root   html;
            index  index.html index.htm;
        }
    }
[root@localhost conf]# systemctl restart nginx.service

去浏览器访问

image-20221013194813507

image-20221013194912611

此时也可以用域名进行访问,不过我的域名已经用公网IP部署了网站。所以先要在本机的hosts文件写本地域名映射,这样就不会访问我公网的站点了。这里涉及到DNS解析的工作流程,感兴趣可以去查查。

Windows系统中该文件的默认路径:C:\Windows\System32\drivers\etc\hosts

在该文件的最后一行添加IP和域名,保存即可。我这个域名要用于访问博客,所以做完实验后会恢复,恢复的话直接把这一行映射删掉。

image-20221013195531390

这次用域名访问。可以看到访问成功了,并且显示连接是安全的!

image-20221013195650518

相关文章:

  • 使用J-link OB工具需要注意的问题
  • Qt5开发从入门到精通——第十篇四节(Qt5 网络与通信—— 网页浏览器与文件下载)
  • Kubernetes 原理剖析与实战08 配置管理:Kubernete 管理业务配置方式有哪些?
  • 调用百度云语音转文本
  • 微信版大语言模型来了:跨时空对话李白、教你高情商说话,API在线试玩全都有...
  • Mybatis架构,SqlSessionFactory源码分析
  • Java数据结构与算法 二
  • Sentinel整合OpenFeign对远程调用限流并降级
  • Typescript助力项目开发:JS切换TS、TS类型定制与思考
  • ViveInputUtility-手柄射线与3D物体交互(5)
  • 为了不手动命名驼峰变量名,我开发了一套油猴脚本...
  • python 使用 `pyinstaller` 打包模块命令打包出来的exe文件太大了怎么办?
  • 【概念】权限管理模型(RBAC、ABAC、ACL)
  • win11toast:python桌面通知工具
  • 超链接的其他用法,复合选择器
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • JavaScript函数式编程(一)
  • JavaScript新鲜事·第5期
  • Linux链接文件
  • mysql常用命令汇总
  • opencv python Meanshift 和 Camshift
  • rc-form之最单纯情况
  • Sublime text 3 3103 注册码
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 写给高年级小学生看的《Bash 指南》
  • 用mpvue开发微信小程序
  • 积累各种好的链接
  • # 飞书APP集成平台-数字化落地
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (4)事件处理——(7)简单事件(Simple events)
  • (done) 两个矩阵 “相似” 是什么意思?
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (十)c52学习之旅-定时器实验
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .L0CK3D来袭:如何保护您的数据免受致命攻击
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET DataGridView数据绑定说明
  • .net framework 4.0中如何 输出 form 的name属性。
  • .net程序集学习心得
  • .NET连接数据库方式
  • .net专家(张羿专栏)
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • @SentinelResource详解
  • @vue/cli脚手架
  • @软考考生,这份软考高分攻略你须知道
  • [ 数据结构 - C++]红黑树RBTree
  • [2019.2.28]BZOJ4033 [HAOI2015]树上染色
  • [AutoSar]BSW_Memory_Stack_003 NVM与APP的显式和隐式同步
  • [BJDCTF2020]The mystery of ip1