实现对SSL的支持
1.生成数字证书
生成步骤大概如下:
- 设定数字证书的路径:D:\Program Files\httpssl\localhost.keystore
- 利用jdk的keytool工具生成证书,大概涉及到的参数如下:
- -keyalg 指定算法
- -keysize 指定密钥大小,
- -validity 指定有效期,单位为天
- -alias 别名
- -keypass 指定私钥使用密码
- -keystore 指定密钥库名称
- -storepass 证书库的使用密码,从里面提取公钥时需要密码
- -dname CN拥有者名字,已办为网站名或IP+端口,如:www.baidu.com
- OU组织机构名 O组织名 L城市 ST州或省 C国家代码
#执行生成命令
keytool -genkey -keystore "D:\Program Files\httpssl\dhope.keystore" -alias dhope -keyalg RSA
输入密钥库口令:
密钥库口令太短 - 至少必须为 6 个字符
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
[Unknown]: dhope
您的组织单位名称是什么?
[Unknown]: xz.com
您的组织名称是什么?
[Unknown]: xz.com
您所在的城市或区域名称是什么?
[Unknown]: chengdu
您所在的省/市/自治区名称是什么?
[Unknown]: sichuan
该单位的双字母国家/地区代码是什么?
[Unknown]: cn
CN=dhope, OU=xz.com, O=xz.com, L=chengdu, ST=sichuan, C=cn是否正确?
[否]: y
输入 <dhope> 的密钥口令
(如果和密钥库口令相同, 按回车):
2 开放tomcat的ssl
#原内容:
<--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
-->
#修改后:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="D:\Program Files\httpssl\dhope.keystore"
keystorePass="admindhope"/>
# 其中keystroeFile是生成密钥的路径
# keystorePass是生成密钥时的密码
3 调整ShiroFilter
#新增
<bean id="sslFilter" class="org.apache.shiro.web.filter.authz.SslFilter">
<property name="port" value="8443"/>
</bean>
#默认的SslFilter端口为443
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
……
<property name="filters">
<map>
……
<entry key="ssl" value-ref="sslFilter"/>
……
</map>
</property>
……
</bean>
<bean name="shiroFilterChainDefinitions" class="java.lang.String">
……
/login=ssl,authc
……
</bean>
这样就实现了基于Shiro的SSL认证