Windows和Linux设置Https(SSL)访问

文章目录

    • [核心概念统一:获取 SSL/TLS 证书](#核心概念统一:获取 SSL/TLS 证书)
    • [场景一:为 Windows 系统上的网站配置 HTTPS(使用 IIS)](#场景一:为 Windows 系统上的网站配置 HTTPS(使用 IIS))
    • [场景二:为 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))
    • [场景四:为 Linux 系统管理面板配置 HTTPS(以 Cockpit 为例)](#场景四:为 Linux 系统管理面板配置 HTTPS(以 Cockpit 为例))

配置 HTTPS 访问 Windows 和 Linux 系统,通常不是直接给操作系统本身配置 HTTPS,而是为运行在它们之上的 Web 服务 (如 IIS, Apache, Nginx)或 远程管理服务 (如 Webmin, Cockpit)配置 HTTPS,以实现安全的加密访问。

下面我将分场景为您提供详细的操作说明。


核心概念统一:获取 SSL/TLS 证书

无论什么系统或服务,启用 HTTPS 都需要一个 SSL/TLS 证书。证书主要有三种类型:

  1. 权威证书颁发机构(CA)签发证书 (如 Let's Encrypt, DigiCert):用于公开服务,浏览器完全信任。推荐用于生产环境
  2. 自签名证书(Self-Signed Certificate) :自己生成的证书,免费且简单。但浏览器会提示"不安全",需要手动信任。仅用于测试或内部环境
  3. 内部私有 CA 签发证书 :在企业内网搭建自己的 CA,然后为内部服务签发证书。所有客户端信任内网 CA 后,即可正常访问。推荐用于大型企业内网

本文将重点介绍最常用的 自签名证书 (用于测试)和 Let's Encrypt 免费证书(用于生产)。


场景一:为 Windows 系统上的网站配置 HTTPS(使用 IIS)

IIS(Internet Information Services)是 Windows 自带的 Web 服务器。

第一部分:使用自签名证书(测试用)

步骤 1:创建自签名证书

  1. 打开 IIS 管理器
  2. 在左侧连接面板中,选择服务器节点。
  3. 在主界面中,双击 "服务器证书"
  4. 在右侧操作面板中,点击 "创建自签名证书"
  5. 输入一个友好的证书名称(如 MyTestSite),选择 "个人" 存储,点击 "确定"

步骤 2:为网站绑定 HTTPS

  1. 在 IIS 管理器的左侧,展开站点,选择你要配置的网站。
  2. 在右侧操作面板中,点击 "绑定"
  3. 在网站绑定窗口中,点击 "添加"
  4. 进行如下设置:
    • 类型 :选择 https
    • IP 地址:通常选择"全部未分配"。
    • 端口443
    • SSL 证书 :选择你刚才创建的自签名证书(如 MyTestSite)。
  5. 点击 "确定",然后关闭绑定窗口。

步骤 3:访问测试

现在你可以通过 https://你的服务器IP或域名 访问网站。由于是自签名证书,浏览器会显示"不安全"警告,你需要手动高级 -> 继续前往。

第二部分:使用 Let's Encrypt 证书(生产用)

推荐使用官方推荐的第三方工具 Certify The Web,它有友好的图形界面。

  1. 下载并安装 Certify The Web:从其官网下载安装。
  2. 启动并配置
    • 打开该工具,它会自动检测 IIS 站点。
    • 点击 "New Certificate",选择你要申请证书的网站。
    • 输入你的域名(必须是可以解析到本机公网 IP 的域名)。
    • 工具会自动验证域名所有权(通常使用 HTTP-01 挑战,即临时在你的网站根目录创建验证文件)。
    • 配置自动续订(非常重要,Let's Encrypt 证书只有 90 天有效期)。
  3. 申请证书:点击 "Request Certificate",工具会自动完成申请、验证并绑定到 IIS 站点。
  4. 访问测试 :现在用 https://你的域名 访问,浏览器会显示安全的小锁。

场景二:为 Windows系统上的网站配置 HTTPS(使用 Nginx)

准备工作:安装 Nginx for Windows

  1. 下载 Nginx

  2. 安装 Nginx

    • 将下载的 ZIP 文件解压到你想要的目录,例如 C:\nginx。这就是 Nginx 的根目录。
    • 重要:确保路径中不包含中文或特殊字符,最好全是英文。
  3. 测试安装

    • 打开命令提示符(CMD),并切换到 Nginx 目录,例如:
    cmd 复制代码
    cd C:\nginx
    • 启动 Nginx:
    cmd 复制代码
    start nginx
    • 打开浏览器,访问 http://localhost。如果看到 "Welcome to nginx!" 的页面,说明安装成功。

第一部分:使用自签名证书配置 HTTPS(用于测试或内部开发)

步骤 1:生成自签名证书和私钥

我们将使用 OpenSSL 来生成证书。Windows 10/11 通常自带 OpenSSL,如果没有,请先安装。

  1. 打开命令提示符(CMD)

  2. 切换到 Nginx 目录,并创建一个用于存放证书的文件夹,例如 ssl

    cmd 复制代码
    cd C:\nginx
    mkdir ssl
    cd ssl
  3. 生成私钥(.key 文件)和证书(.crt 文件):

    cmd 复制代码
    openssl 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.keylocalhost.crt 两个文件。

步骤 2:配置 Nginx

  1. 用文本编辑器(如 Notepad++ 或 VSCode)打开 Nginx 的配置文件 C:\nginx\conf\nginx.conf

  2. 在配置文件中找到 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_certificatessl_certificate_key 的路径是相对于 Nginx 根目录(C:\nginx)的。因为我们把证书放在 C:\nginx\ssl\ 下,所以路径写 ssl/localhost.crt
    • server_name:如果是本地测试,就用 localhost;如果通过网络访问,需要用域名或 IP 地址。

步骤 3:测试并重新加载配置

  1. 检查配置文件语法

    在 CMD 中(Nginx 目录下)运行:

    cmd 复制代码
    nginx -t

    如果显示 syntax is oktest is successful,说明配置正确。

  2. 重新加载 Nginx 配置(无需完全重启):

    cmd 复制代码
    nginx -s reload

步骤 4:访问测试

  1. 打开浏览器,访问 https://localhost
  2. 因为使用的是自签名证书,浏览器会显示 "您的连接不是私密连接""此网站不安全" 的警告。
  3. 这是正常现象。对于测试目的,可以点击 "高级" -> "继续前往localhost(不安全)"
  4. 如果能看到 Nginx 的欢迎页,说明 HTTPS 配置成功。

第二部分:使用 Let's Encrypt 证书配置 HTTPS(用于生产环境)

在 Windows 上使用 Let's Encrypt 相对复杂,因为官方工具 Certbot 没有原生的 Windows 支持。推荐使用 Win-acme 这个优秀的第三方客户端。

步骤 1:下载并配置 Win-acme

  1. 访问 Win-acme 的 GitHub 发布页面:https://github.com/win-acme/win-acme/releases
  2. 下载最新版本的 win-acme.v.x.x.x.Trimmed.zip 文件。
  3. 将其解压到一个合适的目录,例如 C:\letsencrypt

步骤 2:确保域名解析正确

你的域名(例如 www.example.com)必须已经正确解析到你的 Windows 服务器的公网 IP 地址。

步骤 3:使用 Win-acme 获取证书

  1. 管理员身份运行命令提示符(CMD)。

  2. 切换到 Win-acme 的目录:

    cmd 复制代码
    cd C:\letsencrypt
  3. 运行主程序:

    cmd 复制代码
    wacs.exe
  4. 程序会启动一个交互式菜单:

    • 选择创建证书 :通常按 M 选择手动模式,或者用简单模式(默认选项)。
    • 输入域名 :输入你希望申请证书的完整域名(如 www.example.com)。
    • 选择验证方式
      • 如果你的 Nginx 正在运行且 80 端口未被占用,可以选择 "http-01" 挑战(更简单)。
      • 如果 80 端口被占用,可以选择 "tls-alpn-01" 挑战(需要暂时停止 Nginx)。
    • 选择存储方式
      • 选择 "IIS" 以外的选项,例如 "No additional steps""PEM encoded files"
    • 设置存储路径 :程序会问你把证书存在哪里。你可以使用默认路径,或者指定一个自定义路径,例如 C:\nginx\ssl\记下这个路径,稍后配置 Nginx 要用到。
  5. 程序会自动完成域名验证、证书申请和保存。申请成功后,它会询问你是否设置自动续订,一定要选择是

步骤 4:配置 Nginx

配置方法与自签名证书基本相同,只需修改 ssl_certificatessl_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:测试并重新加载配置

与自签名证书的步骤完全相同:

  1. nginx -t (检查语法)
  2. 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

  1. 编辑网站的 Nginx 配置文件,通常位于 /etc/nginx/sites-available/default/etc/nginx/conf.d/default.conf

  2. 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 工具可以全自动完成证书的申请和配置。

  1. 安装 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
  2. 确保你的域名已解析到服务器 IP ,并且 nginx 配置中的 server_name 正确设置。

  3. 运行 Certbot 自动获取并配置证书

    bash 复制代码
    sudo certbot --nginx
    • 工具会引导你输入邮箱(用于紧急通知),同意服务条款。
    • 选择你要为其申请证书的域名。
    • 选择是否将 HTTP 流量重定向到 HTTPS(强烈建议选择 2)。
  4. 自动续订测试

    Let's Encrypt 证书有效期短,Certbot 会自动创建定时任务。可以手动测试续订:

    bash 复制代码
    sudo certbot renew --dry-run
  5. 访问测试

    现在你的网站应该已经可以通过安全的 HTTPS 访问了。


场景四:为 Linux 系统管理面板配置 HTTPS(以 Cockpit 为例)

Cockpit 是一个现代的 Linux 服务器 Web 管理界面。

使用系统自签名证书(默认)

Cockpit 默认在安装后就会使用一个自签名证书,监听 9090 端口。你可以直接通过 https://你的服务器IP:9090 访问,并忽略浏览器的安全警告。

使用 Let's Encrypt 证书

  1. 安装 Cockpit 和 SSL 工具(如果未安装)

    bash 复制代码
    # Ubuntu
    sudo apt install cockpit cockpit-storaged
    
    # CentOS
    sudo yum install cockpit cockpit-storaged
  2. 使用 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
  3. 配置 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
  4. 访问测试

    现在通过 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。

相关推荐
btyzadt3 小时前
Ubuntu中安装Nuclei教程
linux·运维·ubuntu
倔强的石头1063 小时前
【Linux指南】gdb进阶技巧:断点高级玩法与变量跟踪实战
linux·运维
山,离天三尺三4 小时前
基于LINUX平台使用C语言实现MQTT协议连接华为云平台(IOT)(网络编程)
linux·c语言·开发语言·网络·物联网·算法·华为云
用户31187945592185 小时前
libopenssl-1_0_0-devel-1.0.2p RPM 包安装教程(openSUSE/SLES x86_64)
linux
waves浪游6 小时前
Linux基本指令(中)
linux·运维·python
zwhy03116 小时前
TCP服务器设计思路
linux·服务器·网络
-水火-7 小时前
【IDE】Linux下使用openocd烧录bin文件
linux·ide·openocd·bin
YongCheng_Liang7 小时前
Linux 基础命令的 7 大核心模块
linux·运维·服务器
tt5555555555557 小时前
嵌入式启动全流程详解:从SPL到内核
linux