申请免费SSL证书

1. 前言

SSL证书(SSL Certificates)可以说是现在一个网站的标配,如果没有用SSL证书,浏览器上会显示不安全,导致一部分用户以为网站有问题。另外在微信小程序和iOS APP上,提供的API必须要用HTTS协议,否则不允许上架,所以掌握好SSL证书的配置是一个后端开发必备的技能。

在阿里云上,提供了每年可以申请一次的免费SSL证书,对于一些个人站点或者小公司的网站来说,确实是一个不错的选择。

2. 免费的SSL证书和付费的有什么区别?

收费版的SSL证书和免费版的证书有什么区别?首先说下他们的相同点。

  1. 都是由信任的CA机构签发的。
  2. 都是有一定的加密算法,能保证数据安全传输的。

首先我们要知道,任何一个人,都可以给自己甚至别人签发SSL证书。但是这个世界上只有那么几家公司(比如Digicert(原Symantec,已更名)、Rapid、GlobalSign、Wosign、GeoTrust以及TrustAsia,甚至还有一些国产公司例如vTrus)被权威机构所认可,他们的CA根证书被集成到操作系统中了,只有CA根证书被集成到操作系统中,这个CA根证书下的子证书才能被浏览器认为是安全的。

收费版的SSL证书和免费版的证书有什么区别,主要体现在以下几点。

  1. 品牌不一样: 像DigiCert这样的公司,是全世界最被认可的公司,他们签发的证书,可激活互联网最受信任的诺顿安全签章,价格肯定会有所差别了。
  2. 身份审核不一样: 免费的CA证书只会验证域名信息,由系统自动签发完成,签发速度几乎是立即完成。付费的CA证书会对验证网站的真实性做严格的验证,可以这样说,有付费SSL证书签发的网站,几乎是不可能有问题的,因此可信度比较高,但是签发周期也比较长,一般要3-15个工作日。
  3. 安全保险不一样: 付费的CA证书大多都有保险,最高可享受175万美元的保额,也就是说你的网站在使用SSL证书通信期间,被黑客攻击了,那么是可以享受保险的。但是免费的CA证书是没有的。
  4. 签发的域名不一样: 付费的CA证书一般都可以签发好几个域名,但是免费的CA证书只能签发一个域名。

当然还有更多其他方面的不同,比如付费的CA证书加密算法方面会做得更加优秀等。但是如果只是一个个人站点,或者是小公司的网站,我们可以先用免费的CA证书来过渡。毕竟买一个付费的CA证书,最贵的一年也要1W多,少的也要1000多。

3. 颁发免费的SSL证书的机构

提供免费SSL证书的机构有如下一些, 比如Let’s Encrypt, Cloudflare, Bluehost, SiteGround这些机构都提供免费的SSL证书, 国内的有阿里云, sslforfree.cn等机构.

值得注意的是这些机构提供的免费SSL证书都有一些限制, 有的在适用时间上, 有的在适用的domain的数量, 每一家申请需要的资料, 批准时间上都有所不同, 还有就是被认可的范围不同, 有些证书能被90%的浏览器或操作系统认可, 有些认可度较低, 需要详细了解后再从最适合自己的机构中申请.

以下以阿里云为例, 讲解如何获取免费的SSL证书.

4. 如何获取阿里云免费SSL证书

4.1. 选择免费SSL证书

进入到阿里云官网后,点击点击左侧菜单栏 => 产品与服务 => => 数据安全 => 数字证书管理服务(SSL证书)

打开 数字证书管理服务(SSL证书) 页面后, 在左侧菜单栏选择 SSL证书 => 选择免费证书tab

  • 产品栏: 选择免费证书
  • 购买数量: 选择20, 这个20代表可以给20个不同的域名签发证书
  • 其它服务: 选择不需要
  • 阅读并勾选协议
  • 然后右下角会显示价格为0元,点击立即购买即可。

购买完成后创建证书案例上会显示”创建证书20/20”表示可以创建20个单域名证书.

4.2. 申请证书

购买完证书后,还需要在控制台=>证书管理服务->SSL证书, 点击创建证书,系统会自动创建一条DigiCert 免费版 SSL, 初始处于待申请状态.

