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

简介: 如何在 Ubuntu 14.04 上为 Nginx 创建 SSL 证书

介绍

TLS,即传输层安全性,及其前身SSL,即安全套接字层,是用于将普通流量包装在受保护的加密包装中的网络协议。

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

在本指南中,我们将向您展示如何为 Ubuntu 14.04 服务器上的 Nginx Web 服务器设置自签名 SSL 证书。自签名证书将不会为您的用户验证服务器的身份,因为它没有由其 Web 浏览器信任的证书颁发机构签名,但它允许您与 Web 客户端加密通信。

先决条件

要开始本指南,您需要在服务器上设置一些基本内容。

您应该有一个具有sudo权限的非根用户。您可以按照我们的 Ubuntu 14.04 初始服务器设置中的步骤 1-4 来了解如何设置此类用户帐户。

之后,您还需要安装 Nginx Web 服务器。如果您想在服务器上安装完整的 LEMP(Linux、Nginx、MySQL、PHP)堆栈,可以按照我们的 Ubuntu 14.04 上设置 LEMP 的指南进行操作。

如果您只想要 Nginx Web 服务器,您可以输入以下命令:

sudo apt-get update
sudo apt-get install nginx

步骤一 — 创建 SSL 证书

我们可以开始创建一个目录,用于保存所有 SSL 信息。我们应该在 Nginx 配置目录下创建此目录:

sudo mkdir /etc/nginx/ssl

现在我们有了一个放置文件的位置,我们可以通过输入以下命令一次性创建 SSL 密钥和证书文件:

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

您将被要求回答一系列问题。在我们讨论这些问题之前,让我们看看我们正在发出的命令中发生了什么:

  • openssl:这是用于创建和管理 OpenSSL 证书、密钥和其他文件的基本命令行工具。
  • req:此子命令指定我们要使用 X.509 证书签名请求(CSR)管理。“X.509” 是 SSL 和 TLS 遵循的用于其密钥和证书管理的公钥基础设施标准。我们要创建一个新的 X.509 证书,因此我们正在使用此子命令。
  • -x509:这通过告诉实用程序我们要创建自签名证书,而不是生成证书签名请求,进一步修改了前一个子命令。
  • -nodes:这告诉 OpenSSL 跳过使用密码短语保护我们的证书的选项。我们需要 Nginx 能够在服务器启动时读取文件,而无需用户干预。密码短语会阻止这种情况发生,因为我们每次重新启动后都需要输入密码。
  • -days 365:此选项设置证书被视为有效的时间长度。我们在这里设置为一年。
  • -newkey rsa:2048:这指定我们要同时生成新证书和新密钥。我们没有在之前的步骤中创建用于签署证书的密钥,因此我们需要同时创建它和证书。rsa:2048 部分告诉它生成一个长度为 2048 位的 RSA 密钥。
  • -keyout:此行告诉 OpenSSL 在哪里放置我们正在创建的生成私钥文件。
  • -out:这告诉 OpenSSL 在哪里放置我们正在创建的证书。

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

适当填写提示。最重要的一行是要求“通用名称(例如服务器 FQDN 或您的名称)”。您需要输入要与您的服务器关联的域名。如果您没有域名,也可以输入公共 IP 地址。

提示的全部内容将如下所示:

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;
        <span class="highlight">listen 443 ssl;</span>
        root /usr/share/nginx/html;
        index index.html index.htm;
        server_name <span class="highlight">your_domain.com</span>;
        <span class="highlight">ssl_certificate /etc/nginx/ssl/nginx.crt;</span>
        <span class="highlight">ssl_certificate_key /etc/nginx/ssl/nginx.key;</span>
        location / {
                try_files $uri $uri/ =404;
        }
}

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

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

sudo service nginx restart

这将重新加载您的站点配置,现在可以响应 HTTP 和 HTTPS(SSL)请求。

第三步 — 测试您的设置

您的站点现在应该具有 SSL 功能,但我们应该进行测试以确保其正常工作。

首先,让我们测试一下是否仍然可以使用常规 HTTP 访问站点。在您的网络浏览器中,输入服务器的域名或 IP 地址:

<span class="highlight">http</span>://<span class="highlight">server_domain_or_IP</span>

