介绍
本教程展示了如何创建一个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 或主機名稱]
请参见下面的初步警告:
接受证书。
如果您正在使用Mozilla Firefox,请点击地址栏中的 https:// 前缀附近的锁。
在新窗口中,在安全
选项卡下,点击查看证书
选项卡。选择详细信息
选项卡。向下滚动,选择算法参数
选项框。在下面的字段值
文本区域中,您应该看到包含曲曲线 prime256v1**
的文本,表明ECC证书。
主题的公共密钥 字段将显示256位的公共密钥大小。
恭喜您!您的 Nginx 服务器现在已经配置了 ECC 私钥和证书!