问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Nginx上安装SSL证书并启用HTTPS访问

创作时间:
作者:
@小白创作中心

Nginx上安装SSL证书并启用HTTPS访问

引用
CSDN
1.
https://blog.csdn.net/m0_58648890/article/details/143808051

本文将详细介绍如何在Nginx上为你的域名安装SSL证书,并配置Nginx使用HTTPS安全访问。我们将使用Let's Encrypt免费的SSL证书,通过Certbot生成并管理证书,然后配置Nginx实现HTTPS加密访问。同时,我们将解决因SSL证书导致的代码拉取问题。

一、前置准备

  • 服务器:一台运行Nginx的服务器(如阿里云、AWS、DigitalOcean等云服务器)。
  • 域名:一个已指向服务器公网IP的域名(例如gitea.example.com)。
  • 服务器访问权限:确保你有服务器的root权限或sudo用户权限。

二、安装Certbot和生成SSL证书

Certbot是Let's Encrypt提供的一个工具,用于自动生成和管理SSL证书。

1. 安装Certbot

在基于Debian/Ubuntu的系统上,可以使用以下命令安装Certbot和Nginx插件:

sudo apt update
sudo apt install certbot python3-certbot-nginx -y

如果在安装certbot-nginx插件以前已经安装过nginx,那么会出现下面的界面:

选项解释:

  • Y 或 I:使用软件包维护者提供的新版本配置文件(可能会覆盖你的自定义配置)。
  • N 或 O:保留当前已安装的版本(推荐,如果你之前有自定义配置)。
  • D:显示新旧版本配置的区别。
  • Z:启动一个shell,让你手动检查文件情况。

2. 使用Certbot生成SSL证书

2.1 安装证书

Certbot可以自动为你的域名生成和安装SSL证书。运行以下命令:

sudo certbot --nginx -d gitea.example.com
  • --nginx:告诉Certbot自动配置Nginx。
  • -d:指定需要申请证书的域名。

Certbot会提示输入邮箱地址会提示Let's Encrypt让你同意服务条款(Terms of Service)才能继续申请SSL证书。之后,它将自动生成SSL证书并更新Nginx配置以启用HTTPS。

后面会询问是否愿意共享你的邮箱地址给Electronic Frontier Foundation (EFF)。如果同意,那么接收EFF的邮件通知,关于加密、网络自由、EFF活动等内容。

2.2 安装失败处理

如果安装过程中80端口被占用会安装失败:

可以通过sudo lsof -i :80z或sudo netstat -tulnp | grep :80是哪一个应用占用了80端口:

先停止服务,然后重新安装证书:

2.2 证书申请和部署情况:

如果安装成功以后,会打印部署情况到终端,下面是打印的信息:

  • 成功获取SSL证书:Successfully received certificate.
  • 公钥证书路径:/etc/letsencrypt/live/域名/fullchain.pem
  • 私钥:/etc/letsencrypt/live/域名/privkey.pem
  • 证书有效期:2025-06-13
  • 证书已自动部署到Nginx:Successfully deployed certificate for 域名 to /etc/nginx/sites-enabled/default
  • 自动续期已配置:Certbot has set up a scheduled task to automatically renew this certificate in the background.

3. 验证证书安装

Certbot完成后,你可以运行以下命令检查证书:

sudo certbot certificates

这将显示已安装证书的信息。确保域名和证书路径正确无误。

三、配置Nginx以启用HTTPS

Certbot在生成证书时会自动修改Nginx配置,但你可以手动优化和调整配置以满足安全性和性能的需求。以下是一个标准的HTTPS配置示例。

1. Nginx配置文件

假设你的网站配置文件在/etc/nginx/sites-available/gitea中。打开该文件进行编辑:

# HTTPS部分 - 配置反向代理到服务
server {
    listen 443 ssl http2;  # 启用HTTP/2支持
    server_name gitea.example.com;
    # SSL配置 - Certbot自动生成的配置
    ssl_certificate /etc/letsencrypt/live/gitea.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/gitea.example.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;  # Certbot的自动配置文件
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
    # HSTS(HTTP Strict Transport Security)配置
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    # 反向代理设置(代理到本地服务或其他端口)
    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        # 超时设置
        proxy_connect_timeout 60s;
        proxy_read_timeout 60s;
        proxy_send_timeout 60s;
    }
}
# HTTP重定向到HTTPS
server {
    listen 80;
    server_name gitea.example.com;
    location / {
        return 301 https://$host$request_uri;
    }
}

2. 配置说明

  • HTTP重定向:80端口的HTTP请求将被自动重定向到HTTPS。
  • SSL证书路径:ssl_certificate和ssl_certificate_key路径指向Certbot生成的证书。
  • HSTS配置:add_header Strict-Transport-Security可以强制客户端在未来仅通过HTTPS访问,防止降级攻击。

3. 检查和重启Nginx

创建软链接以启用该配置:

sudo ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/

检查Nginx配置是否正确:

sudo nginx -t

如果一切正常,重新加载Nginx配置:

sudo systemctl reload nginx

四、拉取代码时的SSL证书问题及解决方案

在启用了HTTPS后,Git客户端可能会因SSL证书问题而无法克隆或拉取代码。以下是几种解决方案:

1. 使用Let's Encrypt或其他受信任的证书

如果你还没有使用受信任的SSL证书,可以通过Let's Encrypt获取免费证书,这样Git客户端将自动信任该证书。

2. 手动信任自签名证书(不推荐生产环境使用)

在Windows系统中

  1. 导出自签名证书:使用以下命令导出Gitea服务器上的自签名证书。在Windows中使用<nul替代< /dev/null
openssl s_client -showcerts -connect gitea.example.com:443 <nul | openssl x509 -outform PEM > gitea.crt
  1. 在Windows中安装证书:双击gitea.crt文件,选择“安装证书”,并将其安装到受信任的根证书颁发机构中。

在macOS/Linux系统中

  1. 将.crt文件复制到/usr/local/share/ca-certificates/目录中:
sudo cp gitea.crt /usr/local/share/ca-certificates/gitea.crt
  1. 更新系统的CA证书:
sudo update-ca-certificates

3. 在Git配置中关闭SSL验证(仅限测试环境)

在特定项目中关闭SSL验证:

git config http.https://gitea.example.com.sslVerify "false"

4. 使用SSH连接

如果Gitea支持SSH,可以使用SSH协议克隆仓库,避免SSL证书问题。

git clone git@gitea.example.com:username/repository.git

五、测试HTTPS访问

在浏览器中访问https://gitea.example.com,确保网站可以通过HTTPS正常加载。如果一切配置正确,浏览器地址栏应显示一个锁标志,表示连接已加密。也可以通过命令来测试访问:

curl -I https://域名

如果返回HTTP/2 200或HTTP/1.1 200 OK,说明HTTPS已经生效。

六、自动续订证书

Let's Encrypt证书有效期为90天。Certbot已自动设置续订任务,可以通过以下命令手动测试续订:

sudo certbot renew --dry-run

七、总结

通过Certbot和Nginx配置HTTPS可以显著提高网站的安全性,并且Let's Encrypt提供的免费证书使配置过程简单高效。按以上步骤设置后,你的站点将支持HTTPS安全访问,提升用户数据传输的安全性。同时,通过信任自签名证书或使用SSH协议,Git客户端可以顺利地克隆和拉取代码。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号