因为 https 采用 ssl 加密,所以部署 https 时需要申请证书,证书的作用就是对浏览器和Web服务器双方的身份验证。

步骤1:申请证书

  我们采用Let's Encrypt签发的免费证书,虽然 Let’s Encrypt 只有90天的有效期,但是可以用Certbot自动部署工具,进入Certbot 主页,可以看到下图所示。

Let's Encrypt 签发的证书有效期只有90天,甚至希望缩短到60天。有效期越短,泄密后可供监控的窗口就越短。为了支撑这么短的有效期,就必须自动化验证和签发。

因为自动化了,长远而言,维护反而比手动申请再安装要简单。

Certbot首页选择自己的web服务器类型和操作系统,我们使用的是 nginx+centos6.5,选择后就会自动跳转到install页面,

注意:centos6.5默认的python版本是2.6.6,安装Certbot需要python2.7版本,未来Certbot会对python3.x支持(Python 3.x support will hopefully be added in the future),

遇到了升级python的问题,可以参考另一篇博客:如何升级python

1.安装certbot

  wget https://dl.eff.org/certbot-auto

  chmod a+x certbot-auto

  certbot-auto

执行certbot-auto命令会安装一些packages,创建虚拟环境,在创建虚拟环境的过程中,需要输入域名(提醒:用逗号或/或空格分割域名)、输入邮箱(用于急切的通知和找回丢失的key)、同意agreement、选择ssl.conf;看下面的图片

     

2.申请证书

  申请证书有两种验证方式,一种是standalone,这种验证方式虽然也可以部署后,但是以后更新证书的时候需要重启 web 服务器;

  第二种是webroot,就是在网站根目录下生成一个文件,通过访问该文件来验证,不需要重启 web 服务器。

  第一种命令:./path/to/certbot-auto certonly --standalone -d example.com -d www.example.com

  第二种命令:./path/to/certbot-auto certonly --webroot -w /var/www/example -d example.com -d www.example.com -w /var/www/baidu -d baidu.com -d www.baidu.com (/var/www/example是网站的目录)

我用了第二种方法。执行第二种命令的过程中会有提醒,图片如下

  

3.测试自动生成证书是否成功

  ./path/to/certbot-auto renew --dry-run

4.添加定时任务自动更新证书

  Since Let's Encrypt certificates last for 90 days,所以我们还是写个定时任务吧

  crontab -u root -e (-u root 表示哪个用户的定时任务)

  添加:* * * */3 * ./path/to/certbot-auto renew --quiet (表示每3个月执行一次)

步骤2:部署https

  修改nginx的配置文件(比如在/usr/local/nginx/conf/nginx.conf),添加如下代码,然后重启nginx

# HTTPS server
# 部署HTTPS
server {
  listen 443 ssl;
  server_name www.example.com example.com;
  root /var/www/example;

  ssl on;

  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
  ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;

  ssl_session_cache shared:SSL:1m;
  ssl_session_timeout 5m;
  ssl_protocols TLSv1.2;(version1.2 is the only secure protocol version. 请参考SSL Labs: Increased Penalty When TLS 1.2 Is Not Supported

  ssl_ciphers HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers on;

}

  另外还可以加入如下代码实现80端口重定向到443,代码片段如下

server {
  listen 80;
  server_name www.example.com example.com;
  #实现80端口重定向到443
  rewrite ^(.*) https://$server_name$1 permanent;(或return 301 https://www.example.com$request_uri)

}


另外:安装成功的nginx如何添加未编译模块?

在重启nginx后发生了错误,错误如下:

nginx: [emerg] the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf:117  //说明缺少http_ssl_module模块
nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed

解决方法如下:

步骤1:查看nginx编译安装时的命令,安装了哪些模块和ngnix版本

  /usr/local/nginx/sbin/nginx -V

  会显示如下信息:

nginx version: nginx/1.7.7
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC)
configure arguments: --prefix=/usr/local/nginx --user=www --group=www

步骤2:重新编译 nginx-1.7.7

  wget http://nginx.org/download/nginx-1.7.7.tar.gz

  tar zxvf nginx-1.7.7.tar.gz

  cd nginx-1.7.7

  //configure参数要和步骤1的configure arguments一模一样

  ./configure --prefix=/usr/local/nginx --with-http_ssl_module  --user=www --group=www

  make (没有make install)

步骤3:备份nginx的二进制文件

  cp /usr/local/nginx/sbin/nginx  /usr/local/nginx/sbin/nginx.bak

步骤4:覆盖nginx的二进制文件

  cp objs/nginx   /usr/local/nginx/sbin/

  会提醒如下信息:

  cp:是否覆盖"/usr/local/nginx/sbin/nginx"? y
  cp: 无法创建普通文件"/usr/local/nginx/sbin/nginx": 文本文件忙 (nginx二进制文件繁忙,可以停止nginx,再试一次就可以了)

步骤5:启动nginx

  service nginx start (或/etc/init.d/nginx start)

