BLOG
Enjoy when you can, and endure when you must.
MAR 26, 2016/平台与系统运维
SSL 进行时

为了与时俱进,这两天对网站开启了全站 SSL 的支持,大家可以尝试通过 https 访问本站。Https 的意图是在 Http 的基础上利用 SSL 达到:

  • 数据保密性:保证内容在传输过程中不会被第三方查看到。就像快递员传递包裹时都进行了封装,别人无法知道里面装了什么东西;
  • 数据完整性:及时发现被第三方篡改的传输内容。就像快递员虽然不知道包裹里装了什么东西,但他有可能中途掉包,数据完整性就是指如果被掉包,我们能轻松发现并拒收;
  • 身份校验:保证数据到达用户期望的目的地。就像我们邮寄包裹时,虽然是一个封装好的未掉包的包裹,但必须确定这个包裹不会送错地方。

简单来说就是在于提供更为安全的服务,有效保护用户隐私。是未来互联网的发展趋势。

 

关于证书

本站使用了 StartSSL 提供的 Class 1 级别的 SSL 证书。如果平时对 SSL 证书有所关注的话就知道 StartSSL 提供的该类型证书是免费的,并且有效期为 1 年。申请也相对简单,大致步骤为:

  1. 注册并登录(StartSSL 的登录采用证书登录);
  2. 认证域名;
  3. 申请证书(提交申请后可能需要等待人工审核);
  4. 获取证书。

 

Nginx 配置 SSL

要在 Nginx 中开启对 SSL 的支持,首先需要确保在安装编译时编译 SSL 模块,即“--with-http_ssl_module”参数,当然也要确保系统中安装了 openssl 和开发组件。之后即是在 Nginx 配置增加 SSL 的配置,大致如下:

server {
    listen       443;

    ...

    ssl on;
    ssl_certificate /path/to/your-cert.crt;
    ssl_certificate_key /path/to/your-cert.key;

     
    ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!AESGCM;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 5m;

    ...
}

listen 443:https 的默认端口为 443;

ssl on:开启 ssl;

ssl_certificate:证书;

ssl_certificate_key:证书对应的私钥;

ssl_session_timeout:支持的 SSL 协议标准;

ssl_ciphers:密钥交换算法;

ssl_prefer_server_ciphers:指定服务器密码算法在优先于客户端密码算法时,使用SSLv3和TLS协议;

ssl_session_cachessl_session_timeout:为 Session cache 相关配置。

 

关于 Certificate Transparency

传统的 SSL 认证身份的过程可能存在着受信任 CA 错误或某些不负责任行为、抑或是自身域名被别人冒充申请颁发证书的潜在危险,这是 SSL 认证环节中容易被利用的一环。由 Google 主导的 Certificate Transparency (CT)希望解决这些问题。任何证书持有人、CA 都可以向 CT 服务器提交证书,并接受审计和监控,使得当前的 CA 能够更加安全公开和透明。

值得一提的是,在 StartSSL 上最新获取的证书已经提交过了,无需再手动提交。

 

一个期待的结果

是的,如果重启 Nginx 后利用谷歌浏览器通过 https 访问这个链接看到这样的信息,说明基本的 https 配置已经成功了。

 

拓展阅读

最权威的官方文档

Nginx 配置 SSL 证书 + 搭建 HTTPS 网站教程

Nginx 为 HTTPS 加密站点启用 Certificate Transparency

COMMENTS
LEAVE COMMNT