今天,我把CoolShell变成https的安全访问了。我承认这件事有点晚了,因为之前的HTTP的问题也有网友告诉我,被国内的电信运营商在访问我的网站时加入了一些弹窗广告。另外,HTTP的网站在搜索引擎中的rank会更低。所以,这事早就应该干了。现在用HTTP访问CoolShell会被得到一个 301 的HTTPS的跳转。下面我分享一下启用HTTPS的过程。

我用的是 Let’s Encrypt这个免费的解决方案。Let’s Encrypt 是一个于2015年推出的数字证书认证机构,将通过旨在消除当前手动创建和安装证书的复杂过程的自动化流程,为安全网站提供免费的SSL/TLS证书。这是由互联网安全研究小组(ISRG – Internet Security Research Group,一个公益组织)提供的服务。主要赞助商包括电子前哨基金会Mozilla基金会Akamai以及Cisco等公司(赞助商列表)。

2015年6月,Let’s Encrypt得到了一个存储在硬件安全模块中的离线的RSA根证书。这个由IdenTrust证书签发机构交叉签名的根证书被用于签署两个证书。其中一个就是用于签发请求的证书,另一个则是保存在本地的证书,这个证书用于在上一个证书出问题时作备份证书之用。因为IdenTrust的CA根证书目前已被预置于主流浏览器中,所以Let’s Encrypt签发的证书可以从项目开始就被识别并接受,甚至当用户的浏览器中没有信任ISRG的根证书时也可以。

以上介绍文字来自 Wikipedia 的 Let’s Encrypt 词条

为你的网站来安装一个证书十分简单,只需要使用电子子前哨基金会EFF的 Certbot,就可以完成。

1)首先,打开 https://certbot.eff.org 网页。

2)在那个机器上图标下面,你需要选择一下你用的 Web 接入软件 和你的 操作系统。比如,我选的,nginx 和 Ubuntu 14.04

3)然后就会跳转到一个安装教程网页。你就照着做一遍就好了。

以Coolshell.cn为例 – Nginx + Ubuntu

首先先安装相应的环境:

$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install python-certbot-nginx

然后,运行如下命令:

$ sudo certbot --nginx

certbot 会自动检查到你的 nginx.conf 下的配置,把你所有的虚拟站点都列出来,然后让你选择需要开启 https 的站点。你就简单的输入列表编号(用空格分开),然后,certbot 就帮你下载证书并更新 nginx.conf 了。

你打开你的 nginx.conf 文件 ,你可以发现你的文件中的 server 配置中可能被做了如下的修改:

listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/coolshell.cn/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/coolshell.cn/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot

 # Redirect non-https traffic to https
if ($scheme != "https") {
  return 301 https://$host$request_uri;
} # managed by Certbot

 

这里建议配置 http2,这要求 Nginx 版本要大于 1.9.5。HTTP2 具有更快的 HTTPS 传输性能,非常值得开启(关于性能你可以看一下这篇文章)。需要开启HTTP/2其实很简单,只需要在 nginx.conf 的 listen 443 ssl; 后面加上 http2 就好了。如下所示:

listen 443 ssl http2; # managed by Certbot 
ssl_certificate /etc/letsencrypt/live/coolshell.cn/fullchain.pem; # managed by Certbot 
ssl_certificate_key /etc/letsencrypt/live/coolshell.cn/privkey.pem; # managed by Certbot 
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot

然后,就 nginx -s reload 就好了。

但是,Let’s Encrypt 的证书90天就过期了,所以,你还要设置上自动化的更新脚本,最容易的莫过于使用 crontab 了。使用 crontab -e 命令加入如下的定时作业(每个月都强制更新一下):

0 0 1 * * /usr/bin/certbot renew --force-renewal
5 0 1 * * /usr/sbin/service nginx restart

当然,你也可以每天凌晨1点检查一下:

0 1 * * * certbot renew 

