HTTPS和HTTP相互间IFRAME的浏览器限制及安全提示
作者: 阿伦 日期: 2013 年 3 月 21 日分类: HTTP, Javascript标签: HTTP, HTTPS, IFrame, 安全目的学习如何搭建HTTPS服务;
为开发对安全性有较高要求的页面提供指导,避免不必要的安全漏洞;
步骤1.搭建本地HTTPS;
2.分别开发所有可能的嵌套场景:
[*]HTTP嵌套HTTPS
[*]HTTPS嵌套HTTP
[*]HTTPS嵌套HTTPS
[*]HTTP嵌套HTTP
3.分别在现有主流浏览器的各个版本访问嵌套页面,记录浏览器相关提示及限制;
操作记录环境系统环境:Windows 7 64bit
服务器:Apache
数据库:MySQL
服务器语言:PHP
搭建本地HTTPS下载windows环境的OpenSSL( http://www.openssl.org/related/binaries.html ,由于本人机器使用的是64位系统,所以下载的是64位OpenSSL)
在Command中使用一下命令生成搭建HTTPS所需要的证书及相关文件:
(1) 复制apahce2/conf目录openssl.cnf 文件到bin目录
(2) 生成RSA密钥 (private key) 下面两个命令都可以生成密钥:
[*]openssl genrsa -des3 -out ca.key
[*]openssl genrsa -out ca.key
[*]openssl genrsa -out ca.key 1024
(-des3选项可以加密生成的密钥, 但是Win32平台不支持加密密钥?启动Apache时会产生以下错误信息, “SSLPassPhraseDialog builtin is not supported on Win32″(当时不清楚我就加了-des3参数?且出现这个错误时apache启动不报错?查看日志才发现以上错误。))
(3) 产生 CA require cert?按提示填入相应的内容:
[*]openssl req -config openssl.cnf -new -key ca.key -out ca.csr
(4) 产生 CA public cert:
[*]openssl x509 -days 3650 -req -signkey ca.key -in ca.csr -out ca.crt
(5) 产生 Server private key:
[*]openSSL genrsa -out ssl/server.key 1024
(6) 产生 Server require cert?按提示填入和上边相同的内容:
[*]openssl req -config openssl.cnf -new -key server.key -out server.csr
(7) 产生 Server public key:
[*]openssl ca -config openssl.cnf -days 3650 -cert ca.crt -keyfile ca.key -in server.csr -out server.crt
运行这个命令会出错?I am unable to access the ./demoCA/newcerts directory….
错误原因是没有手动创建一个CA目录结构
[*]└─demoCA
[*] ├─newcerts
[*] ├─index.txt
[*] ├─serial
在demoCA中建立 index.txt 空文件, serial文件 , serial文件 中可输入01?此时再运行以上的命令即可生成server.crt。 将生成的 ca.crt、server.crt 和 server.key 放入apache的 conf 目录中
(8) 编辑apache的配置文件httpd.conf 去掉以下语句的注释, Include conf/extra/httpd-ssl.conf
[*]# Secure (SSL/TLS) connections
[*]Include conf/extra/httpd-ssl.conf
(9) 编辑 conf/extra/httpd-ssl.conf
把SSLMutex标签的值改为default
检查以下项目对应的文件的目录是否正确
[*]SSLCertificateFile "D:/web/Apache2.2/conf/server.crt"
[*]SSLCertificateKeyFile "D:/web/Apache2.2/conf/server.key"
[*]SSLCertificateChainFile "D:/web/Apache2.2/conf/ca.crt"
(上述内容需要按照服务安装的实际路径填写,除此之外,配置文件内的所有文件路径都需要确认是否与实际路径相符)
成功搭建HTTPS:
HTTPS搭建完成
开发各场景的测试页面HTTP内嵌IFRAME HTTPS
[*]
[*]
[*]
[*]
[*] HTTP iframe HTTPS
[*]
[*]
[*] 这是父页面
[*]
[*]
[*]
HTTPS内嵌IFRAME HTTP
[*]
[*]
[*]
[*]
[*] HTTPS iframe HTTP
[*]
[*]
[*]
[*] 这是父页面
[*]
[*]
[*]
内嵌页面
[*]
[*]
[*]
[*]
[*] Inner HTML
[*]
[*]
[*] 这是子页面
[*]
[*]
IFRAME内嵌统计结果
HTTP内嵌HTTPSHTTPS内嵌HTTPHTTPS内嵌HTTPSHTTP内嵌HTTP
Chrome正常(有证书)正常(有证书)正常(有证书)正常
Firefox正常(有证书)正常(有证书)正常(有证书)正常
IE 9.0父页面展示正常,子页面含不安全警告(有证书)正常(有证书)正常(有证书)正常
IE 8.0父页面展示正常,子页面含不安全警告(有证书)正常(有证书)正常(有证书)正常
IE 7.0父页面展示正常,子页面含不安全警告(有证书)正常(有证书)正常(有证书)正常
Opera正常(有证书)正常(有证书)正常(有证书)正常
IE 9.0安全风险警告信息:IE 9.0安全风险警告信息:
IE 8.0安全风险警告信息:IE 8.0安全风险警告信息
IE 7.0安全风险警告信息:IE 7.0安全风险警告信息
JS访问测试父页面
[*]…
[*]<script type="mce-”text/javascript”">
[*]//
[*] window.display = function() {
[*] alert(“Parent window.display() called.”);
[*] }
[*]// ]]>
[*]
[*]…
子页面
[*]…
[*]<script type="mce-”text/javascript”">
[*]//
[*] window.onload = function() {
[*] window.parent && window.parent.display();
[*] }
[*]// ]]>
[*]
[*]…
JS访问测试统计结果
HTTP(父) HTTPS(子)HTTPS(父)HTTP(子)HTTPS(父)HTTPS(子)HTTP(父)HTTP(子)
Chrome控制台报错,限制调用控制台报错,限制调用正常调用正常调用
Firefox控制台报错,限制调用控制台报错,限制调用正常调用正常调用
IE 9.0控制台报错,限制调用控制台报错,限制调用正常调用正常调用
IE 8.0浏览器报错,限制调用浏览器报错,限制调用正常调用正常调用
IE 7.0浏览器报错,限制调用浏览器报错,限制调用正常调用正常调用
Opera控制台报错,限制调用控制台报错,限制调用正常调用正常调用
IE 9.0 控制台报错信息:IE 9.0 控制台报错信息
IE 8.0 浏览器报错信息:IE 8.0 浏览器报错信息
IE 7.0 浏览器报错信息:IE 7.0 浏览器报错信息
分析通过上面的测试,浏览器对于HTTPS和HTTP之间用iFrame嵌套并没过于限制,但存在编码问题。另一方面,基于安全考虑,浏览器有对HTTPS和HTTP之间的JavaScript调用有较严格的限制。
页:
[1]