前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Nginx上为Debian 8创建ECC证书

如何在Nginx上为Debian 8创建ECC证书

原创
作者头像
无敌小笼包
修改2018-09-26 09:55:47
1.2K0
修改2018-09-26 09:55:47
举报

介绍

本文介绍如何为Nginx创建椭圆曲线加密(ECC)SSL证书。在本教程结束时,您将有一个更快的加密机制供生产使用。

传统的公钥加密依赖于几乎不可能分解大整数。另一方面,ECC依赖于将随机椭圆曲线解析为离散对数函数的不可能性,这个问题被称为“椭圆曲线离散对数问题”或ECDLP。简而言之,ECC提供具有类似安全性的较小密钥,这反过来转化为更高的加密性能,适用于SSL等数字签名。

本教程和所有ECC证书都依赖于椭圆曲线协议,该协议可以有多种形式。美国国家标准与技术研究院(NIST)Suite B规定了两种可能使用的椭圆曲线,P-256和P-384,也称为prime256v1和secp384r1。为简单起见,我们将使用前者,prime256v1,因为它简单但实用。

要完成本教程,您需要具备一台已经设置好可以使用sudo命令的非root账号的Debian服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器

准备

要学习本教程,您需要:

  • 一个新安装的Debian 8.1 腾讯云CVM
  • 一个可以使用sudo权限的非root用户,您可以按照本教程的第 2步和第3步进行设置
  • OpenSSL已安装并更新

要进行测试,您需要安装和更新OpenSSL的两个系统之一:

  • 另一个Linux 腾讯云CVM
  • 基于Linux的本地系统(Mac,Ubuntu,Debian等)

第1步 - 安装Nginx

在此步骤中,我们将使用一个名为apt-get的内置包安装程序。它大大简化了管理并简化了安装。

您应该已经更新了apt-get并安装了sudo软件包,与其他Linux发行版不同,Debian 8没有安装sudo

Nginx是前面提到的HTTP服务器,专注于处理内存使用率低的大型负载。要安装它,请运行以下命令:

代码语言:javascript
复制
sudo apt-get install nginx

第2步 - 创建目录

这部分简单而简短。我们需要将私钥和证书存储在一个容易记忆的位置,因此我们需要创建一个新目录。

代码语言:javascript
复制
sudo mkdir /etc/nginx/ssl

第3步 - 创建自签名ECC证书

在本节中,我们将申请新证书并签名。

首先,使用OpenSSL 的ecparam工具生成ECC私钥。

  • out标志将输出定向到文件。在本教程中,我们将在/etc/nginx/ssl/nginx.key中保存密钥。
  • name标志标识椭圆曲线prime256v1
代码语言:javascript
复制
sudo openssl ecparam -out /etc/nginx/ssl/nginx.key -name prime256v1 -genkey

然后,生成证书签名请求。

  • key标志指定在上一个命令中生成的密钥的路径。
  • out标志指定生成的证书的路径。
代码语言:javascript
复制
sudo openssl req -new -key /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/csr.pem

调用此命令将导致一系列提示。

  • 通用名称:指定服务器的IP地址或主机名。
  • 挑战密码提供密码
  • 根据您的判断填写所有其他字段。点击ENTER来接受默认值。
代码语言:javascript
复制
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 []: webmaster@example.com
?
Please enter the following 'extra' attributes to be sent with your certificate request
A challenge password []:
An optional company name []:

最后,自我签署证书。然后,客户端使用该证书来加密仅服务器可以读取的数据。

  • x509 是用于生成证书的OpenSSL工具。
  • days标志指定证书应保持有效的时间。在此示例中,证书将持续一年。
  • in 指定我们以前生成的证书请求。
代码语言:javascript
复制
sudo openssl req -x509 -nodes -days 365 -key /etc/nginx/ssl/nginx.key -in /etc/nginx/ssl/csr.pem -out /etc/nginx/ssl/nginx.pem

设置文件权限以保护您的私钥和证书。