注:crontab 中有六个字段,其含义如下:

  • 第1个字段:分钟 (0-59)
  • 第2个字段:小时 (0-23)
  • 第3个字段:日期 (1-31)
  • 第4个字段:月份 (1-12 [12 代表 December])
  • 第5个字段:一周当中的某天 (0-7 [7 或 0 代表星期天])
  • /path/to/command – 计划执行的脚本或命令的名称

这么方便的同时,我不禁要问,如果是一些恶意的钓鱼网站也让自己的站点变成https的,这个对于一般用来说就有点难以防范了。哎……

当然,在nginx或apache上启用HTTPS后,还没有结束。因为你可能还需要修改一下你的网站,不然你的网站在浏览时会出现各种问题。

启用HTTPS后,你的网页中的所有的使用 http:// 的方式的地方都要改成 https:// 不然你的图片,js, css等非https的连接都会导致浏览器抱怨不安全而被block掉。所以,你还需要修改你的网页中那些 hard code http:// 的地方。

对于我这个使用wordpress的博客系统来说,有这么几个部分需要做修改。

1)首先是 wordpress的 常规设置中的 “WordPress 地址” 和 “站点地址” 需要变更为 https 的方式。

2)然后是文章内的图片等资源的链接需要变更为 https 的方式。对此,你可以使用一个叫 “Search Regex

插件来批量更新你历史文章里的图片或别的资源的链接。比如:把 http://coolshell.cn 替换成了 https://coolshell.cn

3)如果你像我一样启用了文章缓存(我用的是WP-SuperCache插件),你还要去设置一下 “CDN” 页面中的 “Site URL” 和 “off-site URL” 确保生成出来的静态网页内是用https做资源链接的。

基本上就是这些事。希望大家都来把自己的网站更新成 https 的。

嗯,12306,你什么时候按照这个教程做一下你的证书?

(全文完)


关注CoolShell微信公众账号可以在手机端搜索文章

(转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)

——=== 访问 酷壳404页面 寻找遗失儿童。 ===——

Related Posts

Facebook

关于Facebook 的 React 专利许可证

随着Apache、百度、Wordpress都在和Facebook的React.js以及其专利许可证划清界限,似乎大家又在讨论Facebook的这个BSD+PATENT的许可证问题了。这让我想起了之前在Medium读过的一篇文章——《React, Facebook, and the Revocable Patent License, Why It’s a Paper》,我觉得那篇文章写的不错,而且还是一个会编程的律师写的,所以有必要把这篇文章传播到中文社区这边来。注意,我不会全部翻译,我只是用我的语言来负责搬运内容和观点,我只想通过这篇文章让大家了解一下这个世界以及专利相关的知识,这样可以避免你看到某乎的“怎么看待XXX”这类的问题时人云亦云,能有自己的独立思考和自我判断。;-) 这篇文章的作者叫Dennis Walsh,他自称是亚历桑那和加利福尼亚州的律师,主要针对版权法和专利诉论的法律领域。但是这个律师不一样,他更很喜欢商业和软件多一些。现在他用React/GraphQL/Elixir在写一个汽车代理销售相关的软件,而且已经发布到第2版了。 首先,作者表明,专利法经常被人误解,因为其实充满了各种晦涩难懂的法律术语,所以,作者用个例子来讲述专利的一个原则 —— 专利并不是授于让你制造或开发的权利,而是授予你可以排他的权利。(事实上似乎也是这样,申请专利很多时候都不是为了制作相关的产品,而是为了防止别人使用类似的技术制作相关的产品) 如果有公司X为铅笔申请了专利,而另一家公司Y为把用于铅笔的橡皮擦申请了专利。那么,公司X可以阻止公司Y来生产铅笔,而对带橡皮擦的铅笔没办法,但是公司Y的专利可以让公司X不能生产带有橡皮擦的铅笔。 所以,公司Y的橡皮擦专利又被广泛地叫作“Blocking Patent”。公司Y不能说他发明了铅笔,因为这是公司X的专利,但是,他们可以让公司X无法对铅笔做出某些改进。 于是,因为这种 Blocking Patent 存在,对于开源的公司是不利的,因为根据上面的那个例子来说,开源公司就是公司X,他们做了一个基础的软件,而公司Y在上面做了些改进,并注册成了专利,从而导致开源的公司X无法对它基础开源软件作出被公司Y专利阻止的改进,开源的公司X希望能够自由地使用公司Y的橡皮擦专利,因为毕竟是它发明了铅笔并放弃了铅笔的专利。 于是就出来了“专利反击条款”(Patent Retaliation Clauses)。一般来说有两种专利条款,一种是弱条款,一种是强条款。 Weak Patent Retaliation Clauses – 这种条款声明,如果许可证持有者用某个专利来打击许可证颁布者,那么专利就视为终止。用人话来表达就是,公司X做了一个开源铅笔,而公司Y注册了橡皮檫专利。此时,公司X做了一支带像皮擦的铅笔,而公司Y马上对公司X提起专利侵权诉讼。那么,公司Y就失去了对底层铅笔的专利控制。(正如前面所说的,公司Y的橡皮擦专利因为在起诉公司X的开源铅笔,而失去了对开源铅笔的专利排他权利) Strong Patent Retailiation Read more…

