证书是单点登录认证系统中很重要的一把钥匙,客户端于服务器的交互安全靠的就是证书;本教程由于是演示所以就自己用JDK自带的keytool工具生成证书;如果以后真正在产品环境中使用肯定要去证书提供商去购买,证书认证一般都是由VeriSign认证,中文官方网站:http://www.verisign.com/cn/
先查看当前的jdk版本:
$ java -version
java version "1.8.0_112"
Java(TM) SE Runtime Environment (build 1.8.0_112-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.112-b16, mixed mode)
用JDK自带的keytool工具生成证书:
注意:
您的名字与姓氏是什么?
[Unknown]: sso.castest.com
这里填写的是你的服务器的域名,https配置完成之后就可以输入这个地址,https://sso.castest.com:8434,后面是端口号,后面会配置
keytool -genkey -alias castest -keyalg RSA -keystore /Users/android/Library/Tomcat8/key/castestkey
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
[Unknown]: sso.castest.com
您的组织单位名称是什么?
[Unknown]: castest.com
您的组织名称是什么?
[Unknown]: csetest
您所在的城市或区域名称是什么?
[Unknown]: Shanghai
您所在的省/市/自治区名称是什么?
[Unknown]: Shanghai
该单位的双字母国家/地区代码是什么?
[Unknown]: CN
CN=sso.castest.com, OU=castest.com, O=csetest, L=Shanghai, ST=Shanghai, C=CN是否正确?
[否]: y
输入 的密钥口令
(如果和密钥库口令相同, 按回车):
$ keytool -export -file /Users/android/Library/Tomcat8/key/castest.crt -alias castest -keystore /Users/android/Library/Tomcat8/key/castestkey
输入密钥库口令:
成功之后就会出现这一句
存储在文件 </Users/android/Library/Tomcat8/key/castest.crt> 中的证书
$ sudo keytool -import -keystore /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/jre/lib/security/cacerts -file /Users/android/Library/Tomcat8/key/castest.crt
Password:
输入密钥库口令:
前面的密码是Mac的用户密码,后面的是你生成证书填写的密码,jdk不同可能路径也不一样,自行修改,成功之后会出现
所有者: CN=sso.castest.com, OU=castest.com, O=csetest, L=Shanghai, ST=Shanghai, C=CN
发布者: CN=sso.castest.com, OU=castest.com, O=csetest, L=Shanghai, ST=Shanghai, C=CN
序列号: 5a300333
有效期开始日期: Sun Mar 19 11:13:00 CST 2017, 截止日期: Sat Jun 17 11:13:00 CST 2017
证书指纹:
MD5: 0A:A6:F2:C3:2E:CE:F0:DD:D4:62:DD:CC:B6:9B:50:7E
SHA1: 2B:7A:F3:DC:12:8C:3F:66:6B:DC:15:9F:40:AE:29:A4:56:D9:BF:0A
SHA256: 9C:DE:5B:C9:7D:9C:E3:A3:BD:C2:71:FE:FD:0D:5E:6A:30:74:03:ED:9F:55:ED:47:4A:8A:04:EB:CB:16:DB:AD
签名算法名称: SHA256withRSA
版本: 3
扩展:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: D0 86 F3 26 62 5C F7 21 E6 24 04 98 B8 98 3B AB ...&b\.!.$....;.
0010: F2 7D 47 FC ..G.
]
]
是否信任此证书? [否]: y
证书已添加到密钥库中
打开”./Tomcat8/conf/server.xml”
插入这么一段代码
<Connector port="8434" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="/Users/android/Library/Tomcat8/key/castestkey"
keystorePass="castest"/>
注意,这时候你的端口号是8434
在创建证书证书的时候,我们指定的服务器域名为sso.castest.com。为了能使本地浏览器通过域名能正常访问,我们需要修改增加host配置
1,前往文件夹输入/private/etc/,点击前往就可打开,可以看到一个hosts文件
2,需要修改这个文件,但是这个文件需要权限,简单的方式是把这个文件复制出来,在加上这段代码,然后粘贴回去
127.0.0.1 sso.castest.com
$ cd /Users/android/Library/Tomcat8/bin
$ startup.sh
Using CATALINA_BASE: /Users/android/Library/Tomcat8
Using CATALINA_HOME: /Users/android/Library/Tomcat8
Using CATALINA_TMPDIR: /Users/android/Library/Tomcat8/temp
Using JRE_HOME: /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home
Using CLASSPATH: /Users/android/Library/Tomcat8/bin/bootstrap.jar:/Users/android/Library/Tomcat8/bin/tomcat-juli.jar
Tomcat started.
这时候你可能没有权限执行.sh文件,要求执行权限
$ sudo chmod +x *.sh
再执行
$ startup.sh
打开浏览器,输入网址 https://sso.castest.com:8434/,这时候可能会提示网址不安全,继续跳转就可以,这时候会显示tomcat经典页面