基于Let’s Encrypt的中小企业网站保护的实现

2018-12-31 00:00:00李超
现代信息科技 2018年7期

摘 要:本文以互联网的迅速发展为背景,介绍了中小企业在提供博客、新闻和信息门户类服务等不涉及金融操作的网站服务中,借助Let’s Encrypt来实现网站的免费加密与保护,并给出了具体实现方法。

关键词:HTTP;HTTPS;Let’s Encrypt

中图分类号:TP309 文献标识码:A 文章编号:2096-4706(2018)07-0159-03

Abstract:This article introduces the rapid development of the internet,small and medium-sized enterprises in the provision of blogs,news and information portal services,which are not involved in financial operations,a way of free encryption and protection of websites based on Let’s Encrypt is proposed,and the implementation method is given.

Keywords:HTTP;HTTPS;Let’s Encrypt

0 引 言

顺应当今社会信息技术的发展需要,每个企业和组织都希望网络媒体资源的网络安全性得到保障。同时,对于所有在线访问的个人用户来说,进行网络访问时的数据信息安全同样重要。企业和组织可以通过证书授权机构搭建基本的HTTPS网站来保证网络和数据的安全,但是需要花费一定的费用,而且搭建的过程复杂、容易出错。现在可以免费使用Let’s Encrypt对中小企业的网站进行保护,而且搭建过程也比较轻松。

1 为何进行加密

为什么要加密网站呢?这是因为未经加密的HTTP会话可以被以下多种方式滥用:

(1)窃听用户数据包;

(2)捕捉用户登录;

(3)注入广告和“重要”消息;

(4)注入木马;

(5)注入SEO垃圾邮件和链接;

(6)注入挖矿脚本。

为了有效的避免企业网站在用户访问时滥用,最好的防御手段就是HTTPS。

2 HTTPS的工作原理

HTTPS是指在企业的网站和每个授权的访问用户之间建立非对称加密,这是一种非常强的保护。非对称加密的通用工具为GPG(GNU Privacy Guard)和OpenSSH。它们依赖于公钥-私钥对,其中公钥可以任意分享,但私钥必须受到保护且不能分享。公钥用于加密,私钥用于解密。

但上述方法无法适用于随机的网页浏览,因为建立会话之前需要交换公钥,需要生成并管理密钥对。HTTPS会话可以自动完成公钥分发,而且购物或银行之类的敏感网站还会使用第三方证书颁发机构(CA)验证证书,例如Comodo、Verisign和Thawte。

当用户访问一个HTTPS网站时,网站会给用户的网页浏览器返回了一个数字证书。这个证书能够加强会话的安全性与私密性,而且能够提供该网站的信息,包括组织名称、颁发证书的组织和证书颁发机构名称以及证书本身的信息等。用户可以点击网页浏览器地址栏的小锁头来查看这些信息,如图1所示。

包括Opera、Chromium和Chrome在内的主流浏览器,验证网站数字证书的合法性都依赖于证书颁发机构。小锁头标记可以让用户一眼看出证书的状态;绿色意味着使用了SSL强加密且运营实体经过验证。网页浏览器还会对恶意网站、SSL 证书配置有误的网站以及不被信任的自签名证书网站给出警告。

那么网页浏览器如何判断网站是否可信呢?浏览器自带根证书库,包含了一系列根证书,存储在/usr/share/ca-certificates/mozilla/之类的地方。网站证书是否可信可以通过根证书库进行检查。就像Linux系统上其它软件那样,根证书库也由包管理器维护。对于Ubuntu,对应的包是ca-certificates,这个Linux根证书库本身是由Mozilla维护的。

可见,整个工作流程需要复杂的基础设施才能完成。在用户在进行购物或金融等敏感在线操作时,用户信任了无数陌生人对其的保护。

3 Let’s Encrypt保护的实现

Let’s Encrypt是一家全球证书颁发机构,类似于其它商业根证书颁发机构。Let’s Encrpt由非营利性组织因特网安全研究小组Internet Security Research Group(ISRG)创立,目标是简化网站的安全加密。Let’s Encrypt得到了Mozilla、Cisco、Akamai、Electronic Frontier Foundation和Chrome等众多公司和机构的支持,发展十分迅猛。

使用Let’s Encrypt有三种方式。

(1)使用电子前沿基金会Electronic Frontier Foun dation(EFF)开发的Cerbot 客户端。使用该客户端需要在网站服务器上执行shell操作。

下面以centos 6-nginx为例:

打开https://certbot.eff.org/,选好系统版本,即下面的URL。

https://certbot.eff.org/#centos6-nginx

