本方案生成证书需要java环境
- #!/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
- !
-
-
- 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 国家/地区代码
-
- 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 国家/地区代码
-
- keytool -export -alias client -keystore client.p12 -storetype PKCS12 -storepass 123456 -keypass 123456 -file client.cer
-
- keytool -import -v -file client.cer -keystore server.keystore -storepass 123456
- >y
-
- keytool -list -keystore server.keystore
- >123456 (密码)
-
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>
-
- 直接运行 clinent.p12全部默认选项安装即可
- 之后输入 https://127.0.0.1:8080 访问网站会提示选择证书,点击确定即可正常登录
-
tomcat运行环境 java版本要与 证书生成的java版本一致
解决办法: 直接将脚本放在服务器上执行 或 将本地版本与服务器一致