在服务器上启用 HTTPS

Chris Palmer
Chris Palmer
Matt Gaunt

本页介绍了如何在服务器上设置 HTTPS,包括 操作步骤:

  • 创建 2048 位 RSA 公钥/私钥对。
  • 生成嵌入您的公钥的证书签名请求 (CSR)。
  • 将 CSR 与证书授权机构 (CA) 共享以接收最终结果 证书或证书链
  • 将最终证书安装在非网络可访问的位置,例如 /etc/ssl(Linux 和 Unix)或 IIS 需要它的位置 (Windows)。

生成密钥和证书签名请求

本部分使用 openssl 命令行程序 Linux、BSD 和 Mac OS X 系统生成私钥、公钥和 CSR。

生成公钥/私钥对

首先,生成一个 2048 位 RSA 密钥对。较短的键可以 暴力猜测攻击和较长的密钥会使用不必要的资源。

使用以下命令生成 RSA 密钥对:

openssl genrsa -out www.example.com.key 2048

这将生成以下输出:

Generating RSA private key, 2048 bit long modulus
.+++
.......................................................................................+++
e is 65537 (0x10001)

生成证书签名请求

在此步骤中,您需要嵌入公钥和贵组织的相关信息 和您的网站包含在证书签名请求 (CSR) 中。openssl 命令要求您提供所需的元数据

运行以下命令:

openssl req -new -sha256 -key www.example.com.key -out www.example.com.csr

系统会输出以下内容:

You are about to be asked to enter information that will be incorporated
into your certificate request

What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CA
State or Province Name (full name) [Some-State]:California
Locality Name (for example, city) []:Mountain View
Organization Name (for example, company) [Internet Widgits Pty Ltd]:Example, Inc.
Organizational Unit Name (for example, section) []:Webmaster Help Center Example
Team
Common Name (e.g. server FQDN or YOUR name) []:www.example.com
Email Address []:webmaster@example.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

为确保 CSR 的有效性,请运行以下命令:

openssl req -text -in www.example.com.csr -noout

响应应如下所示:

Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=CA, ST=California, L=Mountain View, O=Google, Inc.,
OU=Webmaster Help Center Example Team,
CN=www.example.com/emailAddress=webmaster@example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:ad:fc:58:e0:da:f2:0b:73:51:93:29:a5:d3:9e:
                    f8:f1:14:13:64:cc:e0:bc:be:26:5d:04:e1:58:dc:
                    ...
                Exponent: 65537 (0x10001)
        Attributes:
            a0:00
    Signature Algorithm: sha256WithRSAEncryption
         5f:05:f3:71:d5:f7:b7:b6:dc:17:cc:88:03:b8:87:29:f6:87:
         2f:7f:00:49:08:0a:20:41:0b:70:03:04:7d:94:af:69:3d:f4:
         ...

将 CSR 提交给证书授权机构

不同的证书授权机构 (CA) 要求您向其提交 CSR 构建容器包括使用其网站上的表单或发送 通过电子邮件与 CSR 联系。一些 CA 或其转销商甚至可能实现部分或全部自动化 包括密钥对和 CSR 的生成。

将 CSR 发送给您的 CA 并按照他们的说明接收最终版本 证书或证书链。

不同的 CA 对担保服务收取的费用有所不同 用作公钥

您还可选择将密钥映射到多个 DNS 名称,包括 几个不同的名称(例如 example.com、www.example.com、example.net、 和 www.example.net)或“通配符”例如 *.example.com

将证书复制到所有前端服务器(位于一个非网络可访问位置)中 例如 /etc/ssl(Linux 和 Unix)或 IIS (Windows) 需要的任何位置 。

在服务器上启用 HTTPS

在服务器上启用 HTTPS 是确保 。

  • 使用 Mozilla 的服务器配置工具来为 HTTPS 设置服务器 联系。
  • 定期使用 Qualys’SSL 服务器测试并确保 至少得分为 A 或 A+。

此时,您必须做出关键的操作决策。从下列选项中选择一项 以下:

  • 给网络服务器提供内容的每个主机名指定一个独立的 IP 地址 。
  • 使用基于名称的虚拟托管。