1)下载;

wget-O/sbin/certbot https://dl.eff.org/certbot-auto

chmod a+x /sbin/certbot

2)修改nginx主机配置文件(vhost则配置在vhos配置文件上),并将其配置在第一个location匹配规则上;

location = /.well-known/acme-challenge/ {

default_type \"text/plain\";

root /path/website/;}

location = /.well-known/acme-challenge/ {

return 404; }

重新加载生效:server nginx reload

3)申请证书;

certbot certonly--email mail@example.com--agree-tos--no-eff-email--webroot-w/path/website -d www.example.com

申请的证书一般都会在/etc/letsencrypt/live/example.com/下,会有下面5个文件(example为企业的网站名):

cert.pem chain.pem fullchain.pem privkey.pem README

4)为NGINX添加SSL;

示例中nginx为源码安装/usr/local/nginx下,创建sslkey保存目录。

[root@localhost sslkey]#mkdir -pv /usr/local/nginx/conf/sslkey

[root@localhost sslkey]#cd /usr/local/nginx/conf/sslkey

[root@localhost sslkey]#ln -s /etc/letsencrypt/live/example.com/* ./

[root@localhost sslkey]# ll

total 0

lrwxrwxrwx 1 root root 42 Jun 27 17:06 cert.pem -> /etc/letsencrypt/live/example.com/cert.pem

lrwxrwxrwx 1 root root 43 Jun 27 17:06 chain.pem -> /etc/letsencrypt/live/example.com/chain.pem

lrwxrwxrwx 1 root root 47 Jun 27 17:06 fullchain.pem -> /etc/letsencrypt/live/example.com/fullchain.pem

lrwxrwxrwx 1 root root 45 Jun 27 17:06 privkey.pem -> /etc/letsencrypt/live/example.com/privkey.pem

lrwxrwxrwx 1 root root 40 Jun 27 17:06 README -> /etc/letsencrypt/live/example.com/README

[root@localhost sslkey]# ls

cert.pem chain.pem fullchain.pem privkey.pem README

[root@localhost sslkey]# pwd

/usr/local/nginx/conf/sslkey

[root@localhost sslkey]#

5)修改nginx主机配置文件(vhost则配置在vhos配置文件上),添加ssl支持;

listen 80;

listen 443 ssl;

server_name www.example.com;

root /path/website/;

index index.php index.htm index.html;

ssl on;

ssl_certificate /usr/local/nginx/conf/sslkey/cert.pem;

ssl_certificate_key /usr/local/nginx/conf/sslkey/privkey.pem;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

ssl_ciphers ALL:!DH:!EXPORT:!RC4:+HICH:+MEDIUM:!LOW:!aNULL:!eNULL;

重启生效。

(2)如果企业网站使用的是共享托管主机,则很可能无法执行shell操作。这种情况下,最简单的方法是使用支持Let’s Encrpt的托管主机。

(3)如果企业网站的托管主机不支持Let’s Encrypt,但支持自定义证书,那么可以使用Certbot手动创建并上传你的证书。这是一个复杂的过程,需要彻底地研究文档。

安装证书后,使用SSL服务器测试来测试企业的服务器。

Let’s Encrypt的电子证书的有效期为90天。Certbot安装过程中添加了一个证书自动续期的计划任务,提供了测试证书自动续期是否成功的命令。允许使用已有的私钥或证书签名请求certificate signing request(CSR),允许创建通配符证书。

4 结 论

但Let’s Encrypt也有一定的局限性:它只执行域名验证,即只有有域名控制权才可以获得证书。这是比较基础的SSL。它不支持组织验证Organization Validation(OV)和扩展验证Extended Validation(EV),其作为非营利性组织提供的免费服务,不提供商业支持,只提供不错的文档和社区支持。该证书不足以胜任购物及银行网站的安全加密,但很适合加密博客、新闻和信息门户这类不涉及金融操作的网站,因此,提供此类服务的中小企业网站可以免费使用Let’s Encrypt来对中小企业网站进行保护。

参考文献:

[1] 刘青子.计算机信息网络安全技术及未来发展方向研究 [J].科技经济市场,2017(9):13-14.

[2] Let’s Encrypt是如何工作的 [OL].[2018-04-15].https://blog.csdn.net/canghaiguzhou/article/details/79945001.

[3] Let’s Encrypt SSL证书申请流程 [OL].[2017-09-25].https://www.trustauth.cn/wiki/22459.html.

作者简介:李超(1979-),男,贵州遵义人,副教授,工程硕士。研究方向:软件工程、计算机网络。