SSL证书卸载与SSI高级应用

SSL证书卸载与SSI高级应用

http://netkiller.github.io/journal/ssi.html

Mr. Neo Chen (netkiller), 陈景峰(BG7NYT)

中国广东省深圳市龙华新区民治街道溪山美地
518131
+86 13113668890
+86 755 29812080
<netkiller@msn.com>

版权 2014 http://netkiller.github.io

版权声明

转载请与作者联系,转载时请务必标明文章原始出处和作者信息及本声明。

文档出处:
http://netkiller.github.io
http://netkiller.sourceforge.net

 

2014-09-17

摘要

我的系列文档

Netkiller Architect 手札 Netkiller Developer 手札 Netkiller PHP 手札 Netkiller Python 手札 Netkiller Testing 手札 Netkiller Cryptography 手札
Netkiller Linux 手札 Netkiller Debian 手札 Netkiller CentOS 手札 Netkiller FreeBSD 手札 Netkiller Shell 手札 Netkiller Security 手札
Netkiller Web 手札 Netkiller Monitoring 手札 Netkiller Storage 手札 Netkiller Mail 手札 Netkiller Docbook 手札 Netkiller Version 手札
Netkiller Database 手札 Netkiller PostgreSQL 手札 Netkiller MySQL 手札 Netkiller NoSQL 手札 Netkiller LDAP 手札 Netkiller Network 手札
Netkiller Cisco IOS 手札 Netkiller H3C 手札 Netkiller Multimedia 手札 Netkiller Perl 手札 Netkiller Amateur Radio 手札 Netkiller DevOps 手札

目录

1. 什么是SSI(Server Side Include)

SSI是服务器端页面包含,SSI工作在web服务器上,web服务器可以在一个页面中包含另一个页面,在用户端看来是只有一个页面。

2. 为什么使用SSI

我们又很多个子站,所有网站的header与footer都相同,还有一些block区块也存在共用。所以我们将这个共用的部分拆分,然后使用SSI按需包含。

3. 谁来负责SSI制作

稍有经验的美工人员都可以灵活使用SSI,程序员也可在短时间内学会SSI.

4. 怎么处理SSI包含

4.1. SSI 目录规划

/www/example.com
  |-- inc.example.com
  |-- www.example.com
  |-- images.example.com
  |-- acc.example.com

inc.example.com 是SSI共用文件,存放shtml文件。

www.example.com 是主站,会用到inc.example.com中的公共模块。

acc.example.com 与 www.example.com 类似。

注意

/www/inc.example.com是公共目录,不需要配置nginx,不能通过浏览器访问到该目录.

为什么要独立公共文件,而不是放在/www/www.example.com目录下面呢?我是为了方便发布代码,分开的好处是我可以针对inc.example.com做发布,而不影响其他项目。

由于include作用于web服务器的$document_root目录,例如当前$document_root是/www/example.com/www.example.com

<!--#include file="/example.shtml"--> 会引用 /www/example.com/www.example.com/example.shtml 文件,而不是操作系统根目录。

所以我们无法引用与www.example.com同级别的inc.example.com公共文件。例如:

<!--#include file="/www/example.com/inc.example.com/example.shtml"--> 会引用 /www/example.com/www.example.com/www/example.com/inc.example.com/example.shtml 文件,而不是操作系统根目录。
<!--#include file="../inc.example.com/example.shtml"--> 会引用 也无法正常工作。

这是服务器限制,如果SSI可能包含$document_root之外的文件,将会带来安全问题,例如

<!--#include file="/etc/passwd"-->

怎样能突破限制呢?我想出了别名,通过别名/include引用/www/example.com/inc.example.com目录中的公文模块,例如:

    location /include/ {
        root   /www/example.com/inc.example.com;
    }
			

提示

Apache 与 Nginx 服务器的 SSI 实现稍有不同include file与include virtual也有差异。

4.2. www.example.com 静态内容服务器

# cat /etc/nginx/conf.d/www.example.com.conf

