您当前的位置:首页 > 计算机 > 服务器 > Tomcat

tomcat 配置https 双向认证

时间:06-27来源:作者:点击数:

1. 生成https证书

本方案生成证书需要java环境

1.1 Linux生成脚本

#!/bin/bash
echo -e "\033[30m服务器证书生成\033[0m"

#ip或域名
ip=127.0.0.1
if [ $# -gt 0 ] 
then
	ip=$1
fi
#证书密码
password=123456
#签发证书时间长度(天)
duration=365

# 清空缓存
echo "清空缓存"
rm -f server.keystore client.p12 client.cer

#生成服务端server证书
echo "生成server端证书"

keytool -genkey -alias server -keypass $password -keyalg RSA -keysize 1024 -keystore server.keystore -validity $duration  -storepass $password <<!
$ip
lhDream
lhDream
lhDream
lhDream
ch
y
!

#生成用户端clinet证书 (单向验证不需要以下部分,有了也不影响)
echo "生成client端证书"
keytool -genkey -alias client -keyalg RSA -storetype PKCS12 -keystore client.p12 -keypass $password -storepass $password <<!
$ip
lhDream
lhDream
lhDream
lhDream
ch
y
!

#把客户端证书导出为一个单独的CER文件
echo "把客户端证书导出为一个单独的CER文件"
keytool -export -alias client -keystore client.p12 -storetype PKCS12 -storepass $password -keypass $password -file client.cer <<!
$password
!

#导入到服务器的证书库,添加为一个信任证书
echo "导入到服务器的证书库,添加为一个信任证书"
keytool -import -v -file client.cer -keystore server.keystore -storepass $password <<!
y
!

#"查看服务器的证书库"
echo "查看服务器的证书库"
keytool -list -v -keystore server.keystore <<!
$password
!

keytool -keystore server.keystore -export -alias server -file server.cer <<!
$password
!

1.2 windows下生成步骤

1.2.1 生成server端证书
keytool -genkey -alias server -keypass 123456 -keyalg RSA -keysize 1024 -keystore server.keystore -validity 365  -storepass 123456
>127.0.0.1(ip或域名)
>lhDream1 单位名称
>lhDream2 组织名称
>lhDream3 城市或区域名称
>hDream4 所在省/市/自治区名称
>ch 国家/地区代码
1.2.2 生成client端证书
keytool -genkey -alias client -keyalg RSA -storetype PKCS12 -keystore client.p12 -keypass 123456 -storepass 123456 
>127.0.0.1(ip或域名)
>lhDream1 单位名称
>lhDream2 组织名称
>lhDream3 城市或区域名称
>hDream4 所在省/市/自治区名称
>ch 国家/地区代码
1.2.3 把客户端证书导出为一个单独的CER文件
keytool -export -alias client -keystore client.p12 -storetype PKCS12 -storepass 123456 -keypass 123456 -file client.cer
1.2.4 导入到服务器的证书库,添加为一个信任证书
keytool -import -v -file client.cer -keystore server.keystore -storepass 123456
>y
1.2.5 查看服务器的证书库(确定是否导入成功)
keytool -list -keystore server.keystore
>123456 (密码)

2. 配置tomcat

server.xml 配置开启https验证:SSLEnabled=“true” 表示开启https,clientAuth="true"表示开启双向验证

<Connector port="8080" protocol="HTTP/1.1" SSLEnabled="true"
               connectionTimeout="20000"
               maxThreads="150" 
               scheme="https" 
               secure="true" 
               clientAuth="true"
               sslProtocol="TLS"
               keystoreFile="/opt/gbServer/lib/https/server.keystore"
               keystorePass="123456"
               truststoreFile="/opt/gbServer/lib/https/server.keystore"
               truststorePass="123456"/>

web.xml 配置http自动转https

ps : 有时有用有时无用、等找到其他方案再改。

<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>
	<!--
	Require HTTPS for everything except /img (favicon) and /css.
	-->
	<security-constraint>
		<web-resource-collection>
			<web-resource-name>HTTPSOrHTTP</web-resource-name>
			<url-pattern>*.ico</url-pattern>
			<url-pattern>/img/*</url-pattern>
			<url-pattern>/css/*</url-pattern>
		</web-resource-collection>
		<user-data-constraint>
			<transport-guarantee>NONE</transport-guarantee>
		</user-data-constraint>
	</security-constraint>

3. client端安装证书

直接运行 clinent.p12全部默认选项安装即可
之后输入 https://127.0.0.1:8080 访问网站会提示选择证书,点击确定即可正常登录

4. 异常解决

4.1 Invalid keystore format

tomcat运行环境 java版本要与 证书生成的java版本一致

解决办法: 直接将脚本放在服务器上执行 或 将本地版本与服务器一致

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门