您应该看到您的常规网站。在我的例子中,我只是提供默认的 Nginx 页面:

!Nginx non-SSL

如果您看到这个页面,那么您的服务器仍然可以正确处理 HTTP 请求。

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

<span class="highlight">https</span>://<span class="highlight">server_domain_or_IP</span>

您可能会在网络浏览器中收到一个警告,类似于这样:

!Nginx SSL warning

这是正常的。它告诉您它无法验证您尝试连接的服务器的身份,因为它没有由浏览器配置为信任的证书颁发机构签署。由于我们创建了自签名证书,这是合理的。

点击“仍然继续”、“继续”或类似的选项。您应该再次看到您的站点:

!Nginx SSL

您的浏览器可能会在地址栏中将“https”划掉,或者显示一个破折号或划掉的“锁”图标。如果您点击锁图标,您可以查看有关连接的更多信息:

!Nginx SSL information

正如您所看到的,问题仅在于浏览器无法验证服务器的身份,因为它没有由其配置为信任的证书颁发机构签署。然而,中间部分显示连接是加密的,所以我们已经实现了这个目标。

结论

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

如果您计划在公共网站上使用 SSL,您可能应该从受信任的证书颁发机构购买 SSL 证书,以防止每个访问者都看到令人恐慌的警告。


目录
相关文章
|
30天前
|
应用服务中间件 Linux 网络安全
如何在 CentOS 7 上为 Nginx 创建自签名 SSL 证书
如何在 CentOS 7 上为 Nginx 创建自签名 SSL 证书
97 1
|
30天前
|
jenkins 应用服务中间件 持续交付
如何配置 Nginx 作为 Jenkins 的反向代理并启用 SSL 加密
如何配置 Nginx 作为 Jenkins 的反向代理并启用 SSL 加密
50 8
|
30天前
|
负载均衡 前端开发 应用服务中间件
使用Nginx配置SSL以及部署前端项目
本文介绍了如何使用Nginx配置SSL证书以启用HTTPS,并展示了如何通过Nginx部署前端项目,包括配置SSL证书、设置代理和负载均衡的示例。
68 2
|
30天前
|
关系型数据库 应用服务中间件 PHP
如何在 Ubuntu 16.04 上使用 Nginx 部署 Laravel 应用
如何在 Ubuntu 16.04 上使用 Nginx 部署 Laravel 应用
18 1
|
30天前
|
缓存 Ubuntu 前端开发
在Ubuntu上手动与自动启动Nginx的踩坑经历、以及重启服务
本文分享了作者在Ubuntu系统上手动和自动启动Nginx服务的踩坑经历,包括创建启动脚本、解决依赖问题、配置服务自动启动以及通过命令行管理Nginx服务的方法。
146 0
在Ubuntu上手动与自动启动Nginx的踩坑经历、以及重启服务
|
30天前
|
关系型数据库 MySQL 应用服务中间件
在Ubuntu 16.04上使用Nginx安装和保护phpMyAdmin的方法
在Ubuntu 16.04上使用Nginx安装和保护phpMyAdmin的方法
18 0
|
30天前
|
关系型数据库 Linux 应用服务中间件
如何在 Ubuntu 14.04 服务器上使用 Nginx 安装和保护 phpMyAdmin
如何在 Ubuntu 14.04 服务器上使用 Nginx 安装和保护 phpMyAdmin
14 0
|
30天前
|
Ubuntu 应用服务中间件 nginx
在Ubuntu上离线安装Nginx的踩坑经历
本文记录了作者在Ubuntu系统上离线安装Nginx的详细过程,包括下载、配置、解决依赖问题、编译和安装步骤,以及在安装过程中遇到的PCRE库依赖问题和解决方案。
118 0
|
30天前
|
Ubuntu 应用服务中间件 Linux
如何在Ubuntu 14.04上使用Nginx和Php-fpm安全地托管多个网站
如何在Ubuntu 14.04上使用Nginx和Php-fpm安全地托管多个网站
13 0
|
30天前
|
缓存 Ubuntu 应用服务中间件
如何在 Ubuntu 14.04 上使用 Passenger 和 Nginx 部署 Rails 应用
如何在 Ubuntu 14.04 上使用 Passenger 和 Nginx 部署 Rails 应用
12 0