http替换为https

TOMCAT 用https替换http的方法

1.首先用jdk自带的工具keytool生成一个证书keystore

JAVA_HOME/bin/keytool -genkey -alias tomcat-keyalg RSA \ -keystore /path/to/my/keystore

2.如果是JDK1.3以下则需要下载JavaSecure Socket Extensions (JSSE) package, version 1.0.2 or later,且将jcert.jar, jnet.jar, jsse.jar拷贝到$JAVA_HOME/jre/lib/ext
如果是JDK1.4.x则已经有这些包。

3.修改tomcat目录下的server.xml文件,增加
≪ConnectorclassName="org.apache.catalina.connector.http.HttpConnector"
port="8443" minProcessors="5" maxProcessors="75"
enableLookups="true"
acceptCount="10" debug="0" scheme="https"secure="true">
≪Factory className="org.apache.catalina.net.SSLServerSocketFactory"
clientAuth="false" keystoreFile="/path/to/my/keystore"keystorePass="runway" protocol="TLS"/>
≪/Connector>

其中keystorePass的值为生成keystore时输入的密码。

重新启动tomcat,就可以使用https了
http://www.mscto.com

 

如何在Apache中方便地切换http和https?

关键字: YMU Apache http https mod_rewrite

YMU系统中,我们使用Apache 2.x作为前端Web Server,用于静态内容的保存和获取,及动态内容向后端Web Server(Tomcat)的转发;同时Apache 2.x也承担Tomcat服务器之间的负载均衡器。

<o:p> </o:p>

从性能方面考虑,YMU系统的大部分页面采用http协议传输。而某些页面,如注册、登录和修改密码等安全性要求高的页面,则需要采用https协议进行传输。

<o:p> </o:p>

如何在http及https协议之间转换?最直接的办法是采用绝对路径,此方法优点是间接明了,缺点是移植性差。一个比较好的方法是使用Apache的rewrite模块对相对路径进行转换,从而达到协议转换的目的。

<o:p> </o:p>

我们可以在Apache的官方文档中找到http/https切换的相关说明:

RewriteEngineon<o:p></o:p>

RewriteRule ^/(.*):SSL$https://%{SERVER_NAME}/$1 [R,L]<o:p></o:p>

RewriteRule ^/(.*):NOSSL$http://%{SERVER_NAME}/$1 [R,L]<o:p></o:p>

<o:p> </o:p>

如果直接定义在httpd.conf,则会有以下问题:

  • 在页面中点击这些特殊的URL(login.html:SSL)时,浏览器会报协议错误,它把:SSL前面的内容(login.html)当作协议了;
  • 如果把“:”改成“_”或其他字符,则http可以转到https了,而https则不能转成http。什么原因呢?看了很多文档,才发现rewrite规则设置是针对虚拟主机的,而443端口被配置成另外的虚拟主机,所以就规则就失效了,还得在ssl配置文件(httpd-ssl.conf)中设置转发规则。

<o:p> </o:p>

下面举例说明配置过程。假设我们在相对路径url后增加_ssl表示以https协议装载url;而url后面增加_nossl则用于在https页面中跳转回http协议。配置步骤如下:

<o:p> </o:p>

1.      编译Apache时,生成rewrite模块(mod_rewrite.so);

2.      在httpd.conf中装载rewrite模块,并定义http->https的转换规则:

LoadModule rewrite_modulemodules/mod_rewrite.so<o:p></o:p>

<o:p> </o:p>

<ifmodulerewrite_module=""><o:p></o:p></ifmodule>

RewriteEngineOn                                                         <o:p></o:p>

#RewriteLog"/usr/local/apache2/logs/rewrite.log"<o:p></o:p>

#RewriteLogLevel 10<o:p></o:p>

RewriteRule ^/(.*)_ssl$ https://%{SERVER_NAME}/$1[R,L]<o:p></o:p>

<o:p></o:p>

RewriteRule ^/(.*)_nossl$ http://%{SERVER_NAME}/$1[R,L]<o:p>
</o:p>

其中:

  • RewriteEngine On:打开转换引擎;
  • RewriteLog:定义日志文件,用于调试;
  • RewriteLogLevl:设置日志级别,0表示不输出;数字越大,则输出信息越详细;
  • RewriteRule:定义转换规则,其中:

·        ^/(.*)_ssl$:表示 以 / 开头,以_ssl结尾;

·        https://%{SERVER_NAME}/$1:$1表示URL中 / 后 与 _ssl之前的部分内容;

·        [R, L]:R表示重定向;L表示最后一条规则,即若符合条件,则不再匹配下面规则;

3.       在ssl配置文件(conf/extra/httpd-ssl.conf)中定义https->http的转换规则:

LoadModule rewrite_modulemodules/mod_rewrite.so<o:p></o:p>

<o:p> </o:p>

<virtualhost_default_:443=""><o:p></o:p></virtualhost>

……<o:p></o:p>

<ifmodulerewrite_module=""><o:p></o:p></ifmodule>

RewriteEngine On<o:p></o:p>

RewriteRule ^/(.*)_nossl$ http://%{SERVER_NAME}/$1[R,L]<o:p></o:p>

<o:p></o:p>

<o:p></o:p>

<o:p>   </o:p>RewriteRule^/(.*)_ssl$ https://%{SERVER_NAME}/$1 [R,L]

注:

  • 虽然ssl配置文件会被httpd.conf包括,LoadModule还是需要的;
  • <ifmodule>…</ifmodule>需要定义在VirtualHost内部。

<o:p> </o:p>

4.      再根据规则修改页面中的URL。

<o:p> </o:p>

哈哈,大功告成!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值