SSL 代表安全套接字层,主要用于两个目的:
SSL 协议为通过网络连接的应用程序提供安全性。
具体来说,SSL 协议提供以下内容:
当使用 SSL 协议时,目标总是向发起者验证自己。可选地,如果目标请求它,发起者可以向目标验证自己。加密使通过网络传输的数据只能被预期的接收者理解。SSL 连接以握手开始,在此期间应用程序交换数字证书,就要使用的加密算法达成一致,并生成用于会话剩余部分的加密密钥。
注意: Oracle WebLogic Server 12c 支持的唯一 SSL 堆栈是 Java 安全套接字扩展 (JSSE) 堆栈。基于 Certicom 的 SSL 实现已被移除且不再受支持。
客户端和服务器之间有两种 SSL 方法:
单向 SSL - 使服务器能够向客户端标识自己
使用单向 SSL,服务器必须向客户端提供证书,但客户端不需要向服务器提供证书。客户端必须对服务器进行身份验证,但服务器接受来自任何客户端的连接。单向 SSL 在 Internet 上很常见,客户希望在共享个人数据之前创建安全连接。通常,客户端也会使用 SSL 登录,以便服务器可以对其进行身份验证。
双向 SSL - 使客户端能够向服务器识别自己
使用双向 SSL(带有客户端身份验证的 SSL),服务器向客户端提供证书,客户端向服务器提供证书。WebLogic Server 可以配置为要求客户端在完成 SSL 连接之前提交有效且受信任的证书。
通常经过国际认证的CA机构,通过付费形式可以将他们CA证书集成到各个浏览器内置存储空间里,用户打开浏览器访问网页时,浏览器会自动匹配内置的证书,从而实现证书的验证。也就是只要我们付费让这些CA机构给我们签署证书后,我们的网站在浏览器中就会显示安全的HTTPS。
当然如果我们自己创建一个证书,也可以达到这样的效果,只不过需要让使用我们网站的用户,手动去安装我们的证书(从证书的下发到安装,相对来说肯定是不如使用CA安全的)。
那么在下面的文档中,我们将需要有两部分证书:
其中,CA Root证书,模拟的就是CA机构的证书,用于签发中级证书,中级证书则是可以直接作为Web系统SSL的证书,以实现SSL协议通讯。
通常在Web系统中,我们只要实现单向SSL通信即可,下面也仅记录单向SSL的实施过程。
创建自签名的CA Root证书
keytool.exe -genkeypair -alias XX_CA_Root -keyalg RSA -validity 3650 -keystore D:/path/XX_CA_Root.jks
说明:
命令交互部分:
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
[Unknown]: XX_CA_Root
您的组织单位名称是什么?
[Unknown]: XX_CA_Root
您的组织名称是什么?
[Unknown]: XX_CA_Root
您所在的城市或区域名称是什么?
[Unknown]: shanghai
您所在的省/市/自治区名称是什么?
[Unknown]: shanghai
该单位的双字母国家/地区代码是什么?
[Unknown]: cn
CN=XX_CA_Root, OU=XX_CA_Root, O=XX_CA_Root, L=shanghai, ST=shanghai, C=cn是否正
确?
[否]: y
输入 的密钥口令
(如果和密钥库口令相同, 按回车):
-genkeypair
:生成密钥对,它的选项包括:
-keyalg
:密钥算法名称,指定RSA;-validity
:用于指定证书有效期(天),建议5~10年,然后去主动更换一次,可以让系统相对更安全一些;-keystore
:密钥库名称,我们此处由于要给Weblogic使用,就将文件扩展名指定为.jks
。通常个人站点只要生成根证书,并离线保存好即可。
如果要让用户的浏览器信任由根证书签发的证书(在浏览器上将你的站点https标记为安全的),就需要导出根证书,让用户在个人电脑上安装(可选)
keytool.exe -exportcert -alias XX_CA_Root -keystore D:/path/XX_CA_Root.jks -file D:/path/XX_CA_Root.cer
说明:
-exportcert
:导出证书,它的选项有:
-alias
:填CA Root的别名;-keystore
:密钥库名称;-file
:输出文件名。xxx.cer
:是导出的可安装在个人电脑上的证书。需要将该证书以安全的途径,下发给用户,让用户自行在个人电脑上安装,注意需要安装在“受信任的根证书颁发机构”证书域下。创建一个新的中级证书
keytool.exe -genkeypair -alias XX_CA_YSystem -keyalg RSA -validity 3650 -keystore D:/path/XX_CA_YSystem.jks
说明:
提示,可以通过命令选项指定证书的密钥库密钥和私钥:
keytool.exe -genkeypair -alias yyy -keyalg RSA -validity 3650 -keystore -keypass 123456 -storepass 123456 D:/path/yyy.jks
-storepass
:指定密钥库密钥。-keypass
:指定证书私钥。命令交互部分:
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
[Unknown]: XX_CA_YSystem
您的组织单位名称是什么?
[Unknown]: XX_CA_YSystem
您的组织名称是什么?
[Unknown]: XX_CA_Root
您所在的城市或区域名称是什么?
[Unknown]: shanghai
您所在的省/市/自治区名称是什么?
[Unknown]: shanghai
该单位的双字母国家/地区代码是什么?
[Unknown]: cn
CN=XX_CA_YSystem, OU=XX_CA_YSystem, O=XX_CA_Root, L=shanghai, ST=shanghai, C=cn
是否正确?
[否]: y
输入 的密钥口令
(如果和密钥库口令相同, 按回车):
生成证书签署请求文件(生成一个待CA机构签署的文件)
keytool.exe -certreq -alias XX_CA_YSystem -keystore D:/path/XX_CA_YSystem.jks -file D:/path/XX_CA_YSystem.csr
说明:
-certreq
:生成证书请求,其选项有:
-alias
:填中级证书的别名;-keystore
:密钥库名称;-file
:输出的证书文件名称。利用CA Root证书对中级证书进行签署
keytool.exe -gencert -alias XX_CA_Root -keystore D:/path/XX_CA_Root.jks -infile D:/path/XX_CA_YSystem.csr -outfile D:/path/XX_CA_YSystem.cer
说明:
-gencert
:根据证书请求生成证书,其选项有:
-alias
:别名,填CA Root证书的别名;-infile
:证书请求文件名;-outfile
:输出的证书文件名。将CA Root证书导入中级证书keystore文件
keytool.exe -import -alias XX_CA_Root -keystore D:/path/XX_CA_YSystem.jks -trustcacerts -file D:/path/XX_CA_Root.cer -noprompt
将签署好的中级证书导入keystore文件
keytool.exe -import -alias XX_CA_YSystem -keystore D:/path/XX_CA_YSystem.jks -trustcacerts -file D:/path/XX_CA_YSystem.cer -noprompt
导入完毕后,检查一下中级keystore文件
keytool.exe -list -v -keystore D:\path\XX_CA_YSystem.jks
正常看到的应该是下面这样:
密钥库类型: JKS
密钥库提供方: SUN
您的密钥库包含 2 个条目
别名: xx_ca_ysystem
创建日期: 2022-3-23
条目类型: PrivateKeyEntry
证书链长度: 2
证书[1]:
所有者: CN=XX_CA_YSystem, OU=XX_CA_YSystem, O=XX_CA_Root, L=shanghai, ST=shangha
i, C=cn
发布者: CN=XX_CA_Root, OU=XX_CA_Root, O=XX_CA_Root, L=shanghai, ST=shanghai, C=c
n
序列号: 611c8668
有效期开始日期: Wed Mar 23 10:22:31 CST 2022, 截止日期: Tue Jun 21 10:22:31 CST
2022
证书指纹:
MD5: 58:1D:8D:67:F5:29:81:2D:B9:CD:B1:99:E5:92:D9:53
SHA1: D8:FF:D7:6E:6D:8C:4D:54:F0:A1:19:A6:38:85:5E:64:05:5C:58:34
SHA256: 3E:47:92:12:43:2B:67:0A:92:DB:9A:45:00:7E:BD:A5:EA:85:F9:88:B3:
51:30:67:7A:76:29:9B:3E:4C:FB:83
签名算法名称: SHA256withRSA
版本: 3
扩展:
#1: ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: DD A5 B7 2D 23 C1 55 2F 7E 7F 04 0F 91 51 B0 56 ...-#.U/.....Q.V
0010: C9 23 DA 6C .#.l
]
]
#2: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 02 8B 77 8D 5A 73 17 8E 4A 9E 94 47 98 6A F4 20 ..w.Zs..J..G.j.
0010: 44 53 3E 73 DS>s
]
]
证书[2]:
所有者: CN=XX_CA_Root, OU=XX_CA_Root, O=XX_CA_Root, L=shanghai, ST=shanghai, C=c
n
发布者: CN=XX_CA_Root, OU=XX_CA_Root, O=XX_CA_Root, L=shanghai, ST=shanghai, C=c
n
序列号: 57b5fd49
有效期开始日期: Wed Mar 23 10:09:29 CST 2022, 截止日期: Sat Mar 20 10:09:29 CST
2032
证书指纹:
MD5: FC:0C:C9:BF:61:D9:5D:41:4F:5C:2A:6E:61:3B:82:6E
SHA1: 69:54:D2:9D:5E:50:5F:60:C1:AB:04:BF:C6:0C:BD:D1:1F:47:D6:B7
SHA256: 42:52:08:8A:56:DE:69:99:8C:F3:99:E8:03:88:4C:60:A6:E5:91:A4:9D:
69:81:C5:85:DC:78:C0:BC:F2:B9:C3
签名算法名称: SHA256withRSA
版本: 3
扩展:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: DD A5 B7 2D 23 C1 55 2F 7E 7F 04 0F 91 51 B0 56 ...-#.U/.....Q.V
0010: C9 23 DA 6C .#.l
]
]
*******************************************
*******************************************
别名: xx_ca_root
创建日期: 2022-3-23
条目类型: trustedCertEntry
所有者: CN=XX_CA_Root, OU=XX_CA_Root, O=XX_CA_Root, L=shanghai, ST=shanghai, C=c
n
发布者: CN=XX_CA_Root, OU=XX_CA_Root, O=XX_CA_Root, L=shanghai, ST=shanghai, C=c
n
序列号: 57b5fd49
有效期开始日期: Wed Mar 23 10:09:29 CST 2022, 截止日期: Sat Mar 20 10:09:29 CST
2032
证书指纹:
MD5: FC:0C:C9:BF:61:D9:5D:41:4F:5C:2A:6E:61:3B:82:6E
SHA1: 69:54:D2:9D:5E:50:5F:60:C1:AB:04:BF:C6:0C:BD:D1:1F:47:D6:B7
SHA256: 42:52:08:8A:56:DE:69:99:8C:F3:99:E8:03:88:4C:60:A6:E5:91:A4:9D:
69:81:C5:85:DC:78:C0:BC:F2:B9:C3
签名算法名称: SHA256withRSA
版本: 3
扩展:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: DD A5 B7 2D 23 C1 55 2F 7E 7F 04 0F 91 51 B0 56 ...-#.U/.....Q.V
0010: C9 23 DA 6C .#.l
]
]
*******************************************
*******************************************
将右侧配置界面的滚动条拉到底部,点击保存
保存完毕后,切换到“密钥库”标签
密钥库:选择 “定制身份和 JAVA 标准信任”。
定制身份密钥库:请填写您的 JKS 证书文件路径,例如:C:\temp\cloud.tencent.com.jks
。
定制身份密钥库类型:请填写中级证书密钥。
定制身份密钥库密码短语:请填写中级证书密钥。
确认定制身份密钥库密码短语:请再次输入您的密码。
切换到SSL标签下,修改表单内容并保存
CA Root、中级证书需要以安全的方式,下发给用户,让其安装在自己的个人电脑上,下面以Windows平台为例,介绍安装步骤。
其他的相关配置需要研发人员自行查阅相关文档和互联网搜索引擎,例如:如何配置Web项目的web.xml使其强制从http协议转发到https协议上。