WebLogic11g-单双向SSL配置

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

转自: 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(单向、双向)总算梳理完毕。不足的地方,还有待补充。
 

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    58 引用 • 22 回帖
  • Spring

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

    944 引用 • 1459 回帖 • 17 关注
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 664 关注
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 483 关注
  • 代码片段

    代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。

    用户在该标签下分享代码片段时需在帖子标题前添加 [css] [js] 用于区分代码片段类型。

    69 引用 • 372 回帖
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    334 引用 • 323 回帖 • 1 关注
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 362 关注
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    6 引用 • 63 回帖
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    117 引用 • 99 回帖 • 212 关注
  • 招聘

    哪里都缺人,哪里都不缺人。

    190 引用 • 1057 回帖
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    186 引用 • 318 回帖 • 302 关注
  • 百度

    百度(Nasdaq:BIDU)是全球最大的中文搜索引擎、最大的中文网站。2000 年 1 月由李彦宏创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。

    63 引用 • 785 回帖 • 175 关注
  • uTools

    uTools 是一个极简、插件化、跨平台的现代桌面软件。通过自由选配丰富的插件,打造你得心应手的工具集合。

    6 引用 • 14 回帖 • 2 关注
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    311 引用 • 546 回帖
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    8112 引用 • 37001 回帖 • 160 关注
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    35 引用 • 200 回帖 • 22 关注
  • SVN

    SVN 是 Subversion 的简称,是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,它的设计目标就是取代 CVS。

    29 引用 • 98 回帖 • 680 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 587 关注
  • danl
    132 关注
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    4 引用 • 16 回帖 • 5 关注
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    125 引用 • 588 回帖
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    34 引用 • 467 回帖 • 742 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖 • 19 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3187 引用 • 8213 回帖
  • 倾城之链
    23 引用 • 66 回帖 • 136 关注