`

HTTPS +Nginx免费部署指南

阅读更多

       

前言

随着国内各大网站纷纷开启全站 HTTPS 时代,HTTPS 已不再是支付等敏感操作过程的专属,开启 HTTPS 对于个人网站或者小型网站也不再遥不可及。 今天博主就以自己的网站 www.rapospectre.com 为例叙述一下为自己网站点亮 HTTPS 小绿锁的过程。

HTTP 和 HTTPS

HTTPS( Hypertext Transfer Protocol over Secure Socket Layer ),是以安全为目标的 HTTP 通道,简单讲是 HTTP 的安全版。即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL ,因此加密的详细内容就需要 SSL 。 它是一个 URI scheme( 抽象标识符体系 ),句法类同 http :体系。用于安全的 HTTP 数据传输。 https:URL 表明它使用了 HTTP,但 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP 与 TCP 之间)。这个系统的最初研发由网景公司进行,提供了身份验证与加密通讯方法,现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。

HTTP 超文本传输协议 ( HTTP-Hypertext transfer protocol ) 是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。

从概念里可以看到,要开启 HTTPS 至关重要的一点就是 ssl 层的身份验证,而身份验证需要用到 ssl 证书,以前少有免费 ssl 证书,所以小站基本不会选择 https ,而现在网上提供个人免费 ssl 证书的机构越来越多,这使得免费升级站点为 https 成为可能。

1. 申请 SSL 证书

网上已经有不少机构提供个人免费 ssl 证书,有效期几个月到几年不等,博主使用的是 StartSSL, 申请成功后有效期 3 年,到期后可免费续租。 具体申请过程不复杂,注册后根据提示验证网站 + 生成证书即可,如果不清楚可以 Google 一下

要注意 StartSSL 验证网站拥有者时是给域名所有者的邮箱发验证邮件,如果域名开启了隐私保护请暂时关闭。

然后在自己服务器中生成 SSL 证书的 csr ,记住生成输入的秘密,之后要用到:

  1. openssl req -new-sha256 -key rapospectre.com_secure.key -out rapospectre.com.csr

假设以上文件生成在 /var/tmp 文件夹下

在 StartSSL 填写 csr 文件内容,生成 SSL 证书并下载, 生成成果后如图:

点击 Retrieve 下载证书,解压缩后包含各种服务器的 crt ,博主使用 nginx 做反代,所以选择 nginxserver 解压缩后得到 www.rapospectre.com_bundle.crt 将此文件上传到服务器,假设传到 /var/tmp/ 文件夹

2. 配置服务器

以 nginx 为例,打开 /etc/nginx/nginx.conf,加入配置:

  1. server {
  2. listen 443 ssl;
  3. ssl_certificate /var/tmp/www.rapospectre.com_bundle.crt;
  4. ssl_certificate_key /var/tmp/rapospectre.com_secure.key;
  5. ssl_prefer_server_ciphers on;
  6. ssl_protocols TLSv1TLSv1.1TLSv1.2;
  7. #选择特定的加密方式, 避免已知的漏洞
  8. ssl_ciphers 'kEECDH+ECDSA+AES128 kEECDH+ECDSA+AES256 kEECDH+AES128 kEECDH+AES256 kEDH+AES128 kEDH+AES256 DES-CBC3-SHA +SHA !aNULL !eNULL !LOW !MD5 !EXP !DSS !PSK !SRP !kECDH !CAMELLIA !RC4 !SEED';
  9. #让浏览器记住直接访问 https 的网址, 不再去 http 重定向。
  10. add_header Strict-Transport-Security'max-age=31536000; preload';
  11. add_header X-Frame-Options DENY;
  12. ssl_session_cache shared:SSL:10m;
  13. ssl_session_timeout 10m;
  14. keepalive_timeout 70;
  15. ssl_dhparam /var/tmp/dhparam2048.pem;
  16. #禁止服务器自动解析资源类型
  17. add_header X-Content-Type-Options nosniff;
  18. #防XSS攻擊
  19. add_header X-Xss-Protection1;
  20. server_name www.rapospectre.com rapospectre.com;

在之前的 80 端口进行重定向配置:

  1. server {
  2. listen 80;
  3. server_name rapospectre.com www.rapospectre.com;
  4. return301 https://www.rapospectre.com$request_uri;
  5. }

3. HTTP 替换

将网站所有以 http 方式获取的资源全部改为 https 方式或自动方式获取, eg:

  1. <scriptsrc="http://xx.cdn.com/jquery.js"></script>
  2. 改为
  3. <scriptsrc="https://xx.cdn.com/jquery.js"></script>
  4. <scriptsrc="//xx.cdn.com/jquery.js"></script>

重启服务器,提示输入之前生成 csr 的密码,输入密码,重启成功,访问 https://www.rapospectre.com 可以看到 HTTPS 已经正常工作!

顺手来一发 SSLLABS测试,wtf 只有 F?

看图发现因为

This server is vulnerable to the OpenSSL Padding Oracle vulunerability ( CVE-2016-2107 )

原来是 OpenSSL 漏洞的锅,升级 OpenSSL 到 1.0.2h 版 ( 后续版本应该也可以,博主一开始升级到了最新的 1.1.0a 结果服务器挂了 ) 即可修复漏洞:

Fix OpenSSL Padding Oracle vulnerability (CVE-2016-2107) - Ubuntu 14.04

  1. # Based on http://fearby.com/article/update-openssl-on-a-digital-ocean-vm/
  2. $ apt-get update
  3. $ apt-get dist-upgrade
  4. $ wget ftp://ftp.openssl.org/source/old/1.0.2/openssl-1.0.2h.tar.gz
  5. $ tar -xvzf openssl-1.0.2h.tar.gz
  6. $ cd openssl-1.0.2h
  7. $ ./config --prefix=/usr/
  8. $ make depend
  9. $ sudo make install
  10. $ openssl version
  11. # OpenSSL 1.0.2h 3 May 2016
  12. # now restart your nginx or other server
  13. $ nginx -s reload

3. HTTP2

开启 http2 ,nginx 在 1.9.5 以后的版本才开始支持 http2 ,之前一直使用的是 spdy 而 ubuntu 自带的 nginx 是 1.4.6 的古董, 所以需要重新编译安装新版的 nginx ,博主选择了安装最新的 nginx 1.11.4:

  1. 下载 nginx 到 /var/tmp/nginx:

    1. wget http://nginx.org/download/nginx-1.11.4.tar.gz
  2. 解压nginx-1.11.4.tar.gz文件

    1. tar zxvf nginx-1.11.4.tar.gz
  3. 进入ngixn-1.11.4文件夹

    1. cd nginx-1.2.5
  4. 查看nginx原来的配置

    1. nginx -V

    上面的命令将输出类似如下信息:

    1. --with-cc-opt='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2'--with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro'--prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock--pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_sub_module --with-http_xslt_module --with-mail --with-mail_ssl_module

    我们在后面加上 http2 模块与 上一步中 openssl 源码( 是源码路径不是安装 )路径:

    1. --with-http_v2_module --with-openssl=/var/tmp/ssl/openssl-1.0.2h

    注意,如果以上信息内包含 --with-spdy_module 请去除,nginx 1.9.5 之后已弃用 spdy

  5. 执行configure命令,后面跟上原来nginx的配置

    1. ./configure --with-cc-opt='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock--pid-path=/run/nginx.pid --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-ipv6 --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_sub_module --with-http_xslt_module --with-mail --with-mail_ssl_module --with-http_v2_module --with-openssl=/var/tmp/ssl/openssl-1.0.2h

configure时可能遇到的几个错误:

  1. –with-http_xslt_module 时提示 the HTTP XSLT module requires the libxml2/libxslt libraries

    1. apt-get install libxml2 libxml2-dev libxslt-dev
  2. –with-http_image_filter_module 时提示 the HTTP image filter module requires the GD library.

    1. apt-get install libgd2-xpm-dev
  3. –with-http_geoip_module 时提示 the GeoIP module requires the GeoIP library.

    1. apt-get install geoip-database libgeoip-dev
  4. ./configure: error: the HTTP rewrite module requires the PCRE library.

    1. apt-get install libpcre3 libpcre3-dev

再次执行 configure 命令, 然后make && make install。 编译好以后objs目录下多出一个nginx文件,用它替换旧的 nginx 文件:

  1. mv /usr/sbin/nginx /usr/sbin/nginx-backup
  2. cp objs/nginx /usr/sbin/nginx

执行/usr/sbin/nginx -t 命令检查配置文件返回下面的信息:

  1. nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
  2. nginx: configuration file /etc/nginx/nginx.conf test is successful

表示 nginx 升级成功,修改 nginx 配置,加入 http2 支持:

  1. listen 443 ssl http2 fastopen=3 reuseport;

重启 nginx 访问正常后再测一发:

搞定,个人网站加入 HTTPS 并且 SSLABS 评分 A+ 。 快来试试吧~

( 博主网站图片上传到七牛,而七牛免费似乎账户不支持 https 链接,所以有些文章比如说这篇会提示网页内有不安全的内容 )

原文地址https://www.rapospectre.com/blog/https-deploy-guide

分享到:
评论

相关推荐

    线上一键部署keepalived+nginx

    在提供的压缩包文件"keepalived_nginx"中,可能包含了这个自动化脚本、配置示例、以及可能的使用指南或文档。用户只需执行这个脚本,就可以在他们的线上环境中快速部署这一组合,实现高效、可靠的Web服务。 总结来...

    CentOS6.5+mysql+nginx+php+memcached安装指南

    Windows8上安装虚拟机VirtualBox,然后新建虚拟电脑,搭建CentOS6.5 + mysql + nginx + php + memcached平台环境,部署网站。文档中记录了部分FAQ。

    浅谈Django+Gunicorn+Nginx部署之路

    Django+Gunicorn+Nginx的部署过程是一个经典的Web应用部署架构,在这个架构中,Django负责处理Web应用的后端逻辑,Gunicorn作为WSGI服务器进行Django应用的运行,而Nginx作为反向代理服务器,负责处理客户端的请求和...

    centos+nginx+mysql+django+uwsgi+python

    ### CentOS + Nginx + MySQL + Django + uWSGI + Python 安装指南与实践 #### 一、环境搭建概述 本文将详细介绍如何在CentOS系统上安装并配置Django Web框架及其相关组件(Nginx、MySQL、uWSGI等),以及如何关闭...

    Web环境搭建:Linux+Nginx+PHP+Mysql+Redis

    本指南将介绍一套广泛应用于电商平台的技术栈——**Ubuntu + PHP + Nginx + MySQL + Redis**。这些技术组合在一起可以为您的商城系统提供强大的性能支持。 - **Ubuntu**: 作为操作系统的基础,推荐使用最新的稳定...

    国产中标麒麟操作系统nginx+tomcat+redis+mysql安装部署手册(精).docx

    《国产中标麒麟操作系统Nginx+Tomcat+Redis集群安装部署手册》是针对在中标麒麟操作系统上搭建Web服务环境的详细指南。这份手册由东软集团股份有限公司于2019年12月编撰,旨在解决在实际部署过程中可能出现的各种...

    resin+nginx+使用说明文档

    【标题】"resin+nginx+使用说明文档" 涉及的是两个常见的Web服务器软件——Resin和Nginx的结合使用。Resin是一款Java应用服务器,它提供了高效的Servlet和JSP支持;而Nginx则是一款高性能的HTTP和反向代理服务器,以...

    linux+nginx+php+mysql环境配置指南.docx

    本指南主要介绍如何在Red Hat Linux上配置LNMP环境,包括Linux系统设置、Nginx的安装与配置、PHP的集成以及MySQL数据库的安装与管理。 首先,我们需要安装Red Hat Linux操作系统。在安装过程中,选择中文简体界面、...

    linux+nginx+php+mysql环境配置指南.pdf

    本配置指南主要针对LNMP环境,即使用Red Hat Linux操作系统,Nginx作为Web服务器,PHP处理动态脚本,MySQL作为数据存储。 首先,我们需要安装Red Hat Linux操作系统。在安装过程中,要注意选择正确的语言(中文简体...

    centos7-fastdfs+nginx+php开发环境部署.doc

    在本文中,我们将深入探讨如何在CentOS 7环境下搭建FastDFS+nginx+php的开发环境,这是一个常用的技术栈,适用于构建类似微信、京东、...在实践中,可能会遇到各种挑战,但只要按照指南进行,就能逐步克服并成功部署。

    Mars3D+nginx 搭建离线API服务,本地访问

    6. **处理问题**:如果遇到任何问题,可以查阅`nginx-windows常用命令.txt`文件中的指南,或者联系教程作者寻求帮助。 通过以上步骤,你就成功地在本地搭建了一个离线的Mars3D API服务,可以自由地测试和调试API而...

    nginx在centos7离线部署所有包(gcc+pcre+openssl+zlib+nginx).zip

    本教程将详细介绍如何在CentOS 7系统上离线部署Nginx,同时包括了依赖库如GCC、PCRE、OpenSSL和Zlib的安装过程。以下是一步一步的详细指南。 首先,我们需要理解Nginx的依赖关系。`gcc`是GNU Compiler Collection,...

    Nginx+Redis+Tomcat 集群部署

    在提供的压缩包文件中,可能包含Nginx、Redis和Tomcat的安装包,以及相关的配置文件和部署指南。这些文件对于理解并实践上述步骤至关重要。确保按照文档中的步骤操作,以顺利完成集群部署。在实际操作中,还需注意...

    Linux+Apache+Nginx+Mysql+PHP完美配置教程

    以下是一个详细的步骤指南: **一、准备工作** 1. **安装编译工具** 在Linux系统中,通常使用GCC和GCC-C++作为编译工具。如果网络可用,推荐使用`yum`安装。如果无法联网,可以使用安装光盘作为`yum`源。首先,...

    lua+nginx动态更新配置.zip

    8. **`readme.txt`**: 一般用来提供快速指南或项目说明,可能会介绍如何安装、运行和使用这个动态更新配置的解决方案。 通过这个压缩包,我们可以学习到如何利用Lua和Nginx的结合来实现实时配置更新,这对于需要...

    tomcat7+reids+nginx集群

    文件"apache-tomcat7_集群配置.rar"可能包含了Tomcat7的集群配置示例,"nginx-1.11.2.rar"则可能包含Nginx服务器的配置文件和安装指南。在实际操作中,需要根据具体需求和环境调整这些配置,以达到最佳性能和稳定性...

    OBS+NGINX 实现rtmp直播推流.zip

    标题中的“OBS+NGINX 实现...4. 可能还有相关的文档或指南,指导用户如何部署和测试这套系统。 通过这样的组合,用户可以建立自己的直播服务,无论是用于个人项目还是商业用途,都能提供稳定且灵活的直播解决方案。

    vue+springboot+mysql+nginx的网盘系统,脚本部署实例

    用户只需要按照提供的部署指南,即可在Windows环境中快速启动和运行这个网盘系统。这大大降低了部署的复杂性,使得没有专业运维背景的开发者也能顺利部署项目。 总的来说,这个项目提供了一个完整的从前端展示到...

    Nginx权威指南.pdf

    《Nginx权威指南》是一本深度探讨Nginx服务器配置、优化以及故障排查的专业书籍。Nginx作为一款高性能的HTTP和反向代理服务器,因其高效、稳定和易扩展的特性,在全球范围内广泛应用于各类网站和应用的前端。本指南...

    详解Django+uwsgi+Nginx上线最佳实战

    在本文中,我们将深入探讨如何实现Django应用的线上部署,结合uwsgi和Nginx。这个最佳实战将涵盖从环境准备、安装依赖到配置和启动服务的整个过程。 首先,了解关键组件: 1. **uwsgi**: 它是一个功能强大的应用...

Global site tag (gtag.js) - Google Analytics