分类
SSL 相关 Web 服务器

本站已开始使用ECC证书

Let’s Encrypt开始签发ECC证书已经有一段时间了,而且很多网站都开始换用ECC证书了,本站也在最近换用了Let’s Encrypt的ECC证书。这里简单就写个介绍和教程。
ECC证书也就是内置了ECDSA公钥的证书,而传统的RSA证书内置的是RSA公钥。ECC证书公钥长度短,256 bits的ECC Key安全性等效于3072 bits的RSA Key,运算速度更快。因此,ECDHE密钥交换+ECDSA数字签名无疑是目前更好的选择。ECC证书并不支持老旧的Windows XP和Android 2.x,但考虑到本站的客户群根本不是这些用古老客户端的人群,所以就无视了。
比较遗憾的是,现在Let’s Encrypt的中间证书依然是RSA证书,所以从整个证书链来讲也没有缩短多少,期待明年Let’s Encrypt开始采用ECC中间证书。ECDSA Intermediates (ETA: Before March 31, 2017)
这里推荐使用acme.sh来获取ECC证书,使用起来非常简单,而且还支持DNS验证域名,更灵活。
先是安装。

wget -O -  https://get.acme.sh | sh

acme.sh支持多种验证方式,并且支持Apache配置,非常方便,详见GitHub页面
如果你已经在服务器上运行了Apache,并且正确配置了DNS解析、hostname、fully-qualified domain name (FQDN)、ServerName和ServerAlias,那可以直接使用Apache模式,很简单的命令。

acme.sh --issue --apache -d aa.com -d www.aa.com -d user.aa.com --keylength ec-256

这样就获得了ECC证书,并且acme.sh支持自动续期,只要你不更改上面所说的配置,每隔80天会自动续期。ec-256是ECC Key长度,可选ec-384,但其实选用ec-256已经足够安全。
接下来,OpenSSL版本是1.0.2或更高,可以尝试部署ECC+RSA双证书以保证向后兼容性,你也许还需要获取一个RSA证书,只要输入以下命令就行。

acme.sh --issue --apache -d aa.com -d www.aa.com -d user.aa.com

接下来这里讲讲DNS验证,其实也很简单,先输入以下命令。

acme.sh --issue --dns -d aa.com -d www.aa.com -d user.aa.com --keylength  ec-256

然后会看到一串字符串。

Add the following txt record:
Domain:_acme-challenge.aa.com
Txt value:9ihDbjYfTExAYeDs4DBUeuTo18KBzwvTEjUnSwd32-c
Add the following txt record:
Domain:_acme-challenge.www.aa.com
Txt value:9ihDbjxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Please add those txt records to the domains. Waiting for the dns to take effect.

去你的DNS服务提供商处添加相应的TXT记录,等DNS记录生效后,再运行以下命令。

acme.sh --renew -d aa.com --ecc

这样就获得了ECC证书。
接下来,你也许还需要获取一个RSA证书,只要输入以下命令就行。

acme.sh --issue --dns -d aa.com -d www.aa.com -d user.aa.com

这时会看到域名已经验证的提示,直接获得对应的RSA证书。更改Apache或者其他要用证书的服务器端软件的配置,也许还要更改一下Cipher Suite等安全配置,参考这里,这样就大功告成了。

分类
SSL 相关 Web 服务器

为网站启用HTTPS (Apache)

现在通过SSL证书加密的HTTPS网站非常流行,免费的有大名鼎鼎的Let’s encrypt,还有以前就有的StartCom,WoSign之类的,而且谷歌也更优待启用了HTTPS的网站。所以,自己的WordPress何不也弄一个SSL证书来加密呢。
本站暂时用的StartCom的证书,不过基于某个很多人都知道的原因,我准备过段时间换成Let’s encrypt试试。废话不多说,开始写教程。
首先为Apache启用SSL支持。

a2enmod ssl

重启一下服务。

service apache2 restart

为了方便管理,在Apache的配置目录下创建一个放置证书的文件夹。

mkdir /etc/apache2/ssl.crt

这里默认你已经申请到了可以用的证书,具体如何申请证书改天再写一篇吧,而且我准备改天再写一篇关于Let’s encrypt的,这里就不废话了。
在刚刚创建的文件夹下创建一个证书文件example.com.crt。我喜欢用vi命令,你们随意,任意自己习惯的文本编辑器都行。

vi /etc/apache2/ssl.crt/example.com.crt

将申请到的证书文件文本贴进去。
然后创建私钥文件example.com.key,把申请证书用的私钥贴进去。

vi /etc/apache2/ssl.crt/example.com.key

注意如果私钥是被加密过的,这里要解密,如果加密的私钥为/path/to/example.key解密运行以下命令。

openssl rsa -in /path/to/example.key -out /etc/apache2/ssl.crt/example.com.key

这还没完,还要创建一个证书链文件ca.crt。

vi /etc/apache2/ssl.crt/ca.crt

如果是Apache 2.4,建议把证书文件example.com.crt和ca.crt做成证书链文件fullchain.crt。

cd /etc/apache2/ssl.crt
cat example.com.crt ca.crt > fullchain.crt

下一步,修改Apache的网站配置文件,如果是Apache 2.4,运行以下命令。

vi /etc/apache2/sites-available/default-ssl.conf

找到<VirtualHost *:443>,在其中的Server Admin email:下面增加以下两行,其中example.com是你的域名。

ServerName www.example.com:443
ServerAlias example.com www.example.com

继续往下,找到以下几行,改成如下所示。

SSLEngine on
SSLCertificateFile /etc/apache2/ssl.crt/fullchain.crt
SSLCertificateKeyFile /etc/apache2/ssl.crt/example.com.key

如果是Apache 2.2,运行以下命令。

vi /etc/apache2/sites-available/default-ssl

找到<VirtualHost *:443>,在其中的Server Admin email:下面增加以下两行,其中example.com是你的域名。

ServerName www.example.com:443
ServerAlias example.com www.example.com

继续往下,找到以下几行,改成如下所示。

SSLEngine on
SSLCertificateFile /etc/apache2/ssl.crt/example.com.crt
SSLCertificateKeyFile /etc/apache2/ssl.crt/example.com.key
SSLCertificateChainFile /etc/apache2/ssl.crt/ca.crt

启用刚刚设置好的虚拟服务器。

a2ensite default-ssl

再重载一下Apache。

service apache2 reload

好了,已经可以通过HTTP S访问你的WordPress了。如果要强制所有访问都通过HTTPS,还需要进一步设置,下次再写了。