如何生成 CSR 文件

CSR,Certificate Signing Request,是制作 SSL 证书的必要步骤。一个 CSR 文件中描述了 SSL 证书持有人的信息(如个人姓名或公司名称)、联系地址等,用于验证 SSL 证书和域名是同一个人持有,以确保网站的合法性。

在 Linux 上生成 CSR 文件通常需要用到 OpenSSL 工具,这是一个命令行工具,参数一大堆,对于偶尔用一下的用户来说,可能不太友好。于是 DigiCert 提供了一个在线工具,用于生成 OpenSSL 的命令行,然后再拿去网站主机上运行就可以了。理论上 OpenSSL 一定要在网站所处的主机上运行,即换了主机之后要重新制作一个新的证书,但实践中并不强制这一步骤。

工具截图如下:

示例中我填写了 Google 的信息,请按实际情况修改,各项的含义如下:

  • Common Name: 你的网站域名
    • 如果你购买的是单一域名的 SSL 证名,请填写实际用到的域名,如 leonax.net 或者 www.leonax.net;在 DigiCert 购买的单一域名,填写 www 版本送裸域;
    • 如果购买的是野卡,则填写 *.leonax.net;
  • Organization: 公司名称,如果是个人用户,请填写自己的全名;
  • Department: 部门名称,可不填;
  • City: 所在城市;
  • State / Province: 所在州/省;
  • Country: 所在国家;
  • Key Size: 加密字长,目前常用的是 2048,如果对安全性要求较高,可以选择 4096;

全部填好之后,点击“Generate”即可以生成命令行,把右侧生成出来的一串命令,复制到 Linux 主机上运行即得到一个 CSR 文件。

之后要做的步骤是向 SSL 证书提供商上传这个文件,以获得最终的 SSL 证书,之后再详述。

注:OpenSSL 是一个 Linux 的工具,如果你的主机所用的是 Windows 或其它操作系统,可以在这个页面找到相应的介绍。

HHVM 中的 RepoAuthoritative 模式

HHVM 3.8 中提出了一个 RepoAuthoritative 模式,用于提升 PHP 代码的效率。

PHP 代码是解释型的,也就是每次执行的时候,PHP 引擎都会读取源代码,编译成机器代码之后再执行。这也就是为什么解释型语言比较慢的原因之一,它不能一次编译完成,而是一定要运行到哪里编译到哪里。编译的过程拖慢了整个运行的效率。而这样每次“编译”的过程显得有些多余,因为代码是基本不会变的。于是 PHP-FPM 是提出了 OpCache 来缓存编译的结果,如果代码已经被编译过,且源代码没有改动,则继续使用缓存。

而 HHVM 则更进了一步,在 RepoAuthoritative 开启之后,指定的文件夹会被编译成一个二进制文件,并同时进行优化。官方说法是,这样的优化可以在 HHVM 本身的基础上,再提升 20% 的运行效率。

开启的方法如下,其中 /var/www 是想要编译的文件夹。

关闭的方法如下:

编译的过程使用了 /var/run 做为临时文件夹,实测 WordPress 编译完成之后,要占用 175MB 的空间,如果 /var/run 太小会提示“disk is full”错误。

当然, RepoAuthoritative 也有一定的限制,比如不能使用 eval() 和 create_function() 等动态改变代码的语句。不过 WordPress 中几乎没有用到,说“几乎”是因为实际上有两处用到了,一个是在 wp-includes/pomo/po.php 中,这个文件貌似根本不会被执行到;另一处是在 wp-includes/atomlib.php 中,只要不使用 atom 作为 RSS feed 即可。另外就是编译完成之后,源代码的改动就会“失效”,要再一次编译才会使改动起作用。

然而,由于 HHVM 自身已经相当地高效了,开启 RepoAuthoritative 模式之后没有明显的变化。本站实测下来,TTFB 时间大概减少了 50ms,对于原本只有 700ms 左右的速度来说,看不出效果。我试用了一下之后就把它关闭了。不过至少说明在 WordPress 上使用这个功能是没有问题的。如果你的 WordPress 中有非常慢的功能,不妨试一下 RepoAuthoritative 模式。

说说 Windows 10

近几天 Windows 10 瞬间成了热门新闻,原因大概是微软历史上第一次以在线更新的方式发布了新版 Windows。Windows 7、 8 和 8.1 的用户不用特地下载或是购买安装盘,只要等待一会即可免费升级到 Windows 10。

尽管随着网络技术的发展,操作系统的地位日渐下降,平台的作用被浏览器和应用取代了。但对于这一款重量级产品,我还是很乐意吐槽一下的。