点击证书申请按钮进入证书申请页面.

  • 证书绑定域名: 输入你的完整域名 (请输入完整的单个域名,域名格式例如: ‘www.xxx.com',IP证书仅Globalsign的OV单域名证书支持)

  • 域名验证方式: 选择自动DNS方式

  • 联系人: 创建并选择联系人

  • 所在地: 输入所在地

  • 密钥算法: RSA

  • CSR生成方式: 选择合适的CSR生成方式

信息填写无误后点击申请. 申请成功后联系人会通过电话或邮箱收到通知.

4.3. DNS验证

  • 登录域名管理控制台

如果域名在阿里云,请登录阿里云DNS控制台操作。如果您使用其他厂商的域名,请登录对应的域名管理控制台

  • 在域名控制台添加DNS解析记录

    请按以下提示,在您的域名控制台添加DNS解析配置

    添加

    • 记录类型为txt
    • 主机记录为_dnsauth的域名解析记录, 如果域名是在阿里云购买的域名, 并且管理用户一致, 系统会自动帮助添加解析记录. 如果是其它情形, 请按提示指引添加域名解析配置.
  • 接着点击下一步,再点击一个DNS验证,

  • 然后就进入审核阶段。

因为是免费证书,整个签发过程都是由系统自动完成,因此在证书列表页面重新刷新一下页面,就能看到已签发的提示了。签发后即可下载证书使用了. 针对不同类型的服务器可以产品SSL证书安装章节进行配置.

4.4. SSL证书安装

SSL证书申请下来后,还要配置到服务器上才能使用。不同的web服务器使用方法都有不同,详细的文档可以查看这篇文章在服务器安装SSL证书, 里面总结了现在市面上几乎所有web服务器安装SSL证书的教程。这里重点讲一下在nginx中如何安装证书

4.4.1 nginx中如何安装SSL证书

步骤一:下载SSL证书
  1. 登录数字证书管理服务控制台。

  2. 在左侧导航栏,单击SSL 证书。

  3. 在SSL 证书页面,定位到目标证书,在操作列,单击下载。

  4. 在服务器类型为Nginx的操作列,单击下载。

  5. 解压缩已下载的SSL证书压缩包。

    根据您在提交证书申请时选择的CSR生成方式,解压缩获得的文件不同,具体如下表所示

    CSR生成方式证书压缩包包含的文件
    系统生成或选择已有的CSR证书文件(PEM格式):默认以证书ID_证书绑定域名命名。PEM格式的证书文件是采用Base64编码的文本文件。

    私钥文件(KEY格式):证书文件的密钥,默认以证书绑定域名命名。
    手动填写如果您填写的是通过数字证书管理服务控制台创建的CSR,下载后包含的证书文件与系统生成的一致。

    如果您填写的不是通过数字证书管理服务控制台创建的CSR,下载后只包括证书文件(PEM格式),不包含证书密码或私钥文件。您可以通过证书工具,将证书文件和您持有的证书密码或私钥文件转换成所需格式。转换证书格式的具体操作,请参见证书格式转换
步骤二:在Nginx服务器安装证书
  1. 执行以下命令,在Nginx的conf目录下创建一个用于存放证书的目录。

    1
    2
    cd /usr/local/nginx/conf  #进入Nginx默认配置文件目录。该目录为手动编译安装Nginx时的默认目录,如果您修改过默认安装目录或使用其他方式安装,请根据实际配置调整。
    mkdir cert #创建证书目录,命名为cert。
  2. 将证书文件和私钥文件上传到Nginx服务器的证书目录(/usr/local/nginx/conf/cert)

  3. 编辑Nginx配置文件nginx.conf,修改与证书相关的配置。

    1
    vim /usr/local/nginx/conf/nginx.conf

    参考如下示例进行配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
        server {
    #HTTPS的默认访问端口443。
    #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
    listen 443 ssl;

    #填写证书绑定的域名
    server_name <yourdomain>;

    #填写证书文件名称
    ssl_certificate cert/<cert-file-name>.pem;
    #填写证书私钥文件名称
    ssl_certificate_key cert/<cert-file-name>.key;

    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 5m;

    #自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)
    #TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;

    #表示优先使用服务端加密套件。默认开启
    ssl_prefer_server_ciphers on;


    location / {
    root html;
    index index.html index.htm;
    }
    }

5. 参考文章

阿里云免费SSL证书白嫖指南