基于certbot的nginx ssl认证

前言

在许久以前, 第一次接触云服务器时, 自己费时间捣鼓了个网页, 发现能http协议访问, 就想搞个ssl认证的网页, 加之后续使用微信小程序的时候, 小程序调用的api都必须是https协议的api, 那会不懂可以通过这种方式认证, 就依靠云服务厂商提供的ssl证书, 如果过期没续费, 那应用就大面积宕机

SSL认证和加密的重要性

在当今数字化时代,隐私和数据安全成为了重要的关注点。对于网站和在线服务提供商来说,确保用户数据的机密性和完整性至关重要。SSL(Secure Sockets Layer)认证是一种通过加密通信来保护数据传输安全的标准协议。SSL认证不仅可以确保用户的敏感信息在传输过程中不被窃取或篡改,还可以增加用户对网站的信任度。

SSL认证采用了公钥加密技术,通过在服务器和客户端之间建立安全的加密连接,确保数据的机密性。它还提供了数字证书,用于验证服务器的身份和真实性。通过SSL认证,网站可以实现以下重要功能:

  1. 数据加密:SSL认证使用加密算法对传输的数据进行加密,使得在传输过程中,即使被拦截,攻击者也无法解读敏感信息。
  2. 身份验证:SSL证书用于验证服务器的身份,并确保用户与合法的服务器进行通信,防止中间人攻击或欺诈行为。
  3. 增加用户信任:当用户访问一个使用SSL认证的网站时,他们会看到浏览器地址栏中的“锁”图标和网站的HTTPS前缀,这些标志向用户传达了网站的安全性,增加了用户对网站的信任度。

Certbot和Nginx的概述

Certbot是一个由Electronic Frontier Foundation(EFF)开发的自动化证书颁发工具。它可以帮助网站管理员轻松获取和管理SSL证书。Certbot支持多种服务器软件,包括Nginx。

Nginx是一个流行的开源反向代理服务器软件,同时也是一个高性能的Web服务器。它具有轻量级、可扩展和高度可配置的特点,被广泛用于托管网站和提供HTTP服务。Nginx和Certbot的结合使用可以方便地实现SSL认证,并为网站提供安全的HTTPS连接。

目的和目标

本文的目的是向读者介绍如何使用Certbot和Nginx来实现SSL认证,并在Nginx服务器上配置HTTPS。我们的目标是帮助读者了解SSL认证的重要性,掌握Certbot和Nginx的基本概念和功能,并指导读者逐步完成安装、配置和测试过程。通过本文,读者将能够为他们的网站提供安全的SSL连接,保护用户数据的安全性和隐私。

安装

System:

ubuntu 22.04

Nginx:

nginx/1.18.0 (Ubuntu)

apt-get install nginx
Certbot:

2.7.4

sudo snap install core

sudo snap refresh core

sudo snap install --classic certbot

sudo ln -s /snap/bin/certbot /usr/bin/certbot

备注:certbot 生成的证书秘钥默认都在**#/etc/letsencrypt/live/**

配置

1、配置nginx, 并重启nginx, nginx默认配置地址 /etc/nginx/nginx.conf
  • 将子域名mall. 代理到19201, 其中/mnt/mall内需要至少包含一个index.html做验证
server {
    listen 80;
    server_name mall.example.com;
    location / {
        proxy_pass http://localhost:19201;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
server {
        listen       19201;
        listen       [::]:19201;
        server_name  _;
        root         /mnt/mall;
        }
  • 将子域名management. 代理到19202, 其中/mnt/management内需要至少包含一个index.html做验证
server {
    listen 80;
    server_name management.example.com;
    location / {
        proxy_pass http://localhost:19202;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
server {
        listen       19202;
        listen       [::]:19202;
        server_name  _;
        root         /mnt/management;
        }
2、配置dns解析, 访问验证

在你域名的服务商配置A类域名解析, 将mall.和management. 代理到机器ip

分别访问http://mall. 和http://management.查看验证

基于certbot的nginx ssl认证_第1张图片

3、配置certbot 颁发证书
  • 在nginx.conf内配置认证目录, 并代理转发到指定ssl验证目录/mnt/project/ssl_directory/, 并且随便指定一个端口, 代理到此地址,并且reload nginx /sbin/nginx -s relaod
server {
    listen       32001;
    listen       [::]:32001;
    server_name _;
    root /mnt/project/ssl_directory;
    include /etc/nginx/default.d/*.conf;
    }
  • 配置443端口的ssl端口, certbot默认秘钥地址: **/etc/letsencrypt/live/**management.的子域名一样配置,并且reload nginx
server {
    listen 80;
    server_name mall.example.com;
    return 302 https://$server_name$request_uri;
    location /.well-known/acme-challenge {
        proxy_pass http://localhost:32001;
    }
}

  • 使用certonly 指令, 指定认证文件生成的目录 management.的子域名一样配置
## 颁发证书 A类域名解析, webroot可以用nginx配置一个公共目录,转发配置就行, cname也可以这么配
certbot certonly --webroot -w /mnt/project/ssl_directory/ -d mall.example.com 


看到这个结果就说明成功了

![](https://secure2.wostatic.cn/static/3btxq3Y7iAu9rAgcAUinjw/image.png?auth_key=1701148548-nnUBe3xzNDxmpUxE3eB8fZ-0-61c971472ea8bd9d1e5590259779f055)
  • 配置ssl认证信息, 并且将80端口默认302到https端口, management.的子域名一样配置, 并reload nginx
server {
    listen 80;
    server_name mall.example.com;
    return 302 https://$server_name$request_uri;
    location /.well-known/acme-challenge {
        proxy_pass http://localhost:32001;
    }
}
server {
    listen 443 ssl;
    server_name mall.example.com;
    ssl_certificate /etc/letsencrypt/live/mall.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mall.example.com/privkey.pem;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
    ssl_session_cache builtin:1000 shared:SSL:10m;
    location / {
        proxy_pass http://localhost:19201;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

验证

访问http://mall. 和http://management. 分别会默认跳转到https的域名上

基于certbot的nginx ssl认证_第2张图片

访问成功

你可能感兴趣的:(nginx,ssl,运维)