代码语言:javascript
复制
sudo chmod 600 /etc/nginx/ssl/*

您的证书和保护它的私钥现在可以进行设置了。

第4步 - 设置证书

在本节中,我们将使用密钥和证书配置Nginx虚拟主机。实际上,我们的服务器将开始提供HTTPS而不是HTTP请求。

使用nano或您喜欢的文本编辑器打开服务器配置文件。

代码语言:javascript
复制
sudo nano /etc/nginx/sites-enabled/default

在配置文件的顶部,您将找到一段代码,类似于以下内容:

代码语言:javascript
复制
...
# Default server configuration
#
server {
...
}

接下来的几个编辑将在server块内进行。

  1. 首先,通过在行前面加一个井号来注释掉server块的前两行:
代码语言:javascript
复制
server {
    # listen 80 default_server;
    # listen [::]:80 default_server;
  1. 然后,通过删除井号来取消注释SSL Configuration下面的第一行listen。缩进正确,也删除ssl default_server
代码语言:javascript
复制
    # SSL Configuration
    #
    listen 443;
    # listen [::]:443 ssl default_server;
    #
  1. 直接在注释块下面更新根目录。原来的读取server_name _;。更改它以包括您的服务器IP,以便它读取server_name your_server_ip
  2. server_name之后,添加您的SSL密钥和证书路径。
代码语言:javascript
复制
        ssl on;
        ssl_certificate /etc/nginx/ssl/nginx.pem;
        ssl_certificate_key /etc/nginx/ssl/nginx.key;
  1. 最后,添加SSL设置。
代码语言:javascript
复制
        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;

您的最终结果应与以下内容相同。

代码语言:javascript
复制
# Default server configuration
#
server {
        # listen 80 default_server;
        # listen [::]:80 default_server;
?
        # SSL configuration
        #
        listen 443;
        # listen [::]:443 ssl default_server;
        #
        # Self signed certs generated by the ssl-cert package
        # Don't use them in a production server!
        #
        # include snippets/snakeoil.conf;
?
        root /var/www/html;
?
        # Add index.php to the list if you are using PHP
        index index.html index.htm index.nginx-debian.html;
?
        server_name your_server_ip;
?
        ssl on;
       ssl_certificate /etc/nginx/ssl/nginx.pem;
       ssl_certificate_key /etc/nginx/ssl/nginx.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 / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

完成这些更改后,保存并退出文件。

重新启动Nginx以应用更改。

代码语言:javascript
复制
sudo service nginx restart

第5步 - 使用ECC测试Nginx

在本节中,我们将通过命令行测试服务器。再一次,这可以在(1)本地基于Linux的系统或(2)另一个腾讯云CVM 上完成。您也可以从同一个shell窗口运行此命令,但您可能需要更加可靠的成功证明。

通过HTTPS 443端口打开连接。

代码语言:javascript
复制
openssl s_client -connect your_server_ip:443

在键输出后滚动到输出的中间,您应该找到以下内容:

代码语言:javascript
复制
---
SSL handshake has read 3999 bytes and written 444 bytes
---
...
SSL-Session:
...

当然,数字和示例不一样也是成功的。恭喜!

CTRL+C退出。

您还可以使用URL(https://example.com)中的HTTPS在Web浏览器中访问您的站点。您的浏览器会警告您证书是自签名的。您应该能够查看证书并确认详细信息与您在步骤4中输入的内容相匹配。

结论

这是我们的教程的结束,让您使用一个有效的Nginx服务器,使用ECC证书进行安全配置。

想要了解更多关于创建ECC证书的相关教程,请前往腾讯云+社区学习更多知识。


参考文献:《How To Create an ECC Certificate on Nginx for Debian 8》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 准备
  • 第1步 - 安装Nginx
  • 第2步 - 创建目录
  • 第3步 - 创建自签名ECC证书
  • 第4步 - 设置证书
  • 第5步 - 使用ECC测试Nginx
  • 结论
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com