如果您一直对每个主机名使用不同的 IP 地址, HTTP 和 HTTPS。不过,大多数网站运营者 从而节省 IP 地址 。

如果您的服务器上还没有 HTTPS 服务,请立即启用 (无需将 HTTP 重定向到 HTTPS。请参阅将 HTTP 重定向到 HTTPS )。配置网络服务器以使用 购买和安装过的广告资源。您可能会发现 Mozilla 的配置 生成器 实用。

如果您有许多主机名或子域名,那么它们都需要使用正确的 证书。

现在,并在网站的整个生命周期内定期检查您的 HTTPS 实施情况 QualysSSL 服务器测试。 您的网站应得分为 A 或 A+。将所有导致成绩降低的因素视为 并保持警惕,因为针对算法和协议的新攻击 不断发展。

将站内网址设为相对网址

由于您的网站同时采用 HTTP 和 HTTPS 协议,因此您需要按照 从而尽可能平稳地运行有一个重要因素是 站内链接的相对网址。

确保站内网址和外部网址不依赖于特定协议。 使用相对路径或省去 //example.com/something.js 中的协议。

使用 HTTPS 提供包含 HTTP 资源的网页 可能会导致问题当浏览器遇到 使用不安全资源的其他安全网页时,系统会警告用户 并不完全安全,有些浏览器会拒绝在 Chrome 中加载或执行 HTTP 从而破坏页面不过,您可以放心地添加 HTTP 页面中的资源。如需有关解决这些问题的更多指导,请参阅 修正混合内容

