51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

tomcat 配置https 双向认证

  1. 生成https证书 {#1-生成https证书}

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

1.1 Linux生成脚本 {#11-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下生成步骤 {#12-windows下生成步骤}

1.2.1 生成server端证书 {#121-生成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端证书 {#122-生成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文件 {#123-把客户端证书导出为一个单独的cer文件}

keytool -export -alias client -keystore client.p12 -storetype PKCS12 -storepass 123456 -keypass 123456 -file client.cer

1.2.4 导入到服务器的证书库,添加为一个信任证书 {#124-导入到服务器的证书库添加为一个信任证书}

keytool -import -v -file client.cer -keystore server.keystore -storepass 123456
>y

1.2.5 查看服务器的证书库(确定是否导入成功) {#125-查看服务器的证书库确定是否导入成功}

keytool -list -keystore server.keystore
>123456 (密码)
  1. 配置tomcat {#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>
  1. client端安装证书 {#3-client端安装证书}

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

4.1 Invalid keystore format {#41-invalid-keystore-format}

tomcat运行环境 java版本要与 证书生成的java版本一致
解决办法: 直接将脚本放在服务器上执行将本地版本与服务器一致

赞(0)
未经允许不得转载:工具盒子 » tomcat 配置https 双向认证