如何在 Debian 7 的 Nginx 上创建 ECC 证书

介绍

本教程展示了如何创建一个Eliptic Curve Cryptography(ECC)公钥和私钥对,用于高性能的HTTP服务器NGINX。ECC密钥比传统的RSA密钥提供了几个优点。ECC密钥提供与较大的RSA密钥相等的安全性,同时规模较小,减少服务器上所需的资源,并为移动设备提供更快的性能。

使用ECC可以改善流媒体,VPN连接或其他高带宽应用的性能. Symantec等证书当局已开始提供ECC或E lliptic** C** urve** C** 加密证书。 如果您在使用前向密闭或完美前向密闭之前已经连接到一个网站, 您已经使用椭圆曲线加密 ! 本指南详细介绍了在Debian Wheezy系统上使用** prime256v1** 曲线部署自签名的ECC私人密钥和带有Nginx的公共证书所必须采取的步骤.

** 注: ** 您可以使用各种不同的曲线,我们正在使用 prime256v1曲线,以保持本文的简单性。

要求

*Debian 7.0 Wheezy * OpenSSL 已安装和更新。

跑步:

1apt-get update && apt-get upgrade

更新后,重新启动您的 Droplet 是一个好主意。

  • 现代浏览器:Internet Explorer 7+(Windows Vista,Windows 7),Firefox 19+(Linux,Mac,Windows)或Chrome 25+(Android,Linux,Mac,Windows)。

**下面的所有命令都应该作为 root 用户执行。

第1步:安装 Nginx

使用 apt-get 包管理器安装 Nginx. Nginx 是一个高性能的 HTTP 服务器,可以处理大量的同时请求,而不会在您的 Droplet 上消耗大量的内存。 需要安装额外的包。 若要接受安装,请输入 Y ,然后按 ** Enter** 键。

1apt-get install nginx

步骤2:生成并签署ECC私钥

创建一个目录来存储私钥、证书签名请求和服务器证书. 我建议创建目录 /etc/nginx/ssl

1mkdir /etc/nginx/ssl
2cd /etc/nginx/ssl

使用 OpenSSL 的 **ecparam ** 工具生成 ECC 私钥. 此命令使用 prime256v1 ECC 曲线生成 256 位私钥,并将该密钥保存到名为 privatekey.key 的文件中。

1openssl ecparam -out privatekey.key -name prime256v1 -genkey

使用 OpenSSL 生成证书签名请求。

1openssl req -new -key privatekey.key -out csr.pem

运行此命令后,您将收到几个问题。对于 Common Name 提示,请确保输入您的服务器的IP地址或主机名称。Do ** not** 提供挑战密码。

 1You are about to be asked to enter information that will be incorporated into your certificate request.
 2What you are about to enter is what is called a Distinguished Name or a DN.
 3There are quite a few fields but you can leave some blank
 4For some fields there will be a default value,
 5If you enter '.', the field will be left blank.
 6-----
 7Country Name (2 letter code) [AU]:US
 8State or Province Name (full name) [Some-State]:New York
 9Locality Name (eg, city) []:New York
10Organization Name (eg, company) [Internet Widgits Pty Ltd]:Digital Ocean Tutorial
11Organizational Unit Name (eg, section) []:ECC Certificate Test
12Common Name (e.g. server FQDN or YOUR name) []:example.com
13Email Address []:
14
15Please enter the following 'extra' attributes to be sent with your certificate request
16A challenge password []:
17An optional company name []:

** 注意:** 此时您可以将证书提交署名机构。 按照您所选择的 CA 提供的指示,Symantec 目前正在提供 ECC 证书,预计更多证书管理机构将在未来提供 ECC 证书。

创建证书或公共密钥. 该证书由客户端使用来加密只有服务器才能读取的数据. OpenSSL x509 工具用于使用证书签名请求(CSR)创建自签证证书。

1openssl req -x509 -days 365 -key privatekey.key -in csr.pem -out certificate.pem

设置文件权限,以便其他用户无法访问您的私钥和证书。

1chmod 600 /etc/nginx/ssl/*

步骤 3:使用 ECC 密钥和证书配置 Nginx

使用您选择的文本编辑器打开默认的 Nginx 虚拟主机配置。默认情况下, Nginx 包配置文件设置为仅服务 HTTP 请求。

1vi /etc/nginx/sites-enabled/default

在 Nginx 默认虚拟主机配置文件的底部,有一个 HTTPS 服务器的样本配置,上面有Listen 443; 行,接近顶部。

**在更改值时,请确保在每个行末尾留下半色(;)。

 1#HTTPS server
 2#
 3server {
 4    listen 443;
 5    server_name Your IP Address or Hostname;
 6#
 7    root /usr/share/nginx/www;
 8    index index.html index.htm;
 9#
10    ssl on;
11    ssl_certificate /etc/nginx/ssl/certificate.pem;
12    ssl_certificate_key /etc/nginx/ssl/privatekey.key;
13#
14    ssl_session_timeout 5m;
15#
16    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
17    ssl_ciphers HIGH+kEECDH+AESGCM:HIGH+kEECDH:HIGH+kEDH:HIGH:!aNULL;
18    ssl_prefer_server_ciphers on;
19#
20    location / {
21    	try_files $uri $uri/ =404;
22    }
23}

一旦您的 HTTPS 服务器封锁匹配上面的示例,保存您的更改。

请注意,您可能需要对 HTTPS 服务器块进行额外的更改,这取决于您的云 Droplet 的现有配置,例如,如果您的云服务器运行的是 PHP,则您需要将您添加到 HTTP 区块中的行复制到您的 HTTPS 区块中以支持 PHP。

重新启动 Nginx 以应用更改。

1service nginx restart

步骤 4:测试 Nginx 与 ECC 我们将使用 Firefox 进行测试,尽管任何现代的 Web 浏览器都将用于访问您的网站并使用 ECC 加密。

使用 Firefox 浏览您的云服务器的 IP 地址或主机名称. 接受自签证证书警告后,您应该看到欢迎来到 nginx!页面。

[https://IP 或主機名稱]

请参见下面的初步警告:

Firefox Certificate Information

接受证书。

如果您正在使用Mozilla Firefox,请点击地址栏中的 https:// 前缀附近的锁。

Firefox Connection Information

在新窗口中,在安全选项卡下,点击查看证书选项卡。选择详细信息选项卡。向下滚动,选择算法参数选项框。在下面的字段值文本区域中,您应该看到包含曲曲线 prime256v1**的文本,表明ECC证书。

Firefox Certificate Viewer

主题的公共密钥 字段将显示256位的公共密钥大小。

Firefox Certificate Viewer

恭喜您!您的 Nginx 服务器现在已经配置了 ECC 私钥和证书!

Published At
Categories with 技术
comments powered by Disqus