HTTPS的配置和使用

发表时间:2018-03-29 20:09:07 浏览量( 24 ) 留言数( 0 )

学习目标:

1、 掌握使用keytool建立证书

2、tomcat配置ssl,jetty配置ssl

3、shiro的ssl过滤器的使用


学习过程:

一、配置SSL证书

CAS 的传输安全性仅仅依赖与 SSL,开发阶段可以自己建立证书,如果正在上线就需要使用商业的了。

1、服务器中生成证书: 

(注:生成证书时,CN要和服务器的域名相同,如果在本地测试,则使用localhost) 

C:\Program Files\Java\jdk1.8.0_144\bin>keytool -genkey -alias tomcat -keyalg RSA -keystore d:/mykey/tomcat.keystore

输入密钥库口令:

再次输入新口令:

您的名字与姓氏是什么?

  [Unknown]:  localhost

您的组织单位名称是什么?

  [Unknown]:  javadayup

您的组织名称是什么?

  [Unknown]:  javadayup

您所在的城市或区域名称是什么?

  [Unknown]:  GZ

您所在的省/市/自治区名称是什么?

  [Unknown]:  NH

该单位的双字母国家/地区代码是什么?

  [Unknown]:  CN

CN=localhost, OU=javadayup, O=javadayup, L=GZ, ST=NH, C=CN是否正确?

  [否]:  是


输入 <tomcat> 的密钥口令

        (如果和密钥库口令相同, 按回车):



2、将.store文件导入到证书中

 keytool -export -file d:/mykey/tomcat.crt -alias tomcat -keystore d:/mykey/tomcat.keystore


3、将证书tomcat.crt导入到JVM中

C:\Program Files\Java\jdk1.8.0_144\bin>keytool -import -keystore ../jre/lib/security/cacerts -file D:/mykey/tomcat.crt -alias tomcat

输入密钥库口令:

再次输入新口令:

所有者: CN=localhost, OU=javadayup, O=javadayup, L=javadayup, ST=javadayup, C=javadayup

发布者: CN=localhost, OU=javadayup, O=javadayup, L=javadayup, ST=javadayup, C=javadayup

序列号: 1f931e06

有效期开始日期: Fri Mar 30 11:09:00 CST 2018, 截止日期: Thu Jun 28 11:09:00 CST 2018

证书指纹:

         MD5: 34:44:C1:D2:16:FF:8F:59:6F:7F:C9:56:95:AF:9C:72

         SHA1: F4:5B:78:27:9F:FC:C3:3A:DD:F3:DA:62:57:65:4D:3D:EC:96:B8:3E

         SHA256: D1:32:5E:19:A5:0B:05:BD:6D:66:28:8C:1C:B7:6C:A0:10:8D:2A:1A:9B:7C:80:00:E6:B0:DF:0F:12:8B:08:16

         签名算法名称: SHA256withRSA

         版本: 3


扩展:


#1: ObjectId: 2.5.29.14 Criticality=false

