WebLogic11g-单双向SSL配置(以Springside3为例)

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

猜你喜欢

转载自lishuaishuai.iteye.com/blog/2393865