介绍
TLS或传输层安全,它的前身SSL,它代表安全套接字层,是Web协议用来包裹在一个受保护,加密封装正常通行。
使用此技术,服务器可以在服务器和客户端之间安全地发送流量,而不用担心消息将被外部方拦截和读取。 证书系统还帮助用户验证他们正在连接的站点的身份。
在本指南中,我们将向您展示如何设置一个自签名的SSL证书,以便与Ubuntu 14.04服务器上的Nginx Web服务器配合使用。 自签名的证书将无法验证服务器的身份为您的用户,因为它不是由他们的Web浏览器的受信任的证书颁发机构之一签名,但它可以让你的通信与Web客户端进行加密。
注意:您可能需要考虑使用我们的加密,而不是自签名证书。 Let's Encrypt是一个新的证书颁发机构,颁发在大多数Web浏览器中受信任的免费SSL / TLS证书。 退房的教程开始: 如何在Ubuntu 14.04与咱们加密安全的Nginx
先决条件
要开始使用本指南,您需要在服务器上设置一些基本功能。
你应该谁拥有可用非root用户sudo
权限。 你可以学习如何按照1-4步我们建立这样一个用户帐户初始服务器设置为Ubuntu 14.04 。
之后,您还需要安装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
部分告诉它做的RSA密钥是2048位。 - -keyout:这行告诉OpenSSL的在什么地方,我们正在创建的生成私钥文件。
- 退房手续 :这告诉OpenSSL的在什么地方,我们正在创建的证书。
如上所述,这些选项将创建密钥文件和证书。 我们将被问到关于我们的服务器的几个问题,以便将信息正确地嵌入到证书中。
适当填写提示。 最重要的线是要求一个Common Name (eg server FQDN or YOUR name)
。 您需要输入要与服务器关联的域名。 如果您没有域名,可以输入公共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)可以在与常规HTTP流量相同的服务器块中启用SSL。 这允许我们以更简洁的方式配置对同一网站的访问。
您的服务器块可能看起来像这样:
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使用您的新设置:
sudo service nginx restart
这应该重新载入您的网站配置,现在允许它响应HTTP和HTTPS(SSL)请求。
第三步 - 测试您的设置
您的网站现在应该具有SSL功能,但我们应该测试它以确保。
首先,让我们测试,以确保我们仍然可以使用正常的HTTP访问该网站。 在网络浏览器中,转到您服务器的域名或IP地址:
http://server_domain_or_IP
你应该看到你的正常网站。 在我的例子中,我只是服务默认Nginx页面:
如果您得到此页面,那么您的服务器仍然正确地处理HTTP请求。
现在,我们可以检查我们的服务器是否可以使用SSL进行通信。 通过指定执行此https
协议而不是http
协议。
https://server_domain_or_IP
您可能会在您的Web浏览器中看到如下所示的警告:
这是预期。 它告诉您,它无法验证您尝试连接的服务器的身份,因为它不是由浏览器已配置为信任的证书颁发机构签名。 因为我们创建了一个自签名证书,这是完全有道理的。
单击“仍然继续”,“继续”或任何类似选项可用。 您应该再次看到您的网站:
您的浏览器可能会在地址栏中显示“https”,或者显示破损或划掉的“锁定”图标。 如果您点击锁定图标,您可以看到有关连接的一些更多信息:
如您所见,问题仅在于浏览器无法验证服务器的身份,因为它未由其配置为信任的证书颁发机构签名。 中间部分显示连接是加密的,但是,所以我们已经实现了这个目标。
结论
您已将Nginx服务器配置为处理HTTP和SSL请求。 这将有助于您安全地与客户沟通,避免外部人士阅读您的流量。
如果您计划在公共网站上使用SSL,则应该从可信的证书颁发机构购买SSL证书,以防止向每个访问者显示可怕的警告。