Certbot

一键升级你的网站为 Https – Certbot

「https」是什么? 「https」是HTTP运行在SSL/TLS之上,SSL/TLS运行在TCP之上。 所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。 上面说的很官方,你可能看不懂,说简单点就是现在常用的浏览器Chrome 、 Firefox、Safari等未来将只重点支持「https」,如果你的网站没有使用SSl,这两个浏览器 将在地址栏的显著位置提醒用户“此网站不安全”和一些浏览器API无法使用。 那我们如何让自己的网站支持「https」? Let’s Encrypt 证书只有90天的有效期,有没有什么便捷的方法一键生成证书呢?答案是 Certbot。Certbot 真的是便捷,不用去 Let’s Encrypt 注册账号(它会自动帮你注册),不用手动修改配置服务器配置,一行命令搞定。 以我的服务器为例(Nginx on Ubuntu),首先安装 Certbot : $ sudo apt-get update $ sudo apt-get install software-properties-common $ sudo add-apt-repository ppa:certbot/certbot $ Read more…

KPI

我看绩效考核

(本来,这篇文章应该在5月份完成,我拖延症让我今天才完成) 前些天,有几个网友找我谈绩效考核的事,都是在绩效上被差评的朋友。在大致了解情况后,我发现他们感到沮丧和郁闷的原因,不全是自己没有做好事情,他们对于自己没有做好公司交给的事,一方面,持一些疑义,因为我很明显地感到他们和公司对一件是否做好的标准定义有误差,另一方面,他们对于自己的工作上的问题也承认。不过,让他们更多感到沮丧的原因则是,公司、经理或HR和他们的谈话,让他们感觉整个人都被完全否定了,甚至有一种被批斗的感觉。这个感觉实在是太糟糕了。 因为我也有相似的经历,所以,我想在这里写下一篇文章,谈谈自己的对一些绩效考核的感受。先放出我的两个观点: 1)制定目标和绩效,目的不是用来考核人的,而用来改善提高组织和人员业绩和效率的。 2)人是复杂的,人是有状态波动的,任何时候都不应该轻易否定人,绩效考核应该考核的是事情,而不是人。 我个人比较坚持的认为——绩效分应该打给项目,打给产品,打给部门,打给代码,而不是打给人。然而现在的管理体制基本上都是打给人,而很多根本不擅长管理的经理和HR以及很多不会独立思考的吃瓜群众基本上都会把矛头指向个人,所以,当然会有开批斗会的感觉。   举几个例子 为了讲清楚我的上述观点,请让我先铺垫一下,先说几个例子吧,韩寒的例子我就不说了。 苏步青同学在小学时成绩很糟糕,全班倒数第一。 华罗庚同学上学时数学还考不及格,要不是王维克老师的鼓励并让他爱上了数学,他可能也就完全埋没了。 郑渊洁上学时,老师要求写《早起的鸟有虫子吃》,郑渊洁唱反调写《早起的虫子被鸟吃》,再加上数学老师发难,于是被开除了。从此郑渊洁没有上过一天学。 列夫尔斯泰大贵族出身,2岁丧母,9岁丧父,16岁上大学,大学三年级自动退学回家进行改革。在青年时期不好好读书,考试不及格,留级。他赌博、借债、鬼混…… 这个的例子太多了,我从另一个方面举几个体育运动相关的例子,可能年轻的朋友都不知道,可以问问你们的父母。 80年代,中国有一批非常优秀的体育运动员,比如:体操王子李宁,打破过世界跳高记录的朱建华,还有乒乓球世界冠军马文革,还有羽毛球世界冠军赵建华,记得有一年参加世界比赛,他们全输了,而输的还很惨。于是国内的一些媒体和民众开始骂他们,甚至说他们是民族的败类、耻辱,还有很多人找上门要教训他们…… 如果我们把绩效分比做在学校里的考试分,那么你是否会和我一样认为,考试的成绩只能代表这个人对这些知识点的掌握或理解,而且仅仅在这个时间点,根本不代表这个人根本就不行,更不代表他一直不行。因为挂科太多被学校开除的同学,并不见得这些人在社会上就无活生活下去,反而,他们中的有些人可能会考试成绩好的人还活得好。不是么?这样的例子在我们身边还少吗? 所以,当我看到某HR说某老员工——“他今天要不自己离开,未来一年也一定会因为绩效问题而被公司开了的”,除了感到居然有人类可以预知他人未来的可笑之外,我感到是一种悲哀,一种管理体制上的悲哀,我感到了在这HR考评背后一股非常强的暗流和不可见的力量让她干出了这样一件匪夷所思的事。 好些公司还考评价值观,价值观无可厚非,我觉得一个企业的价值观是非常必要的,但是考核价值观是件非常危险的事情。这个世界上和传统势力唱反调的人实在是太多了,而被定性为价值观有问题被迫害的人也是多了去了。被批斗被侮辱被毒打的老舍;因为同性恋问题,被迫害而自杀的图灵;因为不同意教会观点被监禁8年都不愿意放弃自己的信仰最终被烧死的布鲁诺,…… 这样的事情已经够多了,新的时代里不应该再发生这样的事了,无论大小。 考核价值观最大的问题就是非常容易的上纲上线,也非常容易的被制造政治斗争,也非常容易的扼杀各种不同思想,老实说,这从很大程度上是一种洗脑的手段——通过对人制造一种紧张或恐惧而达到控制思想的目的。   对公司和管理者想说的话 下面我来谈谈绩效考核我的一些观点。在谈这个观点前,你可以移步看一下这篇新闻报道——《绩效主义毁了索尼》。而近年来,“放弃绩效考核”的斗争已经从科技企业中的Adobe、戴尔、微软、亚马逊,席卷到德勤、埃森哲、普华永道等咨询服务类企业。甚至通用电气(GE)——曾经的绩效管理的鼻祖,也宣布抛弃正式的年度绩效考核。在刚过去的2016年,腾讯的张小龙对微信事业群发出“警惕KPI”的呼声;李彦宏在内部信中将百度的掉队归咎于“从管理层到员工对短期KPI的追逐”;雷军干脆宣布小米“继续坚持‘去KPI’的战略,放下包袱,解掉绳索,开开心心地做事。”;王石也在个人微博中感慨:“绩效主义像企业的脓包”。 绩效考核在本质上就是像学校教育以分数论英雄,而忽略员工的成长和素质教育是一个道理。当学生和老师只关注考试分数时,而只有考试分数来评价老师和学生的优良中差时,老师和学生就会开始使用一些非常形式的方式来达到这个目标,比如:死记硬被,记套路,题海战术…… 而学习的能力的考评彻底地沦为了一种形式主义。反而,分数考的越高,脑子越死。(注:美国现行教育是不允许通过学生考试成绩来评价老师的能力的) 近几年来,一些大公司开始使用 OKR – Objectives, Key Result ,但是在实践过程中,我发现好些公司用OKR,本质上还是KPI – Key Performance Read more…