HTTP自动转到HTTPS

本文介绍了一种利用Perl CGI脚本实现从HTTP自动转向HTTPS的方法,通过判断当前连接是否为HTTPS,并在非HTTPS情况下进行重定向。


现在在医院的HIS管理中,有些页面是需要加密的,也就是应该通过https访问,其他的多数页面是普通的http访问。

所以,在从普通网页访问敏感页面时,需要服务器能够自动转到https上。

在网上查了一下,配置apache的url_rewrite功能,可以实现强制https访问。不过看了一下比较麻烦。

有一个基本的方法,就是在需要连接到加密页面的链接上做成https连接,但这样需要设置成绝对路径。

能不能使用相对路径,又可以自动转为https呢。经过测试,发现通过Perl的CGI功能,可以在%EVN{HTTPS}中识别页面是否在使用https,如果不是,可以通过Location语句自动跳转到https页面。

用Perl写了下面的cgi程序代码,可以自动调整到https的连接。当然,首先Apache应该已经对https连接做好相关配置。


#!/usr/bin/perl

my $host = $ENV{'HTTP_HOST'};
my $uri = $ENV{'REQUEST_URI'};
my $https = $ENV{'HTTPS'};

# 强制转到https
if ($https ne 'on')
{
 my $newpath = "https://".$host.$uri;
 print "Location: $newpath\n\n";
}

print    "Content-type: text/html\n\n";

.......

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21129783/viewspace-689946/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/21129783/viewspace-689946/

Tomcat配置HTTP自动HTTPS可通过以下两种常见方式实现: ### 方式一:修改`web.xml`文件 在tomcat的`web.xml`的`</welcome-file-list>`后面添加如下配置,访问HTTP的连接即可自动转到HTTPS的连接: ```xml <login-config> <!-- Authorization setting for SSL --> <auth-method>CLIENT-CERT</auth-method> <realm-name>Client Cert Users-only Area</realm-name> </login-config> <security-constraint> <!-- Authorization setting for SSL --> <web-resource-collection > <web-resource-name >SSL</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint> ``` 这种配置可以强制所有HTTP请求转换为HTTPS请求,参考文档 [^1][^3]。 ### 方式二:修改`server.xml`文件 同时配置HTTPHTTPS的连接器,并设置HTTP请求的重定向端口。示例配置如下: ```xml <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" /> <Connector port="443" protocol="HTTP/1.1" SSLEnabled="true" scheme="https" secure="true" keystoreFile="你自己证书的存放位置" keystoreType="PKCS12" keystorePass="证书密码" clientAuth="false" SSLProtocol="TLSv1.1+TLSv1.2+TLSv1.3" ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256" /> ``` 此配置中,端口80的HTTP连接器将所有请求重定向到端口443的HTTPS连接器。若要使用自定义端口,可参考如下配置,实现8090端口自动跳转至8095端口: ```xml <Connector port="8090" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8095" URIEncoding="UTF-8"/> <Connector port="8095" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" URIEncoding="UTF-8" sslEnabledProtocols="SSLv2,SSLv3,TLSv1,TLSv1.1,TLSv1.2,SSLv2Hello" keystoreFile="/app/wheelchair/ssl/server.keystore" keystorePass="passwd(keystore设置的密码)" /> ``` 参考文档 [^2][^4]。 ### 兼容性建议 在切换时可做HTTPHTTPS的兼容,去掉页面链接中的HTTP头部,如将`http://www.baidu.com`改为`//www.baidu.com`,这样能自动匹配HTTP头和HTTPS头 [^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值