server {
    listen       80;
    server_name  www.example.com;

    charset utf-8;
    access_log  /var/log/nginx/www.example.com.access.log;
    error_log	/var/log/nginx/www.example.com.error.log;

    location / {
        root   /www/example.com/www.example.com;
        index  index.html;
    }

    location /include/ {
        root   /www/example.com/inc.example.com;
    }
    location /info/ {
	proxy_pass http://info.example.com/;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

4.3. acc.example.com 动态网页服务器

server {
    listen       80;
    server_name  acc.example.com;
    charset utf-8;
    access_log  /var/log/nginx/acc.example.com.access.log;
    error_log	/var/log/nginx/acc.example.com.error.log;

    set $X_FORWARDED_FOR $http_x_forwarded_for;

    location / {
        root   /www/example.com/acc.example.com/htdocs;
        index  index.php;

        try_files $uri $uri/ /index.php?/$request_uri;
    }

    location /include/ {
        root   /www/example.com/inc.example.com;
    }

    location ^~ /images/ {
        rewrite /images/(.+)$ /$1 break;
        proxy_pass http://images.example.com;
        break;
    }
    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /www/example.com/acc.example.com/htdocs/$fastcgi_script_name;
        include        fastcgi_params;
	fastcgi_param  DOCUMENT_ROOT /www/example.com/acc.example.com/htdocs;
    }
}

注意

该服务器不对外提供服务器,只允许下面的SSL卸载服务器通过反向代理连接

4.4. SSL卸载服务器

将SSL证书处理,机密与解密操作转移到该服务器,不让业务服务器处理证书的加密与解密操作,上面的HTTP对内访问,HTTPS对外访问,HTTPS通过反向代理连接HTTP服务器实现SSL证书卸载

upstream acc.example.com {
    server acc1.example.com;
    server acc2.example.com;
    server acc3.example.com;
}

server {
    listen       443;
    server_name  acc.example.com;

    ssl                  on;
    ssl_certificate      /etc/nginx/example.com/acc.example.com.pem;
    ssl_certificate_key  /etc/nginx/example.com/acc.example.com.key;

    ssl_session_timeout  5m;

    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers   on;

    location / {
	proxy_pass http://acc.example.com;
	proxy_http_version 1.1;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        break;
    }
}

4.5. /www/inc.example.com 公共包含文件

/www/inc.example.com/include/cn/config.html

<!--#set var="HTML_HOST" value="http://www.example.com"-->
<!--#set var="INFO_HOST" value="http://info.example.com"-->
<!--#set var="NEWS_HOST" value="http://news.example.com"-->
<!--#set var="IMG_HOST" value="http://images.example.com"-->
<!--#set var="JS_HOST" value="http://images.example.com"-->
<!--#set var="CSS_HOST" value="http://images.example.com"-->

<!--#if expr="${X_FORWARDED_FOR}"-->

<!--#set var="ACC_HOST" value="https://myid.example.com"-->
<!--#set var="IMG_HOST" value="/images"-->
<!--#set var="JS_HOST" value="/images"-->
<!--#set var="CSS_HOST" value="/images"-->

<!--#else -->

<!--#set var="ACC_HOST" value="http://myid.example.com"-->
<!--#set var="IMG_HOST" value="http://images.example.com"-->
<!--#set var="JS_HOST" value="http://images.example.com"-->
<!--#set var="CSS_HOST" value="http://images.example.com"-->

<!--#endif -->

${X_FORWARDED_FOR} 用来判断用户是通过http还是https进入,由于images.example.com 没有SSL证书,需要有区分的载入图片的地址。/images 通过反向代理连接http://images.exampe.com.

4.6. 引用包含文件实例

<!--#include file="/include/cn/config.html"-->
<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<link rel="shortcut icon" href="<!--#echo var="IMG_HOST"-->/favicon.ico" type="image/x-icon" />
<link rel="stylesheet" href="<!--#echo var="CSS_HOST"-->/styles/common.css" />
<script type="text/javascript" src="<!--#echo var="JS_HOST"-->/scripts/jquery-1.7.1.min.js"></script>
</head>
<body>
<div id="homeNav"><!--#include virtual="/include/cn/header.html" --></div>
<a href="<!--#echo var='ACC_HOST'-->/register/" class="real">
	<h3><img src="<!--#echo var="IMG_HOST"-->/new/ico_real.png" />注册账户</h3>
</a>
</body>
</html>
时间: 2024-07-28 19:00:39

SSL证书卸载与SSI高级应用的相关文章

阿里云和腾讯云免费SSL证书

阿里云部署SSL证书 http://www.cnblogs.com/sslwork/p/5984167.html 查找中间证书 为了确保兼容到所有浏览器,我们必须在阿里云上部署中间证书,如果不部署证书,虽然安装过程可以完全也不会报错,但可能导致Android系统,Chrome 和 Firefox等浏览器无法识别.请到 中间证书下载工具,输入您的Server.cer,然后下载中间证书,请将中间证书保存为Chain.cer. 服务器证书和中间证书连接 首先我们需要将中间证书Chain.cer加入到服

使用Docker生成SSL证书

本文讲的是使用Docker生成SSL证书[编者的话]学习如何使用Docker生成SSL证书,而不是在主机上生成. 当听到"Docker"和"SSL"这两个词的时候,你很可能会认为是在说创建SSL证书来保护Docker daemon本身.这很重要但是已经有很多文章详细介绍过了.或者你可能认为我们在讨论创建SSL证书供容器化的应用程序使用.如果你使用第三方工具(比如这种和这种工具)这也很简单.但是你知道吗,还可以使用Docker容器来为主机创建SSL证书? 使用Dock

泛域名ssl证书搭建全攻略

  无忧在线项目管理(www.5upm.com)是禅道开发团队给大家提供的一款在线的项目管理服务,它提供了禅道软件专业版本的功能,同时内置了subversion和git的源码托管服务,这样创业型团队或者跨地域团队就可以异地办公,实现跨地域的协同管理. 在实际运营无忧在线过程中,安全是很多客户比较关心的问题.对于这个问题我们通过很多种手段来加以解决,比如操作系统层面,应用程序层面等等.最近无忧在线项目管理又上线了https访问功能,进一步加强了无忧在线的安全性. 下面是笔者配置无忧在线https访

Apache1.3.27+mod_ssl+自定义SSL证书

绝对蓝屏 [ ihweb ](黄华栋) <ihweb@cnfug.org> Apache 1.3.27+mod_ssl+自定义SSL证书在我发表第一篇文章里介绍了用FreeBSD 的Ports 来安装方便简单,可更多使用者使用的OS非FreeBSD或想自己下载他们的原代码自己编译安装的.以下是作者在FreeBSD 4.8 stable平台下,一步一步编译安装Apache 1.3.27+mod_ssl的过程. 1.下载所需的安装包 FBSD# pwd /tmp/install FBSD# fet

微软非法SSL证书引发“钓鱼”攻击解决方法介绍

  最近,微软在TechNet上公布了一则对于非法发放的SSL证书警告,称SSL证书有可能引起攻击者采用欺骗内容执行钓鱼攻击或者"中间人"攻击.目前,SSL证书被发放到live.fi. 这一事件将影响包括Win7/Win8.1以及WP8.1在内的所有Windows系统.不过用户也不必担心,微软已经着手更新全部Windows操作系统的证书信任列表(CTL),目前该事件风险等级较低. 微软在其官方说明中提到:一项关于撤销证书的自动更新已经启动,涉及WindowsVista.Windows7

SSL证书是什么?

  SSL证书是什么? SSL证书是数字证书的一种,类似于驾驶证.护照和营业执照的电子副本.因为配置在服务器上,也称为SSL服务器证书. SSL 证书就是遵守 SSL协议,由受信任的数字证书颁发机构CA(如GlobalSign),在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能. SSL证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道(Secure socket layer(SSL)安全协议是由Netscape Communication公司设计开发.该安全协议主要用来

网络安全法解读之网络数据安全与SSL证书

网络数据及其安全问题解读 网络数据是指什么? 今年6月1日正式生效实施的<中华人民共和国网络安全法>第七十六条规定:"网络数据,是指通过网络收集.存储.传输.处理和产生的各种电子数据." 对于普通用户,浏览的网页.输入的数据等线上操作,均会涉及较大数据量.对于企业,企业信息.用户信息等,也都是需要保护的重要数据.而一旦数据无法得到保护,造成信息隐私泄露,损失将难以估量. <中华人民共和国网络安全法>第三章三十七条至三十八条,第四章四十一条至四十四条,就分别对关键

iis内网程序想用https访问,ssl证书怎么弄

问题描述 iis内网程序想用https访问,ssl证书怎么弄 程序部署在内网iis服务器上,与外网物理隔离,内网只能通过ip地址访问,没有dns服务器,怎么用h?ttps访问? 解决方案 https一样支持ip方式,自己制作一个对应IP地址的证书就可以了. 解决方案二: 免费StartSSL证书申请详细步骤和IIS中的SSL设置 http://www.server110.com/iis/201407/10798.html 解决方案三: 用hosts文件代替dns 解决方案四: 沃通(WoSign

ssl证书生成与配置问题,求大神解答下。

问题描述 ssl证书生成与配置问题,求大神解答下. 刚刚接触ssl 证书加密,只在自己的机器上试用了下,有两个问题不太懂,求解答下. 1,我在自己的机器上生成客户端.服务器证书,然后相互认证,配置tomcat.web.xml, 如果我在客户端在另一台机器上,我是不是把客户端证书拷贝到另一台机器上就可以正常访问了. 2,在1成立的基础上,如果有成千上万台客户端,证书都配置.拷贝完毕.突然服务器证书意外损坏,这时按照生成服务器证书的参数重新生成证书,能不能正常使用?如果不能,由于修改客户端证书工作量