1 基本原理
1.1 SSL简介
SSL 代表安全套接字层,主要用于两个目的:
- 验证网站的身份以及(可选)客户身份
- 在程序之间建立安全的加密连接
SSL 协议为通过网络连接的应用程序提供安全性。
具体来说,SSL 协议提供以下内容:
- 应用程序交换的数据的加密
- 应用程序可以用来验证彼此身份的机制
- 数据完整性,从而保护在客户端和服务器之间流动的数据免受第三方篡改
当使用 SSL 协议时,目标总是向发起者验证自己。可选地,如果目标请求它,发起者可以向目标验证自己。加密使通过网络传输的数据只能被预期的接收者理解。SSL 连接以握手开始,在此期间应用程序交换数字证书,就要使用的加密算法达成一致,并生成用于会话剩余部分的加密密钥。
注意: Oracle WebLogic Server 12c 支持的唯一 SSL 堆栈是 Java 安全套接字扩展 (JSSE) 堆栈。基于 Certicom 的 SSL 实现已被移除且不再受支持。
1.2 SSL 通讯
客户端和服务器之间有两种 SSL 方法:
-
单向 SSL - 使服务器能够向客户端标识自己
使用单向 SSL,服务器必须向客户端提供证书,但客户端不需要向服务器提供证书。客户端必须对服务器进行身份验证,但服务器接受来自任何客户端的连接。单向 SSL 在 Internet 上很常见,客户希望在共享个人数据之前创建安全连接。通常,客户端也会使用 SSL 登录,以便服务器可以对其进行身份验证。
-
双向 SSL - 使客户端能够向服务器识别自己
使用双向 SSL(带有客户端身份验证的 SSL),服务器向客户端提供证书,客户端向服务器提供证书。WebLogic Server 可以配置为要求客户端在完成 SSL 连接之前提交有效且受信任的证书。
1.3 证书体系
通常经过国际认证的CA机构,通过付费形式可以将他们CA证书集成到各个浏览器内置存储空间里,用户打开浏览器访问网页时,浏览器会自动匹配内置的证书,从而实现证书的验证。也就是只要我们付费让这些CA机构给我们签署证书后,我们的网站在浏览器中就会显示安全的HTTPS。
当然如果我们自己创建一个证书,也可以达到这样的效果,只不过需要让使用我们网站的用户,手动去安装我们的证书(从证书的下发到安装,相对来说肯定是不如使用CA安全的)。
那么在下面的文档中,我们将需要有两部分证书:
- CA Root 自签名证书
- 中级证书(我们的系统使用的证书)
其中,CA Root证书,模拟的就是CA机构的证书,用于签发中级证书,中级证书则是可以直接作为Web系统SSL的证书,以实现SSL协议通讯。
通常在Web系统中,我们只要实现单向SSL通信即可,下面也仅记录单向SSL的实施过程。
2 注意事项
- 请安装与Weblogic、Web项目匹配的JDK版本(大版本一致即可)。
- 进入开发者本地电脑中JDK的安装目录中的bin目录,通过调用keytool工具实现证书的创建、签名、导出。
- 以下介绍使用的是Windows平台的命令。
- 以下主要针对单向SSL的实施过程进行说明。
- 下文中任何带文件路径的命令,请提前创建好目录,否则执行命令最终都会失败。
3 生成证书步骤及说明
3.1 创建CA Root自签名证书
-
创建自签名的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 输入 <XX_CA_Root> 的密钥口令 (如果和密钥库口令相同, 按回车):
- 最后一步输入的密钥请保持与第一次输入的密钥一致,否则使用过程中可能会出现异常。
- 根证书的前3个交互项只要统一写颁发根证书的机构名称即可。
- 城市和省市如实填写即可。
- 国家代码固定填写cn,代表中国。
- 另外,请将实际填写的内容保存好,以便证书到期后能够及时更换而不需要变更证书信息。
-
-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
:是导出的可安装在个人电脑上的证书。需要将该证书以安全的途径,下发给用户,让用户自行在个人电脑上安装,注意需要安装在“受信任的根证书颁发机构”证书域下。
3.2 创建中级(系统)证书
-
创建一个新的中级证书
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
:指定证书私钥。- 建议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 输入 <XX_CA_YSystem> 的密钥口令 (如果和密钥库口令相同, 按回车):
- 第一次输入的密钥和最后一次输入的密钥应保持一致。
- 姓氏、组织单位可以任意填写(外网一般写的是域名,这样才能匹配,内网可以写ip),组织名称建议填写根证书机构名称。
- 城市和省市都保持与根证书一致。
- 国家统一填写cn,代表中国。
-
-
生成证书签署请求文件(生成一个待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
:输出的证书文件名称。
- csr格式是待签署的证书文件。
3.3 签署中级(系统)证书
-
利用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
:输出的证书文件名。
- 此处输出的XX_CA_YSystem.cer文件就是签署完毕的中级证书。
3.4 生成Weblogic所需的SSL文件
-
将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 ] ] ******************************************* *******************************************
4 Weblogic SSL配置
- 登录Weblogic管理端,并按如下顺序进入配置界面:
- 打开ssl监听,推荐改为443(默认的ssl端口,这样用户访问不需要输入端口)
-
将右侧配置界面的滚动条拉到底部,点击保存
-
保存完毕后,切换到“密钥库”标签
- 更改密钥库
- 输入以下内容,并点击保存,其中密码短语填写证书密钥即可
-
密钥库:选择 “定制身份和 JAVA 标准信任”。
-
定制身份密钥库:请填写您的 JKS 证书文件路径,例如:
C:\temp\cloud.tencent.com.jks
。 -
定制身份密钥库类型:请填写中级证书密钥。
-
定制身份密钥库密码短语:请填写中级证书密钥。
-
确认定制身份密钥库密码短语:请再次输入您的密码。
-
切换到SSL标签下,修改表单内容并保存
- 身份和信任位置:选择密钥库。
- 私有密钥别名:中级证书密钥的别名。
- 私有密钥密码:中级证书密钥。
- 确认私有密钥密码:中级证书密钥。
- 注意,可以展开高级看一眼,主机名验证 应设置为“无”;双向客户机证书行为 设为"不请求客户机证书"。
5 证书安装
CA Root、中级证书需要以安全的方式,下发给用户,让其安装在自己的个人电脑上,下面以Windows平台为例,介绍安装步骤。
- 双击打开XX_CA_YSystem.cer
-
点击安装证书
-
点击下一步,并按照下图顺序操作
-
点击完成,后续的提示选择“是”,完成安装。
6 其他
其他的相关配置需要研发人员自行查阅相关文档和互联网搜索引擎,例如:如何配置Web项目的web.xml使其强制从http协议转发到https协议上。