先来说说 Windows 10 的新特性:

开始菜单回归

鲍尔默做过的最大失误大概就是强推 Metro 界面了,在一个超过 20 寸的非触摸屏上全屏显示 Metro UI 简直美得不敢想象。在一个有着数十亿用户的平台上做出这么恶心的界面改动,足以显示鲍尔默当年是有多么想在移动端扳回一城,然并卵。

新的时代到来之后,开始菜单的回归是一个必然之举。Windows 8 的桌面(Desktop)用户应该会很喜欢这个变化。

Cortana

Cortana 是一个语音助理,和 Apple 的 Siri、Google 的 Google Now 是一类的产品。她可以接收语音指令,做一些智能的操作,比如设置闹钟什么的。Cortana 最初是在 Windows Phone 中发布,而 Windows 10 把她集成了进来。

具体 Cortana 在 Windows 10 能发挥何等的功效,目前还没看到详细的评测。不过由于我的家用影音系统用的是 Windows,我对 Cortana 相当期待,终于可以在一集电影看完对着电视说“Hey Cortana, play the next episode”,而不用使用遥控器。希望这样的功能可以早日实现。

令我印象深刻的功能就这两个,接下来吐槽一些改或没改的东西:

Edge

Microsoft Edge 是 IE 的后继产品,也就是说,Windows 10 中不再有 IE 浏览器了,取而代之的是 Edge。两者的图标很相近,普通用户应该不会感受到多大的差别。

且不说 Edge 比起 IE 来有多么大的进步,微软在产品名称上一直都不怎么出彩。之前 Live 用了十几年,觉得不爽了,改成了 Bing;MSN Messenger 用了十几年,不爽了,改成 Skype;Hotmail 用了十几年,不爽了,改成 Outlook。然而这些产品改名之后,依然不温不火,完全没有达到改名的目的。现在 IE 改成了 Edge,我们也不必指望 Edge 是全新开发的,毕竟 IE 十几年的积累摆在那里,Edge 用三年的时候超越 IE 是不可能的事情,所以 Edge 的内心依然流着 IE 的血液。

App Store

iPhone 成功了这么多年之后,微软依然没有意识到 App Store 之于 iPhone 的重要性,Windows 10 的应用商店依然不支持传统软件的安装。

Windows 最大的竞争力在于它的兼容性和庞大的软件生态环境,十几年前的软件装在最新版的 Windows 中依然可以运行。但软件的繁琐不统一的下载、安装方式一直都没有得到解决。用户不得不从各种不知道安不安全的网站上下载软件,双击之后也不知道安装程序到底干了什么,提心吊胆地使用着各种软件。而 App Store 的优势在于,其中的所有应用都经过了 Apple 的审核,而且安装和更新过程统一,容易上手,不用担心装了一个应用而危害到系统安全。

Windows 目前的策略貌似放弃了传统的软件,要求所有新软件使用新的 API 开发,使用统一的界面风格,才可以在自己的应用商店上架。这样就把自己最大的优势放弃掉,用自身的弱势和 Apple 的优势竞争,结果可想而知。

家庭影院模式

Media Center 被正式放弃,不知道做出这个决定的老板,看到新的 Apple Music 是什么想法。现在各种电视盒子、播放器这么流行,用户渴望以一种简单的方式来看电影、听音乐,而目前各种不同的软件的操作方式多少有所不同,微软却不想着提供一种统一的用户体验。或许由于早期微软过于特立独行被打击地太厉害,导致现在做什么都缩手缩脚的,自己把自己禁锢在所谓的“平台”上,市场全被其它厂商抢走了。

吐槽结束。

至于要不要安装 Windows 10,还是那句老话,软件要用最新的。

HHVM 近期频繁崩溃

近期 HHVM 频繁崩溃,一天数次,导致博客不稳定。尽管我有一个后台程序重启 HHVM,但毕竟有那么几分钟的不能响应时间,多少有点不爽。于是就研究了一下崩溃的原因。

在 /var/log/hhvm/error.log 中能看到类似下面的信息,Core dump 了:

然后再去看 /tmp/stacktrace.1173.log,发现如下信息:

说是要增加 Eval.JitASize 的大小。Google 了一下,这个数值指定了 HHVM Translation Cache 的大小。对 HHVM 不是特别了解,猜测是 HHVM 会把 PHP 翻译成 HH 的代码,并缓存在 Translation Cache 中。这个 Core Dump 的原因大概就是 Translation Cache 用完了。

根据 Issue #2851 的讨论,在 server.ini 中加入如下设定,把 JitASize 提高到 128M:

讨论中也有人说这个设定并不能完全解决问题,顶多就是把每天一次的崩溃延长到几周一次,后续进一步的完善还在 Issue 5233 中讨论。

WWDC vs Google I/O 2015

今年的两个大会距离很近,相隔不到两周,可以算是 Android 和 iOS 的正面冲突了。我抱着很大的好奇心看完了两边的 Keynote,顺便来点评一下。

我个人比较关心的是两家的支付功能,手机支付是生活中一项极好的进步,把厚厚的钱包变成了薄薄的手机。今年宣布的消息中,最讽刺的是 Google 抛弃了 Google Wallet 而转向 Android Pay 平台;而 Apple 则在 Apple Pay 的基础上增加了 Wallet(由 Passbook 演进而来)。Google 的支付系统看上去并没有一个很好的规划,早在 2006 年 Google 就发布了 Google Checkout 支付服务,用于在线支付。Checkout 死了之后进化出 Wallet,依然没什么好转,在 Apple Pay 发布之后,Google 被迫提出了 Tap and Pay,但依然不温不火。这一次又把产品名称改成了 Android Pay,这样改来改去有什么意义呢,人家 Apple 已经进军英国市场了……

Google 另一个落后的地方是照片流。这次 I/O 上发布的 Google Photos 算是一次大步追赶了,新的照片应用、无限空间、智能归类,看上去都是很不错的功能,但有什么用呢,Apple 家这些功能或多或少早就有了,照片分享(照片流)的功能还比 Google Photos 好用……

另外在操作系统层面 Apple 也完胜,虽然 Apple 其实也没什么功能可以多说,大多数时间很沉闷,但 iOS 9 的分屏应用直接给了 Android 一记闷棍。Android 大概已经把平板给放弃了,手机和平板的系统看上去一模一样。iOS 推出分屏应用功能,很有可能是为了 12 寸的大平板做铺垫,iPad Pro 将来可以会和 Chromebook 正面交火。如果用着 i7 芯片、4G 内存的 Chromebook,性能还没有 ARM 芯片的 iPad 好,那 Google 的脸可就要丢大了。

至于发布会上面提到的其它改进,不说也罢,都是一些锦上添花,可有可无的内容。总体而言,今年没什么劲爆的功能值得期待。

Yosemite 中 Spotlight 搜索的快捷键

Mac OS 10.10.3(Yosemite)中,Spotlight 变得更好用的,直接在屏幕的当中显示一个大大的搜索框,并且搜索结果也有很好的展现效果,如下图:

只不过 Spotlight 的按钮在屏幕的右上角,一般不太容易按到。把鼠标慢悠悠地移到右上角,只是为了一个搜索功能,真是麻烦。不过呢,Spotlight 可以用快捷键唤出,这个快捷键呢?是“Command + 空格”。

咦?这不是切换输入法的快捷键么?对,Apple 不小心把两个快捷键设置成一样的了。一旦输入法开启之后,Spotlight 的快捷键就失效了。要更改快捷键设置,可以在“键盘”选项中,找到 Spotlight,然后选择一个没有用过的快捷键,比如我就设置成了 Command + T,如下:

HHVM 崩溃后自动重启

不知为何 HHVM 不具备进程保护的能力,也就是说,HHVM 启动之后,只有一个进程,并且崩溃之后没有自主恢复的机制。大概是因为 Facebook 的服务器中有统一的方式来保护各种服务进程,也就没有在 HHVM 中单独做一份。但对于普通用户来说,HHVM 的稳定性有点弱。

今天一早,有位朋友提醒我博客没法留言了,现象是连接中断。后来我排查了一下发现原因是 HHVM 崩溃了,具体的表现有人在 Github 上已经反映过。好在我之前就有所准备,写了一个 Cron Job 定时检查 HHVM 进程,如果进程不在了,就自动重启 HHVM。这个脚本每两分钟运行一次,看来那位朋友不巧,正好撞在那两分钟的枪口上。

检查的脚本是从 Stackoverflow 上抄来的,代码如下:

虽然两分钟的间隔不算完美,但配合上 WP Super Cache 的纯净态支持,可以极大程度上避免博客下线的窘境。真正完美的方式,是开启两个(或多个)HHVM 进程,然后在 Apache 端做一个负载均衡,这样的话,即使有一个 HHVM 进程挂了,也不会影响到博客的使用。网上有人这样试过,但看上去很麻烦的样子,我还是等 HHVM 更新吧。

话说 Facebook 宣布这个月底有一个重大更新,HHVM 3.6,其中包含了很多稳定性方面的修复,值得期待。