预备知识: 

1.什么是https, 相对于https有什么优势/劣势?

2.升级https需要准备的文件? 如何升级? 

3.ssl证书类型?  (EV/OV/通配符证书....)

4.如何选择ssl证书? 如何选择供应商?  (推荐一家:godaddy比较便宜,Versign/GlobalSign等都比较偏贵)

5.如何免费获取信任的ssl证书?


    如果对以上几点还不熟悉的同学可以先去了解以下,本文主要讲解第五点如何获取到免费的被信任的SSL证书。 什么时候可以考虑到使用免费的证书。 例如:你开发了一个app里面将要传输一些敏感信息,例如:用户姓名/联系方式等等。为了保护用户的数据不被泄漏就需要加上加密功能。 但是对于已经release的客户端我们不可能要求客户端升级,也就是老的客户端依然使用的是http协议和老的客户端程序。 如何保证用户透明的情况下加密用户数据呢? 自然我们想到了https,那好既然需要部署https证书如何来呢?  你也可以自签名一个证书, 但是自签名的证书对于已经发出去的app会认为是不合法的CA导致错误。 所以,咱们必须搞到一个被信任的CA中心颁发的证书。 根据个人经验目前有如下几种方式:


方式一: 到沃通网站上申请免费的SSL证书。 (最近关闭了,可能几个月后会开放)

方式二: 到各大供应商去申请试用的证书(解决紧急情况),一般有效期是7天或者是30天,RapidSSL是30天。

方式三: 还是开源的力量大, 使用"Let's Encrypt"提供的证书。


接下来, 重点介绍一下如何使用"Let's Encrypt"生成和renewal证书。"Let's Encrypt"是一家非营利的由各大知名网络和互联网公司赞助的一个提供免费证书的机构(https://letsencrypt.org/)。 有Akami/CISCO/Chrom...大家还是可以放心使用。 但是,该机构提供的证书有效期只有三个月也就是90天,所以90之后需要更新证书。


好,进入主题下面给大家演示以下如何在Nginx on Debian 7下生成SSL证书:需要准备好nginx和


1. 准备好一个nginx服务器。大家可以自行去下载和安装nginx。在编译nginx的时候注意加上http ssl模块。 具体命令可以参考:

./configure --prefix=/data/server/nginx/nginx1.7/  
--with-pcre=/data/server/nginx/source/pcre-8.35/ 
--with-zlib=/data/server/nginx/source/zlib-1.2.8/ 
--with-http_ssl_module 
--with-http_realip_module 
--with-select_module 
--with-poll_module 
--add-module=/data/server/nginx/source/nginx_accept_language_module-master


2.下载安装客户端

wget https://dl.eff.org/certbot-autochmod a+x certbot-auto


3.准备好依赖包 (最好使用:ubuntu14.04以上的)

./certbot-auto


4.生成证书

      4.1.因为大多数情况Nginx都是作为一个负载均衡的作用在前端,后端放的业务服务。certbot需要在域名对应的webroot下面创建.well-known/acme-challenge文件。 所以,如果对于目前情况。我做了一个映射把这个路径映射到了nginx的一个目录下面。

location ~ /.well-known {access_log  logs/eapa_access.log  main;root html;index index.html index.htm;}


        4.2.生成证书,使用./certbot-auto certonly命令生成证书。参数说明: -w 指定webroot(即:4.1中配置的root目录), -d 指定域名,可以是多个。  -w -d 是成对出现,也可以一次生成多个证书。下面我们为eapa.test.com生成一个证书,该项目的路径为:/data/server/nginx/nginx1.7/html。

./certbot-auto certonly-w /data/server/nginx/nginx1.7/html-d eapa.test.com

     命令执行成功以后证书就放在了:/etc/letsencrypt/live/eapa.test.com/下面,可以看到如下几个文件:

lrwxrwxrwx 1 root root 42 Nov 30 05:16 cert.pem  (证书文件)
lrwxrwxrwx 1 root root 43 Nov 30 05:16 chain.pem
lrwxrwxrwx 1 root root 47 Nov 30 05:16 fullchain.pem
lrwxrwxrwx 1 root root 45 Nov 30 05:16 privkey.pem (免密钥的私钥)


4.3安装证书到nginx服务器就很简单了,下面贴出来了源代码

server {listen   443 ssl;server_name  eapa.test.com;ssl_certificate      /data/server/nginx/nginx1.7/ssl/cert.pem;ssl_certificate_key  /data/server/nginx/nginx1.7/ssl/privkey.pem;ssl_session_cache    shared:SSL:1m;ssl_session_timeout  5m;ssl_ciphers  HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers  on;location ~ /.well-known {access_log  logs/eapa_access.log  main;root html;index index.html index.htm;}location ~ / {access_log  logs/eapa_access.log  main;root   html;index  index.html index.htm;proxy_set_header  Host $host;proxy_set_header   X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header    X-Scheme $scheme;client_max_body_size    10m;client_body_buffer_size 128k;proxy_connect_timeout   300;proxy_send_timeout      300;proxy_read_timeout      300;proxy_buffer_size       4k;proxy_buffers           4 32k;proxy_busy_buffers_size 64k;proxy_temp_file_write_size 64k;proxy_pass http://eapa;proxy_redirect http:// $scheme://; //(解决:springmvc redirect后https变成http)}


访问:https://eapa.test.com就可以看到成功了.  (注意: 该域名是假域名)


最后, 因为证书有效期三个月, 你可以手动或者写个cron自动更新证书通过下面命令:

[yi_liu@tclserver- ssl]$ ./certbot-auto renew
Requesting root privileges to run certbot.../home/yi_liu/.local/share/letsencrypt/bin/letsencrypt renew
Saving debug log to /var/log/letsencrypt/letsencrypt.log-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/eapa.test.com.conf
-------------------------------------------------------------------------------
Cert not yet due for renewalThe following certs are not due for renewal yet:/etc/letsencrypt/live/eapa.test.com/fullchain.pem (skipped)
No renewals were attempted.


效果如下图:

wKiom1g-ibGgcqqoAACBwwgvA9w469.jpg-wh_50

参考文档:

https://letsencrypt.org/docs/

https://certbot.eff.org/all-instructions/#centos-6-nginx

https://certbot.eff.org/docs/using.html#webroot