首页 > 技术文章 > https 访问证书生成及导入客户端

zyz68 2017-07-27 17:23 原文

根据演示需求,用修改hosts 文件的方法添加域名最简单方便(这个非常重要,因为CAS单点登录系统是基于JAVA安全证书的 https 访问, 要使用CAS单点登录必须要配置域名, cas是不能通过ip访问的.),编辑文件 C:\Windows\System32\drivers\etc\hosts 在文件末端添加下面三条信息:

127.0.0.1 server.zhoubang85.com
127.0.0.1 client1.zhoubang85.com
127.0.0.1 client2.zhoubang85.com
  • server.zhoubang85.com  =>> 对应部署cas server的tomcat,这个虚拟域名还用于服务端证书生成

  • client1.zhoubang85.com  =>>  对应部署client1客户端应用的tomcat

  • client2.zhoubang85.com   =>> 对应部署client2客户端应用的tomcat

【注意】:上面3个ip都是127.0.0.1,这是为什么呢?因为我的环境都是在同一台机器,所以ip都是一致的,我们再把不同的服务端和客户端应用,使用不同域名加以区分。一个域名对应一个应用,模拟多端!

【由于CAS是基于HTTPS协议,所以需要配置服务端的tomcat,使之支持SSL安全协议访问】
【说明】:当然也可以设置cas支持http访问,这个之后再补充讨论,下面先配置https协议.

【安全证书配置】:

    1. 打开cmd命令窗口

    2. 生成证书,在cmd窗口输入以下命令:

      keytool -genkey -alias ssodemo -keyalg RSA -keysize 1024 -keypass zhoubang -validity 365 -keystore c:\zhoubang.keystore -storepass zhoubang

       

【说明】:-alias后面的别名可以自定义,-keypass指定证书密钥库的密码, -storepass和前面keypass密码相同,否则下面tomcat 配置https 会访问失败 -keystore指定证书的位置,这里指定放在c盘根目录,密钥库名称可以自定义,这里是zhoubang.keystore 3. 命令输入完成,回车之后,会提示你输入一些资料,见下图:

【注意】:第一个让你输入的“您的名字与姓氏是什么”,请必须输入在C:\Windows\System32\drivers\etc\hosts文件中加入的服务端的域名。

我这里也就是server.zhoubang85.com,为何这么做?

首先cas只能通过域名来访问,不能通过ip访问,同时上方是生成证书,所以要求比较严格,所以如果不这么做的话,及时最终按照教程配置完成,cas也可以正常访问,访问一个客户端应用虽然能进入cas验证首页,但是,当输入信息正确后,cas在回调转入你想访问的客户端应用的时候,会出现No subject alternative names present错误异常信息,这个错误也就是在上面输入的第一个问题答案不是域名导致、或者与hosts文件配置的不一致导致。

      4.导出证书:

    在cmd窗口继续输入以下命令,导出证书:

keytool -export -alias ssodemo -keystore c:\zhoubang.keystore -file c:\ssodemo.crt -storepass zhoubang

【说明】:-alias后面的名称要与生成证书的命令里面的alias的名称一致. –keystore后面指定证书存放的位置,这里我放在C盘根目录,同时证书名称要与【生成证书】对应的命令里的keystore名称一致.这里是zhoubang.keystore,-file后面才crt路径,我也指定在c盘根目录. –storepass的证书密码要与上面输入的密码一致.
如下图所示:

我们再看看c盘下面是否生成crt文件:

      5.客户端导入证书

    在cmd窗口输入命令:

keytool -import -keystore %JAVA_HOME%\jre\lib\security\cacerts -file c:\ssodemo.crt -alias ssodemo

【说明】:-file指定证书的位置,也就是上一步导出证书的位置,即c:\ ssodemo.crt 命令中指定了JAVA_HOME,意思是将证书导入到客户端证书库,也就是jdk证书库中.因为客户端应用运行在本地,需要jdk的支持。

回车之后,会让你输入密钥库口令,注意,这里的密码必须要输入changeit,不能输入上面指定的密码zhoubang,切记,否则导入客户端证书会有问题,如果是多台机器演示,需要在每一台客户端导入该证书,步骤都是一样的。当看到提示“是否信任此证书”,输入y回车即可,见下图:(说明,命令中的-alias后面的别名可以自定义,如果出现【证书未导入,别名<***>已经存在】的错误,该意思是说客户端的密钥库中已经存在该别名证书了,重新指定其他别名即可.)

【注意项】:由于是本地没有证书,证书是自己生成的,所以,务必将生成的证书导入到jre的证书链中,不然是无法支持CAS认证服务的。

 

至此,CAS所需的证书环境,已经配置好。
下面,开始我们的CAS服务、Tomcat、以及多客户端的配置及测试访问。

 

  • 部署CAS-Server相关的Tomcat

    1. 配置HTTPS
      解压apache-tomcat-7.0.57-windows-x64.zip,我本地路径为E:\apache-tomcat-7.0.57,编辑E:\apache-tomcat-7.0.57\conf\server.xml,找到下面片段:  

<!--
    <Connector executor="tomcatThreadPool" port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
-->

去掉注释,修改成:

<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
    maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
    keystoreFile="C:/zhoubang.keystore" keystorePass="zhoubang"
    clientAuth="false" sslProtocol="TLS" />

 

其中,keystoreFile就是创建证书的路径,keystorePass就是创建证书的密码.

推荐阅读