一、概述
在涉及到交易充值等操作的网站中,使用HTTPS提高系统安全性是非常有必要的。
我们一般是在已有的HTTP网站上面进行升级为HTTPS。下面,我就介绍一下在项目中如何将已有HTTP网站升级为HTTPS网站。我这里介绍的都是使用Tomcat部署的Java web应用程序。
二、准备工作
需要准备:ca证书和密钥key。自签名证书用于模拟可用十年。如果是购买正式证书,忽略这一步,发证机构会发来两个cer文件,一个是服务器证书,一个是根证书。我们在这里使用自签名证书。
2.1 openssl制证
- 下载openssl制作私钥,执行以下命令后会在当前目录下的conf目录创建server.key
openssl genrsa -out conf/server.key 1024
- 制作给发证机关的请求证书,需要如实输入一些真实的信息,注意填写“common name(e.g.server FQDN or YOUR name)”时要填写你的域名:
openssl req -new -key conf/server.key -out conf/certreq.csr
密码为空;
- 生成自签名证书;自签名证书用于模拟可用十年。如果是购买正式证书,忽略这一步,发证机构会发来两个cer文件,一个是服务器证书,一个是根证书。
openssl x509 -req -in conf/certreq.csr -out conf/cert.cer -signkey conf/server.key -days 3650
三、方案
3.1 方案一–不使用代理
直接配置Tomat:
1将证书文件 cert.cer和密钥文件server.key复制至tomcat的bin目录下。如果是购买正式证书,就把发证机构给你的两个证书文件放到bin目录下。
2. 修改tomcat的配置文件server.xml :将
1. <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
2. maxThreads="150" scheme="https" secure="true"
3. clientAuth="false" sslProtocol="TLS" />
取消注释并将它改成:
1. Connector port="443" protocol="org.apache.coyote.http11.Http11AprProtocol" SSLEnabled="true"
2. maxThreads="150" scheme="https" secure="true"
3. SSLCertificateFile="cert.cer"
4. SSLCertificateKeyFile="server.key"
5. sslProtocol="TLS" />
如果只想用https访问,需要注释原来的8080窗口监听。
注意:在发布小程序时,只能在开发工具下访问,真机访问不了。需要使用正式证书才行!
3.2 方案二–使用nginx代理
在HTTP已经可以正常使用的情况下,通过nginx可以快速的配置HTTPS。
1将证书文件 cert.cer和密钥文件server.key复制至nginx的conf目录下。如果是购买正式证书,就把发证机构给你的两个证书文件放到bin目录下。
2. 修改nginx的配置文件nginx.conf :
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# HTTPS server
#
server {
listen 443 ssl;
server_name xgwx.ecut.edu.cn;
ssl_certificate cert.cer;
ssl_certificate_key server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://xgwx.ecut.edu.cn:80;
}
}
}
配置说明:该配置主要目的是将443端口的请求转发到http的80端口。
注意:如果出现无法访问静态资源的问题,那是因为资源路径(协议头)不对,应该为https实际为http。需要配置Tomcat的server.xml文件:
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000" scheme="https" secure="true"
redirectPort="8443" />
增加:
scheme="https" secure="true"
启动nginx后,就可以通过https访问系统了。