letsencrypt有提供免费的ssl证书,因为决定在CentOS上安装试用一下。
安装过程很简单,按照教程一步步来就能搞定:
$ git clone https://github.com/certbot/certbot
$ cd certbot
$ ./certbot-auto --help
但是教程的下一步就有问题了,安装完之后的目录下并没有certbot这个可执行文件,而只有certbot-auto,但其实它们两个是一回事,直接用就可以。
当我执行./certbot-auto时,出现了以下错误:
Error: Multilib version problems found. This often means that the root
cause is something else and multilib version checking is just
pointing out that there is a problem. Eg.:
1. You have an upgrade for openssl which is missing some
dependency that another package requires. Yum is trying to
solve this by installing an older version of openssl of the
different architecture. If you exclude the bad architecture
yum will tell you what the root cause is (which package
requires what). You can try redoing the upgrade with
--exclude openssl.otherarch ... this should give you an error
message showing the root cause of the problem.
2. You have multiple architectures of openssl installed,but
yum can only see an upgrade for one of those arcitectures.
If you don't want/need both architectures anymore then you can remove the one with the missing update and everything will work. 3. You have duplicate versions of openssl installed already. You can use "yum check" to get yum show these errors.
感觉上好像是openssl版本不匹配,于是执行
yumupdateopenssl
然后再次执行./certbot-auto,这次就没问题了。
./certbot-auto--help
./certbot-auto certonly--standalone -d www.myserver.com
因为是standalone,它试图在80端口上启动一个服务器,但是因为80端口已经被Nginx占用,所以执行不成功,需要暂时停用一下Nginx。因为我不想中断服务,所以我手动把Nginx停用,把以前备用的一个apache启动起来,占住80端口以提供服务。这样我就不再需要standalone参数,而可以使用apache参数了,如下:
./certbot-auto certonly--apache -d www.myserver.com
但又出现了错误,它在443的虚拟主机上找不到我的服务器,原来我只在80端口上配置了虚拟主机,于是在Apache的conf文件上胡乱配上一个虚拟主机,以便使用443端口。但还是连接不通。报如下错误:
- The following errors were reported by the server:
Domain: www.myserver.com
Type: connection
Detail: Failed to connect to host for DVSNI challenge
仔细一想,原来是我在防火墙上把443端口禁用了,打开443端口后,终于成功!
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/www.myserver.com/fullchain.pem. Your
cert will expire on 2016-08-15. To obtain a new version of the
certificate in the future,simply run Certbot again.
接下来,你会在上述目录下看到4个文件:cert.pem@ chain.pem@ fullchain.pem@ privkey.pem@
这4个文件里,我们在Nginx配置中只会用到后2个,因为fullchain.pem就相当于cert.pem+chain.pem。
Nginx的配置如下:
server {
listen 443;
server_name www.myserver.com;
root /var/www/html;
ssl on;
ssl_certificate /etc/letsencrypt/live/www.myserver.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.myserver.com/privkey.pem;
location / {
index index.PHP index.html index.htm;
}
location ~ /\. {
return 403;
}
location ~ \.PHP$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.PHP;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
最后还要记得配置80端口,这样它才会强行把所有指向80端口的http链接转变为https请求:
server {
listen 80;
server_name www.myserver.com;
return 301 https://www.myserver.com$request_uri;
}
到止为止,重启Nginx,终于可以在浏览器端看见那个漂亮的绿色小锁头了!
2016年6月9日补充:
其实在Nginx下配置letsencrypt远没有那么麻烦,首先需要在ini文件中的server块中添加如下设置:
location ~ /.well-known {
allow all;
}
主要目的是因为letsencrypt在验证时需要往这个文件夹下写文件验证,但其实你自己不必创建这个文件夹。
然后你再执行如下语句:
./letsencrypt-auto certonly-awebroot --webroot-path=/var/www/html-dwww.example.com
其余步骤同上。
Let’s Encrypt是EFF、Mozilla、Cisco、Akamai、IdenTrust与密西根大学研究人员共同创立的组织,这是一个免费的凭证中心(Certification Authority,CA),目的在于推动全球所有的网站都使用HTTPS加密传输,并由非营利的网际网路安全研究组织Internet Security Research Group(ISRG)负责营运。
对于开发者来说,部署HTTPS是一个双赢的选择,用户可以借此获得更加安全的使用体验,而站点也能够抵御恶意软件的注入或广告追踪。Let’s Encrypt已于2015年12月3日进入公测(Public Beta),所有网站都可以免费获取Let’s Encrypt的证书。
据说Google优先收录带HTTPS加密的网站。
获取Let’s Encrypt证书
项目GitHub地址:https://github.com/letsencrypt/letsencrypt– >https://github.com/certbot/certbot
官方教程:https://certbot.eff.org/docs/using.html
2016年5月更新:
最近官方做了调整,简化了获取证书的难度,并将项目名改为了certbot,以下为全新安装方法:
等待安装依耐环境并初始化,然后直接看第四步。
4.运行客户端获取证书
获取证书有几种方案,官方已经开发了用于Apache服务器的插件,而Nginx的插件还是实验性功能。本文不探讨使用插件的方式,读者可以自行阅读官方的User Guide。
方案一)获取证书时会使用80端口,如果你的服务器可以关闭,可以使用如下方式: