WebLogic11g-单双向SSL配置

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

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

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    4 引用 • 7 回帖 • 4 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 618 关注
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 598 关注
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    21 引用 • 37 回帖 • 513 关注
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 605 关注
  • SEO

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

    35 引用 • 200 回帖 • 24 关注
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • 一些有用的避坑指南。

    69 引用 • 93 回帖
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 383 回帖 • 3 关注
  • 链书

    链书(Chainbook)是 B3log 开源社区提供的区块链纸质书交易平台,通过 B3T 实现共享激励与价值链。可将你的闲置书籍上架到链书,我们共同构建这个全新的交易平台,让闲置书籍继续发挥它的价值。

    链书社

    链书目前已经下线,也许以后还有计划重制上线。

    14 引用 • 257 回帖
  • 深度学习

    深度学习(Deep Learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。

    40 引用 • 40 回帖
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    19 引用 • 31 回帖 • 1 关注
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖 • 7 关注
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 175 关注
  • IBM

    IBM(国际商业机器公司)或万国商业机器公司,简称 IBM(International Business Machines Corporation),总公司在纽约州阿蒙克市。1911 年托马斯·沃森创立于美国,是全球最大的信息技术和业务解决方案公司,拥有全球雇员 30 多万人,业务遍及 160 多个国家和地区。

    16 引用 • 53 回帖 • 124 关注
  • BookxNote

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

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

    1 引用 • 1 回帖 • 1 关注
  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 21 关注
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    164 引用 • 407 回帖 • 527 关注
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 426 关注
  • WiFiDog

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

    1 引用 • 7 回帖 • 544 关注
  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 609 关注
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 291 关注
  • Vditor

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

    313 引用 • 1666 回帖
  • 域名

    域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。

    43 引用 • 208 回帖 • 1 关注
  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    103 引用 • 126 回帖 • 447 关注
  • Hibernate

    Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。

    39 引用 • 103 回帖 • 685 关注
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    161 引用 • 473 回帖