本帖最后由 郝永亮 于 2018-7-19 23:00 编辑
java web应用的http请求改成https
本文通过将简单介绍两种将http请求修改为https的方式。
1、通过使用sun公司提供的keytool工具结合tomcat实现
2、使用阿里云的免费证书结合nginx实现。
使用SUN公司的提供的工具配置证书
SUN公司提供了制作证书的工具keytool。 在JDK 1.4以后的版本中都包含了这一工具,它的位置为
<JAVA_HOME>\bin\keytool.exe。
生成证书
这里只介绍简单的keytool生成证书的方法,如果想要了解更多关于keytool的知识,请参考 keytool用法总结
1.创建证书,在命令行中输入
keytool -genkeypair -alias "test1" -keyalg "RSA" -keystore "test.keystore"
功能:
创建一个别名为test1的证书条目,该条目存放在名为test.keystore的密钥库中,若test.keystore密钥库不存
在则创建。
参数说明:
-genkeypair:生成一对非对称密钥;
-alias:指定密钥对的别名,该别名是公开的;
-keyalg:指定加密算法,本例中的采用通用的RAS加密算法;
-keystore:密钥库的路径及名称,不指定的话,默认在操作系统的用户目录下生成一个".keystore"的文件
注意:
1.“名字与姓氏”应该是域名,若输成了姓名,和真正运行的时候域名不符,会出问题;
2.再次输入密码,第一次输入的是密钥库(keystore)的密码,第二次输入的是证书条目的密码
3.这里所说的证书库和密钥库是等同的(个人观点)
2.查看证书库
功能:
keytool -list -keystore test.keystore 查看名为test.keystore的证书库中的证书条目
3.导出到证书文件
功能:
将名为test.keystore的证书库中别名为test1的证书条目导出到证书文件test.crt中
4.导入证书的信息
keytool -export -alias test1 -file test.crt -keystore test.keystore
keytool -import -keystore test_cacerts -file test.crt 功能:
将证书文件test.crt导入到名为test_cacerts的证书库中,
5.查看证书信息
keytool -printcert -file "test.crt" 功能:查看证书文件test.crt的信息
执行完上述过程之后,我们会在<JAVA_HOME>\bin目录下面发现生成了3个文件
修改web程序的web.xml
url-pattern:可以对系统中访问的路径进行过滤
修改tomcat的conf文件
<security-constraint>
<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>
keystoreFile:证书文件的位置
keystorePass: 是keystore的密码(你在生成证书的时候,会有的keystore密码和tomcat主密码)
使用阿里云服务器生成免费证书
生成证书
基于阿里云服务器生成密钥证书,请参考用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS 。一般如果证书申
请时填写的信息正确,审核不超过10min,在审核通过之后我们选择对应的web服务器,不同的服务器的配置都不
相同,这里我们使用ngnix服务器。(其他的web服务器可以在官文中查看,每种服务器都给出了基本的配置方
法。)
阿里云免费证书只能对一个域名生效,如果涉及到二级域名或是其他域名,则需要申请不同的证书。
配置web服务器
1、 在Nginx的安装目录的conf下创建cert目录,并且将下载的全部文件拷贝到cert目录中。生成证书时,如果是系
统自动生成会自己带有私钥文件,如果是自己创建的CSR文件,请将对应的私钥文件放到cert目录下并对其重命名
建议和.pem证书文件的名称保持一致;
2、 打开 Nginx 安装目录下 conf 目录中的 nginx.conf 文件进行修改(以下属性中ssl开头的属性与证书配置有直接
关系,其它属性请结合自己的实际情况复制或调整):
<Connector port="72" protocol="HTTP/1.1" connectionTimeout="20000"
redirectPort="8443"
SSLEnabled="true" maxThreads="150"
scheme="https" secure="true" clientAuth="false"
keystoreFile="C:/tomcat/conf/test.keystore"
keystorePass="123456" sslProtocol="TLS"
URIEncoding="UTF-8"/>
server {
listen 443;
server_name abc.test.com;
ssl on;
root html;
index index.html index.htm;
ssl_certificate cert/xxx.pem;
ssl_certificate_key cert/xxx.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
location /test{
tcp_nodelay on; 1、 server_name 为系统监听的访问的服务域名。和阿里云中申请的证书的域名保持一致。
2、ssl_certificate 为证书文件的路径。
3、ssl_certificate_key 为私钥文件的路径。
4、在location中路径结合实际情况进行设置。其中/test则是对https的请求进行了转发操作。如何涉及
到二级域名的转发操作,则可以在server下面在增加一个server配置项进行相关的配置。
3、启动 nginx,如果在启动时修改了配置文件则重启nginx即可。
4、通过 https 方式访问您的站点,测试站点证书的安装配置。
使用nginx服务器我们不需要对系统的后台服务器进行其他操作。
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://www.baidu.com;
}
}
|
|