SubjectKeyIdentifier [

KeyIdentifier [

0000: E6 54 43 06 EA 64 B1 8C   7E E0 45 75 17 8E DF D9  .TC..d....Eu....

0010: 28 7E AC 77                                        (..w

]

]


是否信任此证书? [否]:  y

证书已添加到密钥库中


二、修改tomcat支持https

1、配置tomcat,因为我们一会需要把cas项目部署到tomcat中,所以这里tomcat也配置一下。

<Connector port="443" SSLEnabled="true" clientAuth="false" 

       keystoreFile="d:/mykey/tomcat.keystore" keystorePass="123456" 

    maxThreads="150"  protocol="HTTP/1.1" scheme="https" secure="true" sslProtocol="TLS"/>


2、启动tomcat

attcontent/dad37a92-2ace-40cb-91d5-eb6f8a215cc4.png



三、jetty插件配置SSL

    在 http://central.maven.org/maven2/org/eclipse/jetty/jetty-distribution/ 上下载最新的Jetty9程序包,解压展开,把etc目录下的jetty.xml, jetty-ssl.xml, jetty-https.xml,jetty-ssl-context.xml 复制到 Eclipse 的项目文件夹中

cp jetty-ssl-context.xml /src/main/resources/config/

cp jetty.xml /src/main/resources/config/

cp jetty-ssl.xml /src/main/resources/config/

cp jetty-https.xml /src/main/resources/config/


   主要修改一下jetty,使用我们上面的证书。

  <Set name="KeyStorePath"><Property name="jetty.base" default="." />/<Property name="jetty.sslContext.keyStorePath" deprecated="jetty.keystore" default="d:/mykey/tomcat.keystore"/></Set>
  <Set name="KeyStorePassword"><Property name="jetty.sslContext.keyStorePassword" deprecated="jetty.keystore.password" default="123456"/></Set>
  <Set name="KeyStoreType"><Property name="jetty.sslContext.keyStoreType" default="JKS"/></Set>
  <Set name="KeyStoreProvider"><Property name="jetty.sslContext.keyStoreProvider"/></Set>
  <Set name="KeyManagerPassword"><Property name="jetty.sslContext.keyManagerPassword" deprecated="jetty.keymanager.password" default="123456"/></Set>
  <Set name="TrustStorePath"><Property name="jetty.base" default="." />/<Property name="jetty.sslContext.trustStorePath" deprecated="jetty.truststore" default="d:/mykey/tomcat.keystore"/></Set>
  <Set name="TrustStorePassword"><Property name="jetty.sslContext.trustStorePassword" deprecated="jetty.truststore.password" default="123456"/></Set>

    还需要修改pom.xml引入这些配置文件

<configuration>
	<jettyConfig>${project.basedir}/src/main/resources/config/jetty-ssl-context.xml,
	  ${project.basedir}/src/main/resources/config/jetty.xml,
	  ${project.basedir}/src/main/resources/config/jetty-ssl.xml,
	  ${project.basedir}/src/main/resources/config/jetty-https.xml
	 </jettyConfig>

	<scanIntervalSeconds>5</scanIntervalSeconds>
	<stopPort>9999</stopPort>
	<webAppConfig>
		<contextPath>/spring</contextPath>
	</webAppConfig>
        <httpConnector>
		<port>9090</port>
	</httpConnector>

</configuration>


四、shiro对SSL的支持

对于SSL的支持,Shiro只是判断当前url是否需要SSL登录,如果需要自动重定向到https进行访问。

<bean id="sslFilter" class="org.apache.shiro.web.filter.authz.SslFilter">  
    <property name="port" value="8443"/>  
</bean>


使用改过滤器

	<!-- Shiro 的Web过滤器 -->
	<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
		<property name="securityManager" ref="securityManager" />
		<!-- loginUrl认证提交地址,如果没有认证将会请求此地址进行认证,请求此地址将由formAuthenticationFilter进行表单认证 -->
		<property name="loginUrl" value="/login.do" />
		<property name="unauthorizedUrl" value="/refuse.do" />
		<!-- 过虑器链定义,从上向下顺序执行,一般将/**放在最下边 -->

		<property name="filters">
			<map>
				<entry key="authc" value-ref="verCodeFormAuthenticationFilter" />
				<entry key="changedPassword" value-ref="changedPassword" />
				<entry key="ssl" value-ref="sslFilter"/>  
			</map>
		</property>


登陆也需要改过滤器

<property name="filterChainDefinitions">  
        <value>  
            /login.jsp = ssl,authc


启动项目,看一下日志已经由ssl了

[INFO] x509=X509@28db2afb(tomcat,h=[],w=[]) for SslContextFactory@5c703860(file:///D:/mykey/tomcat.keystore,file:///D:/mykey/tomcat.keystore)

[INFO] Started ServerConnector@4c9cce17{SSL,[ssl, http/1.1]}{0.0.0.0:8443}

[INFO] Started ServerConnector@63a7af06{HTTP/1.1,[http/1.1]}{0.0.0.0:9090}

[INFO] Started @11542ms

[INFO] Started Jetty Server


访问,如果你直接访问原来的的http://localhost:9090/spring,会自动跳去https的。

https://localhost:8443/spring/login.do