一直以来,我都想尝试一下安装ssl安全证书,实现https访问我的网站。做了几天功课后,我掌握了从Startssl免费证书申请到安装的完整流程。
环境约定
硬件: Bandwagonhost 512MB OpenVZ VPS
服务器: CentOS 5.0 32位 LNMP 1.1 by 军哥
安装步骤
- 申请Startssl 类型:个人网站,Class 1,验证邮箱、域名所有权
- 在Startssl右上角,点击证书生成向导,生成、保存ssl.crt和ssl.key
(保存你设置的私钥密码到别处,切记!) - 下载Startssl根证书(两个),合并到ssl.crt
http://www.startssl.com/certs/ca.pem
http://www.startssl.com/certs/sub.class1.server.ca.pem
(下载后,用notepad++打开,复制内容,粘贴到ssl.crt文件底部) - 上传ssl.crt和ssl.key到服务器/root 目录
(不一定必须在/root目录,根据你个人需求选择上传位置) - SSH到你的VPS,运行命令,解密私钥:
openssl rsa -in ssl.key -out /root/ssl.key
(ssl.key位置,根据你的真实上传位置修改。上文默认上传到/root目录。如果忽略本步骤,每次重启lnmp,服务器都会要求你输入私钥密码) - 修改ssl.key权限,防止恶意攻击泄露
chmod 600 /root/ssl.key
- 修改nginx配置文件,添加对ssl支持。
lnmp 1.1一键安装包默认配置了openssl,只需修改主机配置文件即可。Nginx主配置文件位置:/usr/local/nginx/conf/nginx.conf
虚拟主机配置文件位置:/usr/local/nginx/conf/vhost/域名.conf
提醒:使用/root/vhost.sh添加虚拟主机。举例如下:我们添加了网站abc.com,所以要修改配置文件/usr/local/nginx/conf/vhost/abc.com.conf,添加如下代码:
server
{
listen 80; #http访问端口
listen 443 ssl; #https访问端口
#listen [::]:80; #IPv6访问控制开关
ssl on; #开启https方式访问
ssl_certificate /root/ssl.crt; #ssl证书位置
ssl_certificate_key /root/ssl.key; #ssl密钥
server_name abc.com; #虚拟主机绑定的域名
index index.html index.htm index.php default.html default.htm default.php;
root /home/wwwroot/abc.com; #虚拟主机网站根目录位置
include wordpress.conf; #虚拟主机reWrite规则
上述代码的效果是,网站可同时以http和https两种方式访问,如果强制https访问,删除 listen 80;
注意事项
- 中国大陆曾经发生过官方大规模封锁使用了Startssl免费证书的网站,随后逐步解封。考虑到网站稳定性,推荐你购买商业SSL证书。
- https会消耗服务器资源,在网站访问量较大的情况下,可作ssl技术优化,例如:
worker_processes auto;
http {
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
server {
listen 443 ssl;
server_name www.example.com;
keepalive_timeout 70;
ssl_certificate www.example.com.crt;
ssl_certificate_key www.example.com.key;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
…
我们调高keepalive_timeout和ssl_session_cache参数,参见nginx官方优化ssl教程
SSL优缺点
缺点
- 安装技术难度大;
- https消耗CPU资源大;
- 据说百度不能抓取https页面,Google可以抓取。
- 防火墙不确定因素;
优点
- Google给予https站点额外权重,鼓励采用ssl加密的网站;
- 抵抗防火墙扫描,保护网站内容数据安全;
- 基于https搭建商业网站,销售产品及其他用途;
实测发现,StartSSL免费证书效果很棒,在IE、Chrome、Firefox浏览器都能准确识别,我用iPhone手机的Safari和Chrome移动版浏览器测试同样100%识别https站点。
推荐美国高速VPS,硬件配置高,价格便宜:
DigitalOcean VPS:只需55秒搭建SSD云主机,SanFrancisco机房对大陆速度快;
Linode VPS: 老牌VPS,性能稳定,SSD硬盘
Vultr:价格便宜,耐折腾
InterServer:美国西海岸高速机房
参考资料
https://www.startssl.com/?app=42
StartSSL的延时严重吗
博主朋友,为什么我去掉listen 80 却没有出现强制https 是为什么呢