WebLogic11g-单双向SSL配置

本贴最后更新于 3267 天前,其中的信息可能已经物是人非

转自: http://dead-knight.iteye.com/blog/1941716

 


2、观察weblogic方便开发部署提供的演示秘钥库 
(秘钥库位置为:\weblogic11\wlserver_10.3\server\lib) 

3、观察ssl的默认演示配置 


那么在开发过程中,只需要在第一幅图上勾选“启用ssl监听端口”即可。 

正式环境中,有哪些变化呢?主要就是更改上面2、3图中的配置,改为实际的秘钥库、以及根据实际的秘钥库来配置SSL。 
网上可以搜到很多weblogic配置ssl相关资料,但是很多配置在实际环境中,都是跑不起来的。究其原因,有两点(1、需要去ca认证中心对产生的证书请求进行签证;2、更有甚者,直接使用keytool来制作,压根没提签证这回事)。weblogic配置ssl,需要标识(私钥和数字证书)、信任(可信证书颁发机构颁发的证书),所以光通过产生私钥直接配置肯定是不行的。 
下面是具体的步骤: 

1、下载openssl工具 
这里使用openssl工具来制作这些秘钥、ca根证书等等。 
openssl的windows安装文件放在网盘中,如果有需要随时下载。网盘地址为: 
http://pan.baidu.com/share/link?shareid=421723979&uk=3222190371 
我的安装路径为:D:\work\OpenSSL 
安装之后,打开cmd进入到bin目录下,即D:\work\OpenSSL\bin。开始制作根证书、秘钥等。 

2、制作CA根证书 
Java代码  
  1. D:\work\OpenSSL\bin>openssl genrsa -out ca/ca-key.pem 1024  
  2. Loading 'screen' into random state - done  
  3. Generating RSA private key, 1024 bit long modulus  
  4. ...............++++++  
  5. ...++++++  
  6. e is 65537 (0x10001)  
  7.   
  8. D:\work\OpenSSL\bin>openssl req -new -out ca/ca-req.csr -key ca/ca-key.pem -config openssl.cnf  
  9. You are about to be asked to enter information that will be incorporated  
  10. into your certificate request.  
  11. What you are about to enter is what is called a Distinguished Name or a DN.  
  12. There are quite a few fields but you can leave some blank  
  13. For some fields there will be a default value,  
  14. If you enter '.', the field will be left blank.  
  15. -----  
  16. Country Name (2 letter code) [AU]:CN  
  17. State or Province Name (full name) [Some-State]:AH  
  18. Locality Name (eg, city) []:HF  
  19. Organization Name (eg, company) [Internet Widgits Pty Ltd]:CAROOT  
  20. Organizational Unit Name (eg, section) []:CA  
  21. Common Name (eg, YOUR name) []:ahhx202  
  22. Email Address []://这里直接回车,不配置  
  23.   
  24. Please enter the following 'extra' attributes  
  25. to be sent with your certificate request  
  26. A challenge password []://这里直接回车,不配置  
  27. An optional company name []:这里直接回车,不配置  
  28.   
  29. D:\work\OpenSSL\bin>openssl x509 -req -in ca/ca-req.csr -out ca/ca-cert.pem -signkey ca/ca-key.pem -days 3650  
  30. Loading 'screen' into random state - done  
  31. Signature ok  
  32. subject=/C=CN/ST=AH/L=HF/O=CAROOT/OU=CA/CN=ahhx202  
  33. Getting Private key  


3、通过keytool工具产生秘钥、及证书请求文件,然后使用openssl上一步产生的ca根证书对证书请求进行签证,并且 
Java代码  
  1. D:\work\OpenSSL\bin>keytool -genkey -alias example -validity 365 -keyalg RSA -keysize 1024 -keypass 123456 -storepass 123456 -keystore example.jks  
  2. 您的名字与姓氏是什么?  
  3.   [Unknown]:  ahhx202  
  4. 您的组织单位名称是什么?  
  5.   [Unknown]:  CAROOT  
  6. 您的组织名称是什么?  
  7.   [Unknown]:  CA  
  8. 您所在的城市或区域名称是什么?  
  9.   [Unknown]:  HF  
  10. 您所在的省/市/自治区名称是什么?  
  11.   [Unknown]:  AH  
  12. 该单位的双字母国家/地区代码是什么?  
  13.   [Unknown]:  CN  
  14. CN=ahhx202, OU=CAROOT, O=CA, L=HF, ST=AH, C=CN是否正确?  
  15.   [否]:  y  
  16.   
  17.   
  18. D:\work\OpenSSL\bin>keytool -certreq -alias example -sigalg MD5withRSA -file example.csr -keypass 123456 -keystore example.jks -storepass 123456  
  19.   
  20. D:\work\OpenSSL\bin>openssl x509 -req -in example.csr -out example.pem -CA ca/ca-cert.pem -CAkey ca/ca-key.pem -days 365 -set_serial 1  
  21. Loading 'screen' into random state - done  
  22. Signature ok  
  23. subject=/C=CN/ST=AH/L=HF/O=CA/OU=CAROOT/CN=ahhx202  
  24. Getting CA Private Key  
  25.   
  26. D:\work\OpenSSL\bin>keytool -import -v -trustcacerts -keypass 123456 -storepass 123456 -alias root -file ca/ca-cert.pem -keystore example.jks  
  27. 所有者: CN=ahhx202, OU=CA, O=CAROOT, L=HF, ST=AH, C=CN  
  28. 发布者: CN=ahhx202, OU=CA, O=CAROOT, L=HF, ST=AH, C=CN  
  29. 序列号: c1dedc7b5ba58f41  
  30. 有效期开始日期: Wed Sep 11 21:37:29 CST 2013, 截止日期: Sat Sep 09 21:37:29 CST  
  31. 2023  
  32. 证书指纹:  
  33.          MD5: 22:26:1A:F1:A0:D8:A9:80:05:CA:12:A2:C0:EB:30:11  
  34.          SHA1: CB:C2:96:74:2A:03:9B:F8:39:F2:19:D8:5D:40:95:E7:25:27:64:73  
  35.          SHA256: 61:48:18:5E:49:27:13:38:69:B7:01:C1:ED:98:59:8A:B8:85:26:A8:D3:  
  36. 5D:2E:EC:1E:DB:7E:59:71:AB:01:34  
  37.          签名算法名称: MD5withRSA  
  38.          版本: 1  
  39. 是否信任此证书? [否]:  Y  
  40. 证书已添加到密钥库中  
  41. [正在存储example.jks]  
  42.   
  43. D:\work\OpenSSL\bin>keytool -import -v -trustcacerts -storepass 123456 -alias example -file example.pem -keystore example.jks  
  44. 证书回复已安装在密钥库中  
  45. [正在存储example.jks]  
  46.   
  47. D:\work\OpenSSL\bin>keytool -import -alias example-ca -trustcacerts -file ca/ca-cert.pem -keystore exampletrust.jks  
  48. 输入密钥库口令:123456  
  49. 再次输入新口令:123456  
  50. 所有者: CN=ahhx202, OU=CA, O=CAROOT, L=HF, ST=AH, C=CN  
  51. 发布者: CN=ahhx202, OU=CA, O=CAROOT, L=HF, ST=AH, C=CN  
  52. 序列号: c1dedc7b5ba58f41  
  53. 有效期开始日期: Wed Sep 11 21:37:29 CST 2013, 截止日期: Sat Sep 09 21:37:29 CST  
  54. 2023  
  55. 证书指纹:  
  56.          MD5: 22:26:1A:F1:A0:D8:A9:80:05:CA:12:A2:C0:EB:30:11  
  57.          SHA1: CB:C2:96:74:2A:03:9B:F8:39:F2:19:D8:5D:40:95:E7:25:27:64:73  
  58.          SHA256: 61:48:18:5E:49:27:13:38:69:B7:01:C1:ED:98:59:8A:B8:85:26:A8:D3:  
  59. 5D:2E:EC:1E:DB:7E:59:71:AB:01:34  
  60.          签名算法名称: MD5withRSA  
  61.          版本: 1  
  62. 是否信任此证书? [否]:  Y  
  63. 证书已添加到密钥库中  

这一步会产生两个秘钥库文件:example.jks、exampletrust.jks在ssl的配置中使用到。先把这两个文件复制到如下位置: 
weblogic11\user_projects\domains\example\ 
即域的根目录下。 

4、秘钥库配置: 
启动domain并登录weblogic控制台,进入如图所示页面: 

点击更改按钮,如下图所示: 

默认是“演示标识和演示信任”,这里选择“定制标识和定制信任”并保存。 
继续配置如下图所示的“标识、信任”, 

由于之前制作秘钥的时候,密码统一为123456,这里可直接按照图中配置即可。密码部分全部输入123456,记得点击“保存”按钮。 
注意:秘钥库类型为空,则表示使用默认的jks类型。 

5、ssl配置: 
选择ssl面板,如下图所示: 

输入私有秘钥别名及私有秘钥密码(这里就是example.jks的相关信息,名称为example,密码为123456) 
输入完成,记得保存。 

至此,单向SSL配置完毕。大家可以把第二篇介绍的springside3的mini-web例子放在上面跑,使用https://localhost:7002/mini-web的url访问,如果按照上面步骤,应该不会有问题。或者直接使用https://localhost:7002/console来访问控制台进行测试。 

双向SSL,在weblogic的配置方面,只需要修改下图的配置即可: 
还是刚才的ssl配置界面,点击下面的高级链接: 

找到“双向客户机证书行为”,选择“请求客户机证书并强制使用”表示如果使用https访问应用时,必须强制客户端浏览器提供证书。 

修改完成,点击保存即可。 

下面是springside3(mini-web)整合ssl时需要修改的配置: 
修改文件:applicationContext-security.xml,如下: 
Java代码  
  1. <!-- http安全配置 -->  
  2. <s:http auto-config="true" use-expressions="true">  
  3.     <s:intercept-url pattern="/css/**" filters="none" />  
  4.     <s:intercept-url pattern="/img/**" filters="none" />  
  5.     <s:intercept-url pattern="/js/**" filters="none" />  
  6.   
  7.     <s:intercept-url pattern="/account/user!save*" access="hasAnyRole('ROLE_修改用户')" />  
  8.     <s:intercept-url pattern="/account/user!delete*" access="hasAnyRole('ROLE_修改用户')" />  
  9.     <s:intercept-url pattern="/account/user*" access="hasAnyRole('ROLE_浏览用户')" />  
  10.     <s:intercept-url pattern="/account/role!save*" access="hasAnyRole('ROLE_修改角色')" />  
  11.     <s:intercept-url pattern="/account/role!delete*" access="hasAnyRole('ROLE_修改角色')" />  
  12.     <s:intercept-url pattern="/account/role*" access="hasAnyRole('ROLE_浏览角色')" />  
  13.     <s:x509 user-service-ref="userDetailsService" subject-principal-regex="CN=(.*?)$"/>  
  14.     <s:form-login login-page="/login.action" default-target-url="/" authentication-failure-url="/login.action?error=true" />  
  15.     <s:logout logout-success-url="/" />  
  16. </s:http>  

以上仅增加了x509的配置即可。注意后面的subject-principal-regex视具体情况而定。默认的是【CN=(.*?),】,而我这里配置的是【CN=(.*?)$】这么改的原因是由于我这边的客户端证书主题标识CN放在最后了,如:【C=CN, ST=AH, L=HF, O=CAROOT, OU=CA, CN=admin】,所以subject-principal-regex就是用来如何匹配CN值的正则表达式。 

现在weblogic已经支持双向ssl认证了,spring security也增加ssl认证的配置了,现在就缺少客户端证书了,不急,下面继续使用openssl来制作客户端证书 
Java代码  
  1. 产生user账号对应的秘钥:  
  2. D:\work\OpenSSL\bin>openssl genrsa -out user-key.pem 1024  
  3. Loading 'screen' into random state - done  
  4. Generating RSA private key, 1024 bit long modulus  
  5. .....................................++++++  
  6. ..++++++  
  7. e is 65537 (0x10001)  
  8.   
  9. 根据user的秘钥产生证书请求csr文件:  
  10. D:\work\OpenSSL\bin>openssl req -new -out user-req.csr -key user-key.pem  
  11. You are about to be asked to enter information that will be incorporated  
  12. into your certificate request.  
  13. What you are about to enter is what is called a Distinguished Name or a DN.  
  14. There are quite a few fields but you can leave some blank  
  15. For some fields there will be a default value,  
  16. If you enter '.', the field will be left blank.  
  17. -----  
  18. Country Name (2 letter code) [AU]:CN  
  19. State or Province Name (full name) [Some-State]:AH  
  20. Locality Name (eg, city) []:HF  
  21. Organization Name (eg, company) [Internet Widgits Pty Ltd]:CAROOT  
  22. Organizational Unit Name (eg, section) []:CA  
  23. Common Name (eg, YOUR name) []:user//这里是指登录账号,与用户表的账号对应  
  24. Email Address []:  
  25.   
  26. Please enter the following 'extra' attributes  
  27. to be sent with your certificate request  
  28. A challenge password []:  
  29. An optional company name []:  
  30.   
  31. 使用openssl之前制作的ca根证书对证书请求文件进行签证:  
  32. D:\work\OpenSSL\bin>openssl x509 -req -in user-req.csr -out user-cert.pem -signkey user-key.pem -CA ca/ca-cert.pem -CAkey ca/ca-key.pem -CAcreateserial -days 365  
  33. Loading 'screen' into random state - done  
  34. Signature ok  
  35. subject=/C=CN/ST=AH/L=HF/O=CAROOT/OU=CA/CN=user  
  36. Getting Private key  
  37. Getting CA Private Key  
  38.   
  39. 将签证之后的证书文件user-cert.pem导出为p12格式文件(p12格式可以被浏览器识别并安装到证书库中)  
  40. D:\work\OpenSSL\bin>openssl pkcs12 -export -clcerts -in user-cert.pem -inkey user-key.pem -out user.p12  
  41. Loading 'screen' into random state - done  
  42. Enter Export Password://不输入密码,为空  
  43. Verifying - Enter Export Password://不输入密码,为空  
  44.   
  45. 将签证之后的证书文件user-cert.pem导入至信任秘钥库中(这里由于没有去ca认证中心购买个人证书,所以只有导入信任库才可进行双向ssl交互)  
  46. D:\work\OpenSSL\bin>keytool -import -alias user -trustcacerts -file user-cert.pem -keystore exampletrust.jks  

需要把最后增加证书的信任秘钥库exampletrust.jks重新复制到domain目录下。 

接下来,双击刚才生成的p12文件,将用户证书安装到浏览器的证书库中,步骤就不说了。 
现在重新启动weblogic的domain,访问https://localhost:7002/mini-web,出现如下图所示界面: 

由于user证书已经安装到浏览器的证书库中了,当访问mini-web时,弹出确认证书窗口 
 
确定之后,需要授予权限,并且输入授权的密码。点击确定按钮之后,直接由spring security根据证书的CN标识完成自动登录,并授予权限,如下图所示: 


至此,weblogic的ssl(单向、双向)总算梳理完毕。不足的地方,还有待补充。
 

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    71 引用 • 535 回帖 • 831 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    127 引用 • 169 回帖
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 6 关注
  • Anytype
    3 引用 • 31 回帖 • 24 关注
  • 叶归
    11 引用 • 50 回帖 • 20 关注
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    20 引用 • 245 回帖 • 231 关注
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 662 关注
  • 电影

    这是一个不能说的秘密。

    122 引用 • 608 回帖
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖
  • iOS

    iOS 是由苹果公司开发的移动操作系统,最早于 2007 年 1 月 9 日的 Macworld 大会上公布这个系统,最初是设计给 iPhone 使用的,后来陆续套用到 iPod touch、iPad 以及 Apple TV 等产品上。iOS 与苹果的 Mac OS X 操作系统一样,属于类 Unix 的商业操作系统。

    89 引用 • 150 回帖 • 1 关注
  • Vditor

    Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React 和 Angular。

    371 引用 • 1856 回帖 • 1 关注
  • 架构

    我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。

    142 引用 • 442 回帖
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖 • 3 关注
  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    29 引用 • 66 回帖 • 3 关注
  • V2Ray
    1 引用 • 15 回帖
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    32 引用 • 108 回帖
  • Outlook
    1 引用 • 5 回帖 • 3 关注
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 96 关注
  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    91 引用 • 59 回帖 • 5 关注
  • gRpc
    11 引用 • 9 回帖 • 99 关注
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    125 引用 • 74 回帖 • 2 关注
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    947 引用 • 1460 回帖 • 1 关注
  • TextBundle

    TextBundle 文件格式旨在应用程序之间交换 Markdown 或 Fountain 之类的纯文本文件时,提供更无缝的用户体验。

    1 引用 • 2 回帖 • 85 关注
  • Hexo

    Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。

    22 引用 • 148 回帖 • 7 关注
  • flomo

    flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。

    6 引用 • 143 回帖 • 1 关注
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    32 引用 • 99 回帖