昨天开发一个chrome插件浏览器插件:插件自动把当前浏览的页面html代码抓去,通过ajax的方式html代码发送到服务器解析。抓去的站点是https的,我们的解析就普通的tomcat用得的http,做的过程中遇到以下问题:
was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://127.0.0.1/'. This request has been blocked; the content must be served over HTTPS.
原因是源站点是https的,我本地tomcat是http的,存在跨域问题,所以就需要用到apache代理把本地http包一个https的外壳。
一、配置Apache支持SSL
步骤1:配置 APACHE以支持SSL
找到下面两行去掉前面的注释 #
LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf
步骤2: 为网站服务器生成证书及私钥文件
C:/Program Files/Apache Software Foundation/Apache2.2/bin>openssl genrsa -out server.key 1024
生成一个server.key
步骤3:生成签署申请
C:/Program Files/Apache Software Foundation/Apache2.2/bin>openssl req -new -out server.csr -key server.key -config ../conf/openssl.cnf
此时生成签署文件 SERVER.CSR
步骤4:使用OPENSSL生成CA私钥
C:/Program Files/Apache Software Foundation/Apache2.2/bin>openssl genrsa -out ca.key 1024
多出CA.key文件
步骤5:利用CA的私钥产生CA的自签署证书
C:/Program Files/Apache Software Foundation/Apache2.2/bin>openssl req -new -x509 -days 365 -key ca.key -out ca.crt -config ../conf/openssl.cnf
步骤6:在bin目录下新建demoCA目录,在demoCA下新建index.txt,newcerts,serial 目录结构如下
demoCA
|--index.txt(文本,内容为空)
|--newcerts(文件夹)
|--serial(文本,内容为 01)
步骤7:准备为网站服务器签署证书
C:/Program Files/Apache Software Foundation/Apache2.2/bin>openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config ../conf/openssl.cnf
生成 server.crt文件
步骤8:将 server.crt server.key复制到 conf文件夹下
------------------配置ssl常见问题---------------------
win7系统64位在配置过程中,在重启apache时可能会出现问题
问题1:apache重启失败,报错信息Syntax error on line 62 of C:/Program Files (x86)/Apache Software Foundation/Apache2.2/conf/extra/httpd-ssl.conf:
SSLSessionCache: Invalid argument: size has to be >= 8192 bytes
解决办法:
将conf/extra/httpd-ssl.conf中61-63行修改成下面这样即可SSLSessionCache "dbm:C:/Program Files (x86)/Apache Software Foundation/Apache2.2/logs/ssl_scache"
# SSLSessionCache "shmcb:C:/Program Files (x86)/Apache Software Foundation/Apache2.2/logs/ssl_scache(512000)"
SSLSessionCacheTimeout 300
二、设置代理
修改http.cnf文件
步骤1:打开代理moduls
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
步骤2:添加一下代码
# 正向代理开关
ProxyRequests On
ProxyVia On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
# 设置反向代理
ProxyPass / http://127.0.0.1:8080/
# 设置反向代理使用代理服务的HOST重写内部原始服务器响应报文头中的Location和Content-Location
ProxyPassReverse / http://127.0.0.1:8080/