介绍
本教程演示如何创建一个椭圆曲线加密(ECC)公共和私有密钥对供Nginx(高性能HTTP服务器)使用。 ECC密钥提供了优于传统RSA密钥的一些优点。 ECC密钥提供等效于较大RSA密钥的安全性,同时尺寸较小,减少了服务器上所需的资源,并为移动设备提供了更快的性能。
ECC的使用可以提高流媒体,VPN连接或其他高带宽应用的性能。 证书颁发机构(CA),如赛门铁克已经开始提供ECC或E llipticçurveÇryptography证书。 如果您在使用前向保密或完全前向保密之前连接到网站,则您已使用椭圆曲线加密! 本指南详细说明需要部署一个DebianWheezy系统上的自签名的ECC私钥和公钥与Nginx的步骤,使用prime256v1曲线。
注意:有很多种,你可以使用不同的曲线。 我们使用prime256v1曲线是为了保持这篇文章的简单。
要求
- 在Debian 7.0WheezyDroplet。
- OpenSSL已安装和更新。
跑:
apt-get update && apt-get upgrade
更新后,这是一个好主意,重新启动您的Droplet。
- 新型浏览器:Internet Explorer 7+(Windows Vista,Windows 7),Firefox 19+(Linux,Mac,Windows)或Chrome 25+(Android,Linux,Mac,Windows)。 我们将在本教程中使用Firefox进行测试。
以下所有命令都应以root用户身份执行。
第1步:安装Nginx
使用apt-get软件包管理器安装Nginx。 Nginx是一个高性能的HTTP服务器,可以处理大量的并发请求,而不会在Droplet上占用大量的内存。 需要安装其他软件包。 要接受安装,输入Y,然后按Enter键。
apt-get install nginx
第2步:生成并签署ECC私钥
创建一个目录来存储私钥,证书签名请求和服务器证书。 我建议创建目录/etc/nginx/ssl
。 然后移动到目录。
mkdir /etc/nginx/ssl
cd /etc/nginx/ssl
生成使用OpenSSL的ecparam工具的ECC私钥。 此命令生成使用prime256v1 ECC曲线的256位密钥,并保存一个文件名为里面的关键privatekey.key
。 该256位密钥等价于2048位RSA私钥。
openssl ecparam -out privatekey.key -name prime256v1 -genkey
使用OpenSSL生成证书签名请求。
openssl req -new -key privatekey.key -out csr.pem
运行此命令后,您将看到几个问题。 对于通用名称的提示时,请确保输入服务器的IP地址或主机名。 不提供密码的挑战。 所有其他字段可能填充您认为合适的信息。
You are about to be asked to enter information that will be incorporated into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:New York
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Digital Ocean Tutorial
Organizational Unit Name (eg, section) []:ECC Certificate Test
Common Name (e.g. server FQDN or YOUR name) []:example.com
Email Address []:
Please enter the following 'extra' attributes to be sent with your certificate request
A challenge password []:
An optional company name []:
注意:此时您可以提交您的证书进行签名的权威。 按照您选择的CA提供的说明进行操作。 赛门铁克目前提供ECC证书,并且更多的证书颁发机构预计将来提供ECC证书。 出于本指南的目的,将创建自签名证书。
创建证书或公钥。 客户端使用该证书加密只有服务器可以读取的数据。 OpenSSL x509工具用于使用证书签名请求(CSR)创建自签名证书。 如果你想在证书有效期为一段较长的时间,你可以在更改-days
值从365到3650,创建有效期为10年的证书。
openssl req -x509 -days 365 -key privatekey.key -in csr.pem -out certificate.pem
设置文件权限,以便其他用户无法访问您的私钥和证书。
chmod 600 /etc/nginx/ssl/*
第3步:使用ECC密钥和证书配置Nginx
使用您选择的文本编辑器打开默认的Nginx虚拟主机配置。 默认情况下,Nginx包配置文件设置为仅提供HTTP请求。 现在我们将配置Nginx来服务HTTPS请求。
vi /etc/nginx/sites-enabled/default
近Nginx的默认虚拟主机配置文件的底部是具有行HTTPS服务器配置示例listen 443;
上方附近。 取消注释行并更新您的HTTPS服务器块以匹配如下所示的示例。 你会编辑大多数的行,所以要注意!
更改值时,请确保在每行末尾留下分号(;)。
#HTTPS server
#
server {
listen 443;
server_name Your IP Address or Hostname;
#
root /usr/share/nginx/www;
index index.html index.htm;
#
ssl on;
ssl_certificate /etc/nginx/ssl/certificate.pem;
ssl_certificate_key /etc/nginx/ssl/privatekey.key;
#
ssl_session_timeout 5m;
#
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH+kEECDH+AESGCM:HIGH+kEECDH:HIGH+kEDH:HIGH:!aNULL;
ssl_prefer_server_ciphers on;
#
location / {
try_files $uri $uri/ =404;
}
}
一旦您的HTTPS服务器块匹配上面的示例,保存您的更改。
请注意,根据云Droplet的现有配置,可能需要对HTTPS服务器块进行其他更改。 例如,如果您的云服务器运行PHP,您将需要复制您添加到HTTP块的行,以便将PHP支持到HTTPS块中。
重新启动Nginx以应用更改。
service nginx restart
第4步:用ECC测试Nginx
我们将使用Firefox进行测试,但任何现代网络浏览器都可以访问您的网站并使用ECC加密。
使用Firefox浏览到云服务器的IP地址或主机名。 接受自签名证书警告后,您应该看到“欢迎使用nginx!”页面。 您将收到证书警告,因为服务器的证书已经自签名,并且没有被Web浏览器识别的证书颁发机构签名。
请参阅下面的初始警告:
接受证书。
如果您在使用Mozilla Firefox浏览器,点击HTTPS附近的挂锁://前缀在地址栏。 将显示连接信息窗口。
点击更多信息...按钮。 在新窗口中的安全选项卡下,点击查看证书按钮。 选择详细信息选项卡。 向下滚动并选择算法参数字段。 在下面的字段值文本区域,你应该看到的文本,包括椭圆曲线prime256v1,这表明一个ECC证书。
主题的公共密钥字段将显示256位的公开密钥大小。
恭喜! 您的Nginx服务器现在配置了一个ECC私钥和证书!