在许久以前, 第一次接触云服务器时, 自己费时间捣鼓了个网页, 发现能http协议访问, 就想搞个ssl认证的网页, 加之后续使用微信小程序的时候, 小程序调用的api都必须是https协议的api, 那会不懂可以通过这种方式认证, 就依靠云服务厂商提供的ssl证书, 如果过期没续费, 那应用就大面积宕机
在当今数字化时代,隐私和数据安全成为了重要的关注点。对于网站和在线服务提供商来说,确保用户数据的机密性和完整性至关重要。SSL(Secure Sockets Layer)认证是一种通过加密通信来保护数据传输安全的标准协议。SSL认证不仅可以确保用户的敏感信息在传输过程中不被窃取或篡改,还可以增加用户对网站的信任度。
SSL认证采用了公钥加密技术,通过在服务器和客户端之间建立安全的加密连接,确保数据的机密性。它还提供了数字证书,用于验证服务器的身份和真实性。通过SSL认证,网站可以实现以下重要功能:
Certbot是一个由Electronic Frontier Foundation(EFF)开发的自动化证书颁发工具。它可以帮助网站管理员轻松获取和管理SSL证书。Certbot支持多种服务器软件,包括Nginx。
Nginx是一个流行的开源反向代理服务器软件,同时也是一个高性能的Web服务器。它具有轻量级、可扩展和高度可配置的特点,被广泛用于托管网站和提供HTTP服务。Nginx和Certbot的结合使用可以方便地实现SSL认证,并为网站提供安全的HTTPS连接。
本文的目的是向读者介绍如何使用Certbot和Nginx来实现SSL认证,并在Nginx服务器上配置HTTPS。我们的目标是帮助读者了解SSL认证的重要性,掌握Certbot和Nginx的基本概念和功能,并指导读者逐步完成安装、配置和测试过程。通过本文,读者将能够为他们的网站提供安全的SSL连接,保护用户数据的安全性和隐私。
ubuntu 22.04
nginx/1.18.0 (Ubuntu)
apt-get install nginx
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/
**
/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;
}
/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;
}
在你域名的服务商配置A类域名解析, 将mall.和management. 代理到机器ip
分别访问http://mall. 和http://management.查看验证
/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;
}
/etc/letsencrypt/live/
**management.的子域名一样配置,并且reload nginxserver {
listen 80;
server_name mall.example.com;
return 302 https://$server_name$request_uri;
location /.well-known/acme-challenge {
proxy_pass http://localhost:32001;
}
}
## 颁发证书 A类域名解析, webroot可以用nginx配置一个公共目录,转发配置就行, cname也可以这么配
certbot certonly --webroot -w /mnt/project/ssl_directory/ -d mall.example.com
看到这个结果就说明成功了

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;
}
}
访问成功!