如何使用 OpenSSL 和 SSL 证书保护您的网站

互联网已成为新闻、信息、事件和所有社交事务的首要资源。众所周知,创建您自己的网站并占领互联网的一席之地,与他人分享您的故事、想法,甚至您喜欢的东西,有很多方法。在这样做的时候,确保您在互联网上保持安全与您在现实世界中保持安全同样重要。在现实世界中有很多步骤可以确保安全,但是,在本文中,我们将讨论如何使用 SSL 证书在网络上保持安全。

OpenSSL 是一个命令行工具,我们可以将其用作我们 Web 服务器和应用程序的“保镖”。它可以用于各种与 HTTPS 相关的事情,生成私钥和 CSR(证书签名请求)以及其他示例。本文将分解 OpenSSL 是什么、它的作用以及如何使用它来保护您的网站安全的示例。大多数在线 Web/域名平台都以固定的年度价格提供 SSL 证书。这种方法虽然需要一些技术知识,但可以为您节省一些钱并确保您在网络上的安全。

* 为了示例目的,我们将使用 testmastersite.com 作为命令和示例

本指南如何帮助您

  • 使用 OpenSSL 生成和配置 CSR
  • 了解 SSL 证书及其重要性
  • 了解证书签名请求 (CSR)
  • 学习如何创建您自己的 CSR 和私钥
  • 了解 OpenSSL 及其常见用例

要求

  • 基于 Linux 的操作系统
  • 熟悉 命令行 工具

OpenSSL

首先要做的是在您的机器上生成一个 2048 位的 RSA 密钥对。我所指的密钥对是您的私钥和公钥。您可以使用在线工具列表来执行此操作,但在此示例中,我们将使用 OpenSSL

什么是 SSL 证书?谁在意?

根据 GlobalSign.com 的说法,SSL 证书是一个小型数据文件,它以数字方式将加密密钥绑定到组织详细信息。当安装在 Web 服务器上时,它会激活挂锁和 https 协议,并允许从 Web 服务器到浏览器的安全连接。让我为您分解一下。SSL 证书就像您网站的保镖。要确认站点正在使用 SSL,您通常可以检查站点 URL 中是否具有 https 而不是 http 字符串。“s”代表安全。

  • 安全站点示例:https://www.testmastersite.com/

  • 不安全站点示例:http://www.testmastersite.com/

SSL 安全用于保护信用卡交易、数据传输和日志以及一般的安全浏览。SSL 有助于保护通过互联网传输的所有类型的信息。它们在用户和您的站点或应用程序之间提供信任。它向他们保证他们在一个有保镖的站点上,并且可以在他们在线购物或在您的应用程序中创建帐户时保护他们的数据。PCI 行业 要求将其作为任何希望创建处理信用卡数据的应用程序或站点的标准。此证书可以帮助防止黑客入侵您的网站并窃取登录信息或从您的数据库中抓取信用卡数据。同样,它可以防止看起来可疑的人进入您的企业,这些人可能有意图窃取信息或破坏您投入金钱、时间和精力的网站。

什么是 CSR?为什么它们很重要?

如果您想从可信的 CA(证书颁发机构)获得 SSL 证书,您需要生成 CSR。

CA 或证书颁发机构是一个为您提供数字证书的实体。Let's Encrypt 是 CA 最流行的示例之一。

如果您想从证书颁发机构 (CA) 创建 SSL 证书,您必须生成证书签名请求 (CSR)。CSR 包含公钥和证书所需的其他信息。当证书被签名时,这两者都合并到证书中。

每当您生成 CSR 时,系统都会提示您设置证书的信息。提示和请求的信息是主机 (testmastersite.com) 的专有名称 (DN)、公用名称 (CN) 和完全限定域名 (FQDN),该主机将获得证书。

创建自签名证书

安装完成后,我们可以使用一个命令生成公钥和私钥。

要使用证书签名请求 (CSR) 生成公钥和私钥,请运行以下 OpenSSL 命令

openssl req -out testmastersite.csr -new -newkey rsa:2048 -nodes -keyout testmastersite.key

此命令从头开始创建以下内容

  • req -out 命令创建所需的 CSR 作为输出。
  • 创建一个名为 testmastersite.csr 的 CSR(您可以将名称更改为您喜欢的任何名称)
  • 创建一个名为 testmastersite.key 的 2048 位私钥(也可以更改)

创建 SSL 需要这两个密钥,我将在下一步中讨论。

Create csr

注意:还会显示一个可选的质询密码提示。

Optional password

创建自签名 SSL 证书与 CA 签名证书

现在基础工作已经完成,您可以创建 SSL 证书。如前所述,这些证书将帮助阻止不良行为者访问您网站或应用程序上的私有和关键数据,因此接下来的步骤是乐趣开始的地方。您可以颁发自己的自签名证书,但是,自签名证书是用其自己的私钥签名的证书。

自签名证书可以像任何 CA 签名证书一样很好地用于加密数据,但您的用户会收到警告,提示该证书不受其计算机或浏览器的信任,这可能会吓跑他们。话虽如此,如果您不需要向其用户证明您的应用程序的身份,您应该只使用自签名证书。示例包括博客站点或非生产站点。对于电子商务站点等需要人们处理付款或保存用户数据的应用程序,强烈建议使用 CA 证书。以下是获取免费 CA 认证证书并创建您自己的自签名证书的步骤。

如果您想使用 HTTPS(基于 TLS 的 HTTP)来保护您的个人站点,并且不需要 CA 签名,请使用此方法

openssl x509 -signkey testmastersite.key -in testmastersite.csr -req -days 365 -out testmastersite.crt

Generate a Self-Signed Certificate from Existing Keys

此命令从我们之前创建的密钥和 CSR 创建一个名为 testmastersite.com.crt 的证书。-signkey 标志对密钥进行签名。x509 标志用于创建 X509 证书。-days 365 标志设置证书的到期时间。您现在已经创建了三个文件。

  • testmastersite.com.key(用于创建 SSL 证书的密钥文件)
  • testmastersite.com.csr(用于创建 SSL 证书的证书签名请求文件)
  • testmastersite.com.crt(SSL 证书)

Three new files

从 Certbot 获取免费 TLS 证书

Let's Encrypt 是一个受信任的平台,可以颁发有效期为 90 天的签名证书。您可以随时自行续订它们,并使其无限期有效。Let's Encrypt 建议使用一个名为 certbot 的手动工具,我们将使用它来获取 CA 签名证书。

使用 certbot 续订证书需要一些要求

  • 一个已经在在线并托管的正在运行的网站(我们的示例再次是 testmastersite.com)
  • 一个开放的端口 80
  • 您请求的主机名的 DNS 必须解析到设备
  • 设备必须能够通过 TCP 443 连接到 Let's Encrypt
  • Let's Encrypt 必须能够通过 TCP 80 连接到设备。
安装 Certbot

要安装和设置 certbot 以创建 CA 签名证书,您可以按照 certbot 网站上的步骤进行操作。

Apache SSL 配置示例和用例

您现在可以将这些证书放在您指定的 SSL 证书目录中。一个示例是 Apache 的主配置文件通常命名为 httpd.confapache2.conf。在配置文件中,您可以找到 Apache 配置 SSL 证书位置的位置。

Apache test

您可以将这些位置更改为您想要的任何位置。

  • SSLCertificateFile 是您的 testmastersite.com 证书文件(命名为 testmastersite.com.crt)。
  • SSLCertificateKeyFile 是您创建 CSR 时生成的 .key 文件(命名为 testmastersite.com.key)。
  • SSLCertificateChainFile 是 testmastersite.com 证书文件(命名为 testmastersite.com.crt)
  • 常见问题: 如果 SSLCertificateChainFile 指令不起作用,请尝试使用 SSLCACertificateFile 指令。

建议在 Linux 机器上放置您创建的 SSL 密钥和证书的最佳位置是 /etc/ssl/certs/ 目录。

如果您将 3 个文件(CSR、密钥和 crt 文件)移动到 /etc/ssl/certs 目录中,您的 Apache 配置应如下所示

Apache test etc

要测试您的 SSL 是否在正确的位置,您可以运行此命令:

apachectl configtest

如果测试成功完成,您可以使用以下命令重新启动 Apache

apachectl stop

apachectl start

手动验证您的密钥

正如我们已经提到的,在申请证书之前检查 CSR 中提供的信息是明智的。使用以下命令来验证您的证书签名请求、SSL 证书和密钥。

此命令将验证 CSR 并显示 CSR 中的数据

openssl req -text -noout -verify -in testmastersite.csr

此命令将验证密钥及其有效性

openssl rsa -in testmastersite.key -check

这些命令应显示证书数据,包括序列号、电子邮件地址、签名算法和私钥,私钥应类似于下面的代码段。

openssl req -text -noout -verify -in testmastersite.csr 的示例输出

Example output of openssl req -text -noout -verify -in testmastersite.csr

openssl rsa -in testmastersite.key -check 的示例输出

Example output of openssl rsa -in testmastersite.key -check:

使用 Digicert SSL 安装诊断工具测试新证书

DigiCert 有一个免费的在线工具,称为 DigiCert® SSL 安装诊断工具,可以帮助您确认您的 SSL 证书及其信息,一旦您应用并运行它。

续订证书

现在您已经拥有了 SSL 并将其设置为在 365 天后过期,您可以在过期之前续订它。一个经验法则(出于安全目的)是在续订证书时不使用旧的 CSR。您应该始终在续订证书时生成新的 CSR 和密钥。

此外,建议在 SSL 证书到期日期之前续订。否则,将需要购买新证书。

结论

这些示例仅涵盖处理 SSL 证书以及人们如何使用它们的一些方法。SSL 的使用有很多实例。请在评论中随意建议其他用例,以分享您或您的组织如何使用 SSL 证书。

Tedley 是一位经过认证的 Linux 工程师,他以倡导开源业务方法为荣。如果他没有与朋友争论切换到 Linux,他的时间主要用于玩 DnD、棋盘游戏、格斗游戏,或通过博客、教育计划和应用程序为开源做出贡献。您可以在 LinkedInTwitter 上找到他。

加载 Disqus 评论