如何在 Ubuntu 14.04 的 Nginx 上创建 SSL 证书

介绍

TLS(Transport Layer Security)和其前身 SSL(Secure Sockets Layer)是用于将正常流量包装到受保护的加密包装中使用的网络协议。

使用这种技术,服务器可以安全地在服务器和客户端之间发送流量,而无需担心消息会被外部人拦截和读取,证书系统还帮助用户验证他们正在连接的网站的身份。

在本指南中,我们将向您展示如何在 Ubuntu 14.04 服务器上与 Nginx 网络服务器一起使用自签名的 SSL 证书。

<$>[注] 注: 您可能想考虑使用Let's Encrypt而不是自签证书。Let's Encrypt是一个新的证书授权机构,它发行免费的SSL/TLS证书,这些证书在大多数Web浏览器中是值得信赖的。 查看教程开始: 如何在Ubuntu 14.04上安全地使用Let's Encrypt的Nginx <$>

前提条件

要开始使用本指南,您需要在您的服务器上设置一些基本东西。

您可以通过遵循我们 [Ubuntu 14.04 初始服务器设置] 的步骤 1-4 来学习如何设置此类用户帐户(https://www.digitalocean.com/community/articles/initial-server-setup-with-ubuntu-14-04)。

如果你想在你的服务器上安装一个完整的LEMP(Linux, Nginx,MySQL,PHP)堆栈,你可以遵循我们的指南在 设置LEMP在Ubuntu 14.04

如果您只想使用 Nginx Web 服务器,您可以简单地键入:

1sudo apt-get update
2sudo apt-get install nginx

第一步:创建SSL证书

我们可以从创建一个目录开始,该目录将被用来存储我们所有的SSL信息,我们应该在 Nginx配置目录下创建此目录:

1sudo mkdir /etc/nginx/ssl

现在我们有一个位置来放置我们的文件,我们可以通过键入一个动作创建SSL密钥和证书文件:

1sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt

在我们谈论这一点之前,让我们看看我们发出的命令中发生了什么:

*开放 : 这是创建和管理OpenSSL证书,密钥等文件的基本命令行工具. *req : 此子命令指定我们要使用 X. 509 证书签名请求( CSR) 管理 。 "X.509"是SSL和TLS为其密钥和证书管理所遵循的公钥基础设施标准. 我们希望创建一个新的 X. 509 证书, 所以我们正在使用这个子命令 。

  • 联合国 ** -x509 :这进一步修改了上一个子命令,告诉了我们想要做一个自签名的证书而不是像通常那样生成证书签名请求的效用. *-节点 :这告诉 OpenSSL 跳过选项,以密码口令我们的证书安全. 我们需要Nginx在服务器启动时能够读取文件,而无需用户干预. 密码句可以防止这种情况发生,因为我们必须在每次重启后输入。 *天数 365 :此选项设定证书被视为有效的时间长度。 我们在这里定了一年 *-新ersa:2048 : 它指定我们要同时生成新的证书和新的密钥 。 我们没有在前一个步骤中创建签名证书所需的密钥,所以我们需要与证书一起创建证书. `rsa:2048'部分要求它制作长为2048比特的RSA密钥。 *- keyout :此行告诉 OpenSSL 将生成的私有密钥文件放置在哪里 。
  • 联合国 ** 退出 : 这告诉 OpenSSL 将我们创建的证书放在哪里 。 .

如上所述,这些选项将创建一个密钥文件和一个证书,我们将被问到关于我们的服务器的几个问题,以便正确嵌入证书中的信息。

正确地填写请求。最重要的行是请求共同名称(例如服务器FQDN或您的名称)。您需要输入您想要与服务器相关联的域名。

整个提示将看起来像这样的东西:

Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:New York City
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Bouncy Castles, Inc.
Organizational Unit Name (eg, section) []:Ministry of Water Slides
Common Name (e.g. server FQDN or YOUR name) []:your_domain.com
Email Address []:admin@your_domain.com

您创建的两个文件都将放置在 /etc/nginx/ssl 目录中。

步骤二:配置 Nginx 以使用 SSL

我们在 Nginx 配置目录下创建了我们的密钥和证书文件,现在我们只需要修改我们的 Nginx 配置以利用这些通过调整我们的服务器封锁文件。您可以在本文中了解更多关于 Nginx 服务器块

Nginx 版本 0.7.14 及以上版本(Ubuntu 14.04 和 1.4.6 版本)可以在同一服务器块内启用 SSL 作为常规 HTTP 流量,这使我们能够以更简洁的方式配置访问相同的网站。

您的服务器块可能看起来像这样的东西:

server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

        root /usr/share/nginx/html;
        index index.html index.htm;

        server_name your_domain.com;

        location / {
                try_files $uri $uri/ =404;
        }
}

我们需要做的唯一的事情是让SSL在同一个服务器块上工作,同时仍然允许正常的HTTP连接,就是添加以下几个行:

server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

        listen 443 ssl;

        root /usr/share/nginx/html;
        index index.html index.htm;

        server_name your_domain.com;
        ssl_certificate /etc/nginx/ssl/nginx.crt;
        ssl_certificate_key /etc/nginx/ssl/nginx.key;

        location / {
                try_files $uri $uri/ =404;
        }
}

完成后,保存并关闭文件。

现在,您只需要重新启动 Nginx 才能使用您的新设置:

1sudo service nginx restart

这应该重新加载您的网站配置,现在允许它响应HTTP和HTTPS(SSL)请求。

步骤三 - 测试您的设置

您的网站现在应该具有SSL功能,但我们应该测试它以确保。

首先,让我们测试,以确保我们仍然可以使用正常的HTTP访问网站. 在您的Web浏览器中,转到您的服务器的域名或IP地址:

http://server_domain_or_IP

在我的例子中,我只是在服务默认的 Nginx 页面:

Nginx non-SSL

如果您获取此页面,则您的服务器仍然正确处理 HTTP 请求。

现在,我们可以检查我们的服务器是否可以使用SSL进行通信,这样做是通过指定https协议而不是http协议。

https://server_domain_or_IP

您可能会在您的浏览器中收到一个警告,它看起来像这样:

Nginx SSL warning

它告诉你,它无法验证你试图连接的服务器的身份,因为它不是由证书授权机构签署的,浏览器已配置为信任。

点击继续,继续,或任何类似的选项,您应该再次看到您的网站:

Nginx SSL

您的浏览器可能会在地址栏中显示https,或者显示破碎或破碎的图标。如果您点击锁图标,您可以看到有关连接的更多信息:

Nginx SSL information

正如您所看到的,唯一的问题是浏览器无法验证服务器的身份,因为它不是由证书授权机构签署的,它已配置为信任。

结论

您已经配置了 Nginx 服务器来处理 HTTP 和 SSL 请求,这将有助于您安全地与客户端通信,并避免外部人员能够读取您的流量。

如果您计划在公共网站上使用SSL,您可能应该从可信的证书机构购买SSL证书,以防止给每个访问者显示可怕的警告。

By Justin Ellingwood
Published At
Categories with 技术
comments powered by Disqus