文章目录
-
- [核心概念统一:获取 SSL/TLS 证书](#核心概念统一:获取 SSL/TLS 证书)
- [场景一:为 Windows 系统上的网站配置 HTTPS(使用 IIS)](#场景一:为 Windows 系统上的网站配置 HTTPS(使用 IIS))
-
- 第一部分:使用自签名证书(测试用)
- [第二部分:使用 Let's Encrypt 证书(生产用)](#第二部分:使用 Let’s Encrypt 证书(生产用))
- [场景二:为 Windows系统上的网站配置 HTTPS(使用 Nginx)](#场景二:为 Windows系统上的网站配置 HTTPS(使用 Nginx))
-
- [准备工作:安装 Nginx for Windows](#准备工作:安装 Nginx for Windows)
- [第一部分:使用自签名证书配置 HTTPS(用于测试或内部开发)](#第一部分:使用自签名证书配置 HTTPS(用于测试或内部开发))
- [第二部分:使用 Let's Encrypt 证书配置 HTTPS(用于生产环境)](#第二部分:使用 Let's Encrypt 证书配置 HTTPS(用于生产环境))
- 总结
- [场景三:为 Linux 系统上的网站配置 HTTPS(使用 Nginx)](#场景三:为 Linux 系统上的网站配置 HTTPS(使用 Nginx))
-
- 第一部分:使用自签名证书(测试用)
- [第二部分:使用 Let's Encrypt 证书(生产用)](#第二部分:使用 Let’s Encrypt 证书(生产用))
- [场景四:为 Linux 系统管理面板配置 HTTPS(以 Cockpit 为例)](#场景四:为 Linux 系统管理面板配置 HTTPS(以 Cockpit 为例))
配置 HTTPS 访问 Windows 和 Linux 系统,通常不是直接给操作系统本身配置 HTTPS,而是为运行在它们之上的 Web 服务 (如 IIS, Apache, Nginx)或 远程管理服务 (如 Webmin, Cockpit)配置 HTTPS,以实现安全的加密访问。
下面我将分场景为您提供详细的操作说明。
核心概念统一:获取 SSL/TLS 证书
无论什么系统或服务,启用 HTTPS 都需要一个 SSL/TLS 证书。证书主要有三种类型:
- 权威证书颁发机构(CA)签发证书 (如 Let's Encrypt, DigiCert):用于公开服务,浏览器完全信任。推荐用于生产环境。
- 自签名证书(Self-Signed Certificate) :自己生成的证书,免费且简单。但浏览器会提示"不安全",需要手动信任。仅用于测试或内部环境。
- 内部私有 CA 签发证书 :在企业内网搭建自己的 CA,然后为内部服务签发证书。所有客户端信任内网 CA 后,即可正常访问。推荐用于大型企业内网。
本文将重点介绍最常用的 自签名证书 (用于测试)和 Let's Encrypt 免费证书(用于生产)。
场景一:为 Windows 系统上的网站配置 HTTPS(使用 IIS)
IIS(Internet Information Services)是 Windows 自带的 Web 服务器。
第一部分:使用自签名证书(测试用)
步骤 1:创建自签名证书
- 打开 IIS 管理器。
- 在左侧连接面板中,选择服务器节点。
- 在主界面中,双击 "服务器证书"。
- 在右侧操作面板中,点击 "创建自签名证书"。
- 输入一个友好的证书名称(如
MyTestSite
),选择 "个人" 存储,点击 "确定"。
步骤 2:为网站绑定 HTTPS
- 在 IIS 管理器的左侧,展开站点,选择你要配置的网站。
- 在右侧操作面板中,点击 "绑定"。
- 在网站绑定窗口中,点击 "添加"。
- 进行如下设置:
- 类型 :选择
https
。 - IP 地址:通常选择"全部未分配"。
- 端口 :
443
。 - SSL 证书 :选择你刚才创建的自签名证书(如
MyTestSite
)。
- 类型 :选择
- 点击 "确定",然后关闭绑定窗口。
步骤 3:访问测试
现在你可以通过 https://你的服务器IP或域名
访问网站。由于是自签名证书,浏览器会显示"不安全"警告,你需要手动高级 -> 继续前往。
第二部分:使用 Let's Encrypt 证书(生产用)
推荐使用官方推荐的第三方工具 Certify The Web,它有友好的图形界面。
- 下载并安装 Certify The Web:从其官网下载安装。
- 启动并配置 :
- 打开该工具,它会自动检测 IIS 站点。
- 点击 "New Certificate",选择你要申请证书的网站。
- 输入你的域名(必须是可以解析到本机公网 IP 的域名)。
- 工具会自动验证域名所有权(通常使用 HTTP-01 挑战,即临时在你的网站根目录创建验证文件)。
- 配置自动续订(非常重要,Let's Encrypt 证书只有 90 天有效期)。
- 申请证书:点击 "Request Certificate",工具会自动完成申请、验证并绑定到 IIS 站点。
- 访问测试 :现在用
https://你的域名
访问,浏览器会显示安全的小锁。
场景二:为 Windows系统上的网站配置 HTTPS(使用 Nginx)
准备工作:安装 Nginx for Windows
-
下载 Nginx:
- 访问 Nginx 官网下载页面:http://nginx.org/en/download.html
- 选择最新的 nginx/version.x.x 版本,下载以
.zip
结尾的 Windows 版本包。
-
安装 Nginx:
- 将下载的 ZIP 文件解压到你想要的目录,例如
C:\nginx
。这就是 Nginx 的根目录。 - 重要:确保路径中不包含中文或特殊字符,最好全是英文。
- 将下载的 ZIP 文件解压到你想要的目录,例如
-
测试安装:
- 打开命令提示符(CMD),并切换到 Nginx 目录,例如:
cmdcd C:\nginx
- 启动 Nginx:
cmdstart nginx
- 打开浏览器,访问
http://localhost
。如果看到 "Welcome to nginx!" 的页面,说明安装成功。
第一部分:使用自签名证书配置 HTTPS(用于测试或内部开发)
步骤 1:生成自签名证书和私钥
我们将使用 OpenSSL 来生成证书。Windows 10/11 通常自带 OpenSSL,如果没有,请先安装。
-
打开命令提示符(CMD)。
-
切换到 Nginx 目录,并创建一个用于存放证书的文件夹,例如
ssl
:cmdcd C:\nginx mkdir ssl cd ssl
-
生成私钥(
.key
文件)和证书(.crt
文件):cmdopenssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout localhost.key -out localhost.crt
-x509
:生成自签名证书。-nodes
:不对私钥加密,避免 Nginx 启动时要求输入密码。-days 365
:证书有效期为 1 年。-newkey rsa:2048
:生成一个新的 2048 位的 RSA 私钥。- 执行命令后,会提示你输入一些信息。对于测试证书,可以随意填写,但 Common Name (CN) 最好填写
localhost
或你的计算机名,因为你要用它来访问。
示例输入:
Country Name (2 letter code) [AU]:CN State or Province Name (full name) [Some-State]:Beijing Locality Name (eg, city) []:Beijing Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany Organizational Unit Name (eg, section) []:IT Common Name (e.g. server FQDN or YOUR name) []:localhost # 这是关键! Email Address []:admin@mycompany.com
完成后,在
C:\nginx\ssl
目录下会生成localhost.key
和localhost.crt
两个文件。
步骤 2:配置 Nginx
-
用文本编辑器(如 Notepad++ 或 VSCode)打开 Nginx 的配置文件
C:\nginx\conf\nginx.conf
。 -
在配置文件中找到
server
块。默认情况下,它监听 80 端口(HTTP)。我们需要修改它,并添加一个监听 443 端口(HTTPS)的server
块。推荐配置:将 HTTP 请求重定向到 HTTPS,并配置 HTTPS 服务器。
nginx# 配置HTTP服务器块,强制重定向到HTTPS server { listen 80; server_name localhost; # 也可以是你的域名或IP # 告诉浏览器在一年内只能使用HTTPS访问 add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; # 将所有的HTTP请求重定向到HTTPS return 301 https://$host$request_uri; } # 配置HTTPS服务器块 server { listen 443 ssl; server_name localhost; # 指定证书和私钥的路径 ssl_certificate ssl/localhost.crt; ssl_certificate_key ssl/localhost.key; # 增强SSL安全性 ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_protocols TLSv1.2 TLSv1.3; # 禁用不安全的旧协议 ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; # 网站根目录和其他设置 location / { root html; index index.html index.htm; } # 可选的错误页面配置 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
关键点说明:
ssl_certificate
和ssl_certificate_key
的路径是相对于 Nginx 根目录(C:\nginx
)的。因为我们把证书放在C:\nginx\ssl\
下,所以路径写ssl/localhost.crt
。server_name
:如果是本地测试,就用localhost
;如果通过网络访问,需要用域名或 IP 地址。
步骤 3:测试并重新加载配置
-
检查配置文件语法 :
在 CMD 中(Nginx 目录下)运行:
cmdnginx -t
如果显示
syntax is ok
和test is successful
,说明配置正确。 -
重新加载 Nginx 配置(无需完全重启):
cmdnginx -s reload
步骤 4:访问测试
- 打开浏览器,访问
https://localhost
。 - 因为使用的是自签名证书,浏览器会显示 "您的连接不是私密连接" 或 "此网站不安全" 的警告。
- 这是正常现象。对于测试目的,可以点击 "高级" -> "继续前往localhost(不安全)"。
- 如果能看到 Nginx 的欢迎页,说明 HTTPS 配置成功。
第二部分:使用 Let's Encrypt 证书配置 HTTPS(用于生产环境)
在 Windows 上使用 Let's Encrypt 相对复杂,因为官方工具 Certbot 没有原生的 Windows 支持。推荐使用 Win-acme 这个优秀的第三方客户端。
步骤 1:下载并配置 Win-acme
- 访问 Win-acme 的 GitHub 发布页面:https://github.com/win-acme/win-acme/releases
- 下载最新版本的
win-acme.v.x.x.x.Trimmed.zip
文件。 - 将其解压到一个合适的目录,例如
C:\letsencrypt
。
步骤 2:确保域名解析正确
你的域名(例如 www.example.com
)必须已经正确解析到你的 Windows 服务器的公网 IP 地址。
步骤 3:使用 Win-acme 获取证书
-
以管理员身份运行命令提示符(CMD)。
-
切换到 Win-acme 的目录:
cmdcd C:\letsencrypt
-
运行主程序:
cmdwacs.exe
-
程序会启动一个交互式菜单:
- 选择创建证书 :通常按
M
选择手动模式,或者用简单模式(默认选项)。 - 输入域名 :输入你希望申请证书的完整域名(如
www.example.com
)。 - 选择验证方式 :
- 如果你的 Nginx 正在运行且 80 端口未被占用,可以选择 "http-01" 挑战(更简单)。
- 如果 80 端口被占用,可以选择 "tls-alpn-01" 挑战(需要暂时停止 Nginx)。
- 选择存储方式 :
- 选择 "IIS" 以外的选项,例如 "No additional steps" 或 "PEM encoded files"。
- 设置存储路径 :程序会问你把证书存在哪里。你可以使用默认路径,或者指定一个自定义路径,例如
C:\nginx\ssl\
。记下这个路径,稍后配置 Nginx 要用到。
- 选择创建证书 :通常按
-
程序会自动完成域名验证、证书申请和保存。申请成功后,它会询问你是否设置自动续订,一定要选择是。
步骤 4:配置 Nginx
配置方法与自签名证书基本相同,只需修改 ssl_certificate
和 ssl_certificate_key
的路径,指向 Win-acme 生成的证书文件。
Win-acme 生成的证书通常包含:
.crt
文件(证书链).key
文件(私钥)
你的 Nginx HTTPS 服务器块配置应类似这样:
nginx
# 配置HTTPS服务器块
server {
listen 443 ssl http2;
server_name _; # 替换为你的域名或IP
# 指定证书和私钥路径
ssl_certificate /etc/nginx/ssl/nginx-selfsigned.crt;
ssl_certificate_key /etc/nginx/ssl/nginx-selfsigned.key;
# 增强SSL安全性
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# 其他网站配置(如根目录、索引文件等)
root /var/www/html;
index index.html index.htm;
}
注意 :在 Windows 的 Nginx 配置中,路径可以使用正斜杠 /
或双反斜杠 \\
。
需要确保内网和外网443端口开放,可以设置内外网映射对应关系为外网443-映射内网443
步骤 5:测试并重新加载配置
与自签名证书的步骤完全相同:
nginx -t
(检查语法)nginx -s reload
(重载配置)
现在,你可以通过 https://你的域名
安全地访问网站,浏览器不会再有安全警告。
总结
方面 | 自签名证书 | Let's Encrypt 证书 |
---|---|---|
适用场景 | 本地开发、内部测试 | 生产环境、对外服务 |
成本 | 免费 | 免费 |
浏览器信任 | 不信任,显示警告 | 完全信任,显示安全锁 |
工具 | Windows 自带 OpenSSL | Win-acme |
有效期 | 自己设定(如 365 天) | 90 天(需自动续订) |
关键步骤 | 1. 用 OpenSSL 生成证书 2. 配置 nginx.conf 3. 重载 Nginx | 1. 用 Win-acme 申请证书 2. 配置 nginx.conf 3. 重载 Nginx |
场景三:为 Linux 系统上的网站配置 HTTPS(使用 Nginx)
这里以最流行的 Nginx 为例,系统以 Ubuntu/CentOS 为代表。
第一部分:使用自签名证书(测试用)
步骤 1:安装 Nginx(如果未安装)
bash
# Ubuntu/Debian
sudo apt update
sudo apt install nginx
# CentOS/RHEL
sudo yum install nginx
# 或者对于较新版本
sudo dnf install nginx
步骤 2:生成自签名证书
使用 OpenSSL 工具生成证书和私钥。
bash
sudo mkdir -p /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/nginx/ssl/nginx-selfsigned.key \
-out /etc/nginx/ssl/nginx-selfsigned.crt
-nodes
:表示不对私钥加密(避免 Nginx 每次启动都要输入密码)。- 执行命令后,会交互式地询问国家、省份、通用名(域名或IP)等信息。对于测试,可以随意填写,但 Common Name 最好填写你的服务器 IP 或域名。
步骤 3:创建强壮的 Diffie-Hellman 密钥交换参数(可选但推荐)
bash
sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048
步骤 4:配置 Nginx
-
编辑网站的 Nginx 配置文件,通常位于
/etc/nginx/sites-available/default
或/etc/nginx/conf.d/default.conf
。 -
在
server
块中修改或添加如下配置,将 HTTP 请求重定向到 HTTPS,并配置 HTTPS 服务器块。
nginx
# 配置HTTP服务器块,强制重定向到HTTPS
server {
listen 80;
server_name _; # 替换为你的域名或IP
return 301 https://$host$request_uri;
}
# 配置HTTPS服务器块
server {
listen 443 ssl http2;
server_name _; # 替换为你的域名或IP
# 指定证书和私钥路径
ssl_certificate /etc/nginx/ssl/nginx-selfsigned.crt;
ssl_certificate_key /etc/nginx/ssl/nginx-selfsigned.key;
# 增强SSL安全性
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# 其他网站配置(如根目录、索引文件等)
root /var/www/html;
index index.html index.htm;
}
步骤 5:测试并重启 Nginx
bash
# 检查配置文件语法是否正确
sudo nginx -t
# 如果显示 "syntax is ok" 和 "test is successful",则重启Nginx
sudo systemctl restart nginx
步骤 6:访问测试
通过 https://你的服务器IP或域名
访问,浏览器会提示不安全。
第二部分:使用 Let's Encrypt 证书(生产用)
使用 Certbot 工具可以全自动完成证书的申请和配置。
-
安装 Certbot
bash# Ubuntu/Debian sudo apt install certbot python3-certbot-nginx # CentOS/RHEL (需要先启用EPEL仓库) sudo yum install epel-release sudo yum install certbot python3-certbot-nginx
-
确保你的域名已解析到服务器 IP ,并且
nginx
配置中的server_name
正确设置。 -
运行 Certbot 自动获取并配置证书
bashsudo certbot --nginx
- 工具会引导你输入邮箱(用于紧急通知),同意服务条款。
- 选择你要为其申请证书的域名。
- 选择是否将 HTTP 流量重定向到 HTTPS(强烈建议选择 2)。
-
自动续订测试
Let's Encrypt 证书有效期短,Certbot 会自动创建定时任务。可以手动测试续订:
bashsudo certbot renew --dry-run
-
访问测试
现在你的网站应该已经可以通过安全的 HTTPS 访问了。
场景四:为 Linux 系统管理面板配置 HTTPS(以 Cockpit 为例)
Cockpit 是一个现代的 Linux 服务器 Web 管理界面。
使用系统自签名证书(默认)
Cockpit 默认在安装后就会使用一个自签名证书,监听 9090 端口。你可以直接通过 https://你的服务器IP:9090
访问,并忽略浏览器的安全警告。
使用 Let's Encrypt 证书
-
安装 Cockpit 和 SSL 工具(如果未安装)
bash# Ubuntu sudo apt install cockpit cockpit-storaged # CentOS sudo yum install cockpit cockpit-storaged
-
使用 Certbot 获取一个证书(不绑定到 Nginx/Apache)
bash# 停止占用80端口的服务(如Nginx,Apache) sudo systemctl stop nginx # 使用 standalone 模式获取证书 sudo certbot certonly --standalone -d your-server-domain.com --preferred-challenges http --agree-tos -m your-email@example.com # 重新启动之前停止的服务 sudo systemctl start nginx
-
配置 Cockpit 使用新证书
Cockpit 的证书和密钥路径通常为
/etc/cockpit/ws-certs.d/
。你需要将 Let's Encrypt 的证书链接到此目录。bash# 切换到证书目录 cd /etc/cockpit/ws-certs.d/ # 备份原有证书(如果有) sudo mv 0-self-signed.crt 0-self-signed.crt.bak sudo mv 0-self-signed.key 0-self-signed.key.bak # 创建指向 Let's Encrypt 证书的软链接 sudo ln -s /etc/letsencrypt/live/your-server-domain.com/fullchain.pem 0-self-signed.crt sudo ln -s /etc/letsencrypt/live/your-server-domain.com/privkey.pem 0-self-signed.key # 重启 Cockpit 服务 sudo systemctl restart cockpit
-
访问测试
现在通过
https://your-server-domain.com:9090
访问 Cockpit,浏览器会显示安全连接。
总结与安全建议
系统/服务 | 证书类型 | 推荐工具/方法 | 适用场景 |
---|---|---|---|
Windows (IIS) | 自签名 | IIS 管理器 | 内部测试、开发 |
Let's Encrypt | Certify The Web | 生产网站 | |
Linux (Nginx) | 自签名 | OpenSSL + 手动配置 Nginx | 内部测试、开发 |
Let's Encrypt | Certbot | 生产网站首选 | |
Linux (管理面板) | 自签名 | 默认配置 | 临时管理 |
Let's Encrypt | Certbot + 手动链接证书 | 安全的远程管理 |
通用安全建议:
- 强制 HTTPS:配置 HTTP 到 HTTPS 的 301 重定向。
- 使用强加密套件:禁用旧的、不安全的 SSL/TLS 协议(如 SSLv2, SSLv3, TLSv1.0, TLSv1.1)。
- 定期更新和续订证书:尤其是 Let's Encrypt 证书,确保自动续订功能正常工作。
- 防火墙:确保服务器的 443 端口(HTTPS)是开放的。
希望这份详细的说明能帮助您成功配置 HTTPS。