为网站启用https并增加ssl证书

Posted in 2015-12-25 7:41 | Category: Web安全 | Tags: ssl nginx

HTTPS和HTTP的区别

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。 为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。 HTTPS和HTTP的区别主要为以下四点:

  • https协议需要到ca申请证书,一般免费证书很少,需要交费。
  • http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
  • http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  • http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

申请ssl证书

对于像我这样的穷学生或者不希望花钱的同学可以使用startssl免费ssl证书
当然如果可以,最好购买ssl证书,安全性上更有保障

对于怎么申请startssl免费证书这里不多说,网上很多教程,其中有几点是我在申请中遇到的问题,希望对大家有所帮助
* 在进行域名验证时不论如何startssl搜索不到我的域名注册邮箱,我已将whois保护关闭后还是一样
解决办法:一个不是办法的办法,因为我在qq邮箱使用了域名邮箱,所以我将域名邮箱管理员admin@honmaple.com 更改为postmaster@honmaple.com,然后发送验证邮件到该邮箱对域名进行验证

  • 如何导出公钥
    如果申请成功,在Tool Box点击Certificate List,Action中选择Retrieve导出zip包到本地, 在本地解压就会发现里面有对应服务器类型的crt证书

  • 如何导出私钥
    在申请过程中保存了一个.key文件,这个文件就可以作为私钥(请妥善保管)

如果在申请中对私钥设置了密码,每次重启ngnix都要输入密码,如果不想每次输入密码, 在startssl的Tool Box的Decrypt Private Key中填入保存的私钥以及私钥密码,对私钥进行解密, 将解密后的字符串保存为.key文件

关于nginx配置

在/etc/nginx/conf.d/ssl.conf中添加

server {
     listen       443 ssl;
     server_name  honmaple.com;
     #请更改成你的文件地址
     ssl_certificate /root/ssl/1_honmaple.com.pem;
     ssl_certificate_key /root/ssl/1_honmaple.com.key;

     ssl_session_cache shared:SSL:1m;
     ssl_session_timeout 5m;
     #下面这些请根据实际更改,我的是flask+nginx
     location / {
                        # Pass the request to Gunicorn
                proxy_pass http://127.0.0.1 …