博客搭建HTTPS ←

博客搭建HTTPS

通常大家使用的HTTP是明文传输的,没有经过任何安全处理,容易被监听或者中间人攻击。而HTTPS利用SSL/TLS来对数据包进行加密,是一种更安全的方式。现在越来越多的国外网站默认使用HTTPS,国内的动作向来比国外慢几拍,使用HTTPS的主要是一些交易支付等安全性要求比较高的网站。值得欣慰的是百度近期上线了全站HTTPS搜索,HTTPS无疑是一个不可逆转的趋势。笔者的前辈兼偶像鸟哥也给自己的网站加持了HTTPS,追随潮流,我也忍不住倒腾了一下。网上的资源比较杂,有时候不一定真的管用。整理一下自己的过程,以后迁移重现也方便。

首先说明一下的是我目前用的是namecheap提供给Github教育优惠账户的一年期免费SSL。我不太建议使用自颁发证书,因为Chrome等浏览器给这些网站的警告提示会极大降低用户体验。在此安利一下Github Student Developer Pack,里面有100刀的Digital Ocean VPS优惠码,价值9刀的一年期Namecheap SSL,价值168刀的两年期Github micro account。再跑个题,Jetbrains旗下的所有IDE对学生也是全部免费。作为在校研究生表示这真是一件幸福的事情^_^

言归正传,我们来讲一下如何配置SSL

sudo apt-get update
sudo apt-get install nginx
#creating a directory that will be used to hold all of our SSL information
sudo mkdir /etc/nginx/ssl
cd /etc/nginx/ssl

#生成private key 这里问你输入一个passphrase,下一步会需要输入
sudo openssl genrsa -des3 -out example.key 2048

#生成 CSR,需要准确填写域名和管理员邮箱,这个文件是用来向证书商申请证书的
sudo openssl req -new -key example.key -out example.csr

# 我们的private key是有passphrase的,需要去掉private key的passphrase
sudo cp server.key server.key.org
sudo openssl rsa -in server.key.org -out server.key
cat COMODORSAAddTrustCA.crt >> example_com.crt

我采用的是在默认的nginx.conf中基础上include两个设置,并强制http转https

#nginx.conf文件
http {
	# Basic Settings ....
	include /etc/nginx/sites-enabled/*;
}

#sites-enabled目录下example_com文件
server {
	listen 443;
	server_name example.com;
	root /var/www;
	ssl on;
	ssl_certificate /etc/nginx/ssl/example_com.crt;
	ssl_certificate_key /etc/nginx/ssl/example.key;
}

#sites-enabled目录下default文件
server {
	root /var/www;
	rewrite ^(.*)$ https://$host$1 permanent;
}

最后sudo service nginx restart大功告成,生成的SSL证书还可以用在ipython notebook上,可谓一举多得。本篇博客参考了DigitalOceanRuby China

chuan92 17 September 2015