记录启用HTTPS的全过程的更多相关文章

  1. 我是如何将网站全站启用Https的?-记录博客安装配置SSL证书全过程

    评论»   文章目录 为什么要Https 如何选择Https 安装部署SSL证书 平滑过渡Https 搜索引擎的响应 启用Https小结 正如大家所看到的,部落全站已经启用了Https访问了,连续几天 ...

  2. 架设证书服务器 及 让IIS启用HTTPS服务(转)

    无废话图文教程,教你一步一步搭建CA服务器,以及让IIS启用HTTPS服务. 一.架设证书服务器(CA服务) 1.在系统控制面板中,找到“添加/删除程序”,点击左侧的“添加/删除windows组件”, ...

  3. 免费ssl证书申请和在IIS上启用https的使用教程

    因为微信小程序开发涉及到ssl证书,所以折腾了几天的这个. 非常感谢”亚洲诚信-TrustAsia“公司的售后工程师黄工(QQ2355718943 TEL:021-58895880-663)提供的技术 ...

  4. 黄聪:WordPress 启用HTTPS设置(转)

    HTTPS已经成为网站的一种趋势,得益于数以万计的开发者和百万计的玩家,Wordpress启用HTTPS过程相当简单.下面就把Wordpress启用HTTPS访问的过程记录一下,以供参考. 一. 修改 ...

  5. gitlab 启用HTTPS

    NGINX设置 启用HTTPS 警告 Nginx配置会告诉浏览器和客户端,只需在未来24个月通过安全连接与您的GitLab实例进行通信.通过启用HTTPS,您需要至少在24个月内为您的实例提供安全连接 ...

  6. (四)启用HTTPS

    安全规范中有一条是要求尽量使用https而弃用http(新Chrome将标记非HTTPS网站为不安全),其实启用https和之前的ipv6改造一样,并不是什么高难度或者工作流繁多的的改造,只需将中间件 ...

  7. 在本地环境(mac)启用https

    前段时间客户一个涉及地理定位功能的页面突然出问题不能正常使用,在修复的过程中发现定位的方法 getCurrentPosition 只能在 https 协议下才能成功调用,这导致我在本地不能调试,每次修 ...

  8. SpringBoot系列——启用https

    前言 有时候我们需要使用https安全协议,本文记录在SpringBoot项目启用https 生成证书 自签名证书 使用java jdk自带的生成SSL证书的工具keytool生成自己的证书 1.打开 ...

  9. WordPress安全篇(1):WordPress网站启用HTTPS详细教程

    以前我们浏览网页使用的都是HTTP协议,HTTP使用明文传输,所以传输过程中很容易遭受黑客窃取.篡改数据,很不安全.在WordPress网站上启用HTTPS协议访问后,能大大提升站点的安全性,启用HT ...

随机推荐

  1. shell的符号总结

    1.命令替换符:先执行符号内的命令 反引号``:旧格式 $():新格式 2.字符串界定符: 单引号:保持引号内 的字符的字面值. 双引号:有些情况特殊. $echo '`date`' #不会执行`da ...

  2. 20145240 《Java程序设计》第四周学习总结

    20145240 <Java程序设计>第四周学习总结 教材学习内容总结 6.1继承 6.1.1 继承共同行为 定义:继承基本上就是避免多个类间重复定义共同行为. 优点:1.提高了代码的复用 ...

  3. SQL性能调优策略

    1.建立索引 2.避免全表扫描 避免使用is null, is not null,这样写会放弃该字段的索引. 如果会出现这种情况,尽量在设计表的时候设置默认值 比较操作符中!= <>等避免 ...

  4. java基础学习总结——java环境变量配置(转)

    只为成功找方法,不为失败找借口! 永不放弃,一切皆有可能!!! java基础学习总结——java环境变量配置 前言 学习java的第一步就要搭建java的学习环境,首先是要安装 JDK,JDK安装好之 ...

  5. 先有Class还是先有Object?

    先有Class还是先有Object? Java的对象模型中: 所有的类都是Class类的实例,Object是类,那么Object也是Class类的一个实例. 所有的类都最终继承自Object类,Cla ...

  6. Spring boot学习整理

    目录: Springboot结合hbase Springboot结合elasticsearch Springboot结合RestTemplate处理Http请求 Springboot的maven相关 ...

  7. java实现二进制的加法

    先看打印结果在看代码比较好理解.结果在最下面的位置. 总结:讲解了二进制的按位异域.按位与.左移的运算规则.并通过次3种算法得到2个数相加的结果.二进制应该还有其他算法,由于知识浅薄就不知道了. 代码 ...

  8. Rem是什么,牛逼的Vue,Epub竟然可以实现阅读器功能。太牛了。

    rem 相当于根元素font-size值的倍数. 1rem=根元素font-size 2rem=根元素font-size * 2 // 1rem = fontSize px // 1px = (1/f ...

  9. 执行安装redis报错undefined reference to `__sync_add_and_fetch_4'

    执行make命令时报错:   zmalloc.o: In function `zmalloc_used_memory': /var/lib/tcommsvr/redis-2.8.0-rc4/src/z ...

  10. dom 兼容性问题 2 offset

        offsetParent : 离当前节点最近的具有定位属性的祖先节点. 如果所有祖先节点都没有定位属性: 对于一个有定位属性的元素: ie6.7 : offsetParent 是 html 节 ...