通过跟踪指向您网站上其他网页的基于 HTTP 的链接,也可以将 从 HTTPS 到 HTTP 的用户体验要解决此问题,请将站内网址设为 方法是将它们设置为相对协议(缺少 协议,以 //example.com 开头)或主机相对协议(以仅 路径,例如 /jquery.js)。

正确做法
<h1>Welcome To Example.com</h1>
<script src="/jquery.js"></script>
<link rel="stylesheet" href="/assets/style.css"/>
<img src="/images/logo.png"/>;
<p>A <a href="/2014/12/24">new post on cats!</a></p>
使用相对站内网址。
正确做法
<h1>Welcome To Example.com</h1>
<script src="//example.com/jquery.js"></script>
<link rel="stylesheet" href="//assets.example.com/style.css"/>
<img src="//img.example.com/logo.png"/>;
<p>A <a href="//example.com/2014/12/24/">new post on cats!</a></p>
或者,使用相对协议站内网址。
正确做法
<h1>Welcome To Example.com</h1>
<script src="/jquery.js"></script>
<link rel="stylesheet" href="/assets/style.css"/>
<img src="/images/logo.png"/>;
<p>A <a href="/2014/12/24">new post on cats!</a></p>
<p>Check out this <a href="https://foo.com/"><b>other cool site.</b></a></p>
尽可能使用 HTTPS 网址作为指向其他网站的链接。

使用脚本更新链接,而不是手动更新,以免出错。如果您的 在数据库内,测试您的脚本在 数据库。如果网站的内容只包含简单文件,请测试脚本 开发副本。仅在 更改将照常通过 QA 流程。您可以使用 Bram van Damme 的脚本 或类似工具检测网站中的混合内容。

在链接到其他网站(而不是包含其他网站中的资源)时, 请勿更改协议您无法控制这些网站的运营方式。

为确保大型网站的迁移更加顺畅,我们建议使用相对协议网址。 如果您还不确定是否可以完全部署 HTTPS,则强制您的网站 为所有子资源使用 HTTPS 可能会适得其反。可能会有一段 HTTPS 是新出现的、奇怪的,而且 HTTP 网站仍然必须正常运行 随着时间的推移,您将完成迁移并锁定 HTTPS (请参阅接下来的两个部分)。

如果您的网站依赖于第三方提供商提供的脚本、图片或其他资源 例如 CDN 或 jquery.com,则您有两种选择:

  • 请为这些资源使用相对协议网址。如果第三方未 提供 HTTPS,请让他们这么做大多数都已支持,包括 jquery.com。
  • 从您控制的服务器提供资源,该服务器同时提供 HTTP 和 HTTPS这通常是个好主意 控制网站的外观、性能和安全性; 以信任第三方来保障您网站的安全。

将 HTTP 重定向到 HTTPS

要告知搜索引擎使用 HTTPS 访问您的网站,请在 规范链接 每个网页的标头。<link rel="canonical" href="https://…"/>

启用严格传输安全和安全 Cookie

此时,您可以“锁定”HTTPS:

  • 使用 HTTP 严格传输安全协议 (HSTS) 来避免 301 错误 重定向。
  • 始终在 Cookie 上设置安全标记。

首先,使用严格传输安全 告诉客户端始终使用 HTTPS 来连接到您的服务器,即使 (在遵循 http:// 引用时)。这可击败 SSL 剥离 并避免了我们在 Firebase 中启用的 301 redirect 的往返费用 将 HTTP 重定向到 HTTPS

如需启用 HSTS,请设置 Strict-Transport-Security 标头。OWASP 的 HSTS 页面 包含指向操作说明的链接 各种服务器软件

大多数网络服务器都提供类似的添加自定义标头功能。

还有一点也很重要,那就是确保客户端绝不会发送 Cookie(例如 身份验证或网站偏好设置)。例如,如果用户的 就会以纯文本形式公开身份验证 Cookie 即使您已经执行了其他操作, 没错!

为避免这种情况,请将您的 Web 应用更改为始终为其 Cookie 设置安全标记 集。此 OWASP 页面介绍了如何设置安全标记 多个应用框架中实现的功能每个 appl 框架都有一种方法来设置此标记。

大多数网络服务器都提供简单的重定向功能。使用301 (Moved Permanently) 向搜索引擎和浏览器表明,该 HTTPS 版本是规范版本 并将用户从 HTTP 重定向到您网站的 HTTPS 版本。

搜索结果排名

Google 使用 HTTPS 作为积极的搜索质量 指标。 Google 还发布了一份指南,介绍了如何转移、迁移或迁移您的 同时 搜索排名。Bing 还发布了有关 网站站长

性能

如果内容层和应用层经过精心调优(请参阅 Steve Souders 的书籍寻求建议),其余的 TLS 相对于网站的整体费用而言,性能方面的顾虑 应用。您还可以减少和分摊这些费用。获得有关 TLS 的建议 请参阅高性能浏览器网络 Ilya Grigorik 和 Ivan Ristic's OpenSSL 实战宝典防弹 SSL 和 TLS

在某些情况下,TLS 可以提高性能,主要是由于 可使用 HTTP/2。有关详情,请参阅 Chris Palmer's有关 HTTPS 和 HTTP/2 性能的 2014 年 Chrome 开发者峰会

引荐来源网址标头

当用户从 HTTPS 网站链接到其他 HTTP 网站时,用户代理 请勿发送 Referer 标头。如果这是个问题 解决问题:

  • 其他网站应迁移到 HTTPS。如果被引荐网站完成了 在服务器上启用 HTTPS 部分 本指南,您可以将您网站中的链接从 http:// 更改为 https:// 或使用相对协议链接。
  • 要解决引用站点标头的各种问题,请使用新的 引荐来源网址政策标准

广告收入

通过展示广告来创收的网站运营商希望确保 迁移到 HTTPS 不会减少广告展示次数。然而,由于混合 内容安全问题,HTTP <iframe> 在 HTTPS 网页上无法使用。 除非广告客户通过 HTTPS 发布,否则网站运营商无法迁移到 HTTPS 同时又不会损失广告收入;但在网站运营商迁移到 HTTPS 之前 因为广告主几乎没有发布 HTTPS 的动力。

您可以使用广告客户 通过 HTTPS 提供广告服务,并要求不在 至少让它成为一种选择您可能需要推迟 在有足够的广告客户之前使站内网址变成相对网址 能够正常地互操作