系统安全-WebLogic自制数字证书(转帖)

2010-05-13  茅骏骅 

前提:
已经安装WebLogic9应用服务器,需要使用SSL(单向或者是双向),但是不想用DEMO版本的证书,而是想用自己的CA签名的证书(或者是自己创建的证书申请,然后由信任机构签名的证书也可以参考本文)

其实,用自己的CA签名的证书有很多好处(bea不推荐在生产环境下用DEMO证书,而信任机构签名收费不菲):可以任意创建服务器所需要的证书(SSL通信需要证书,Web Service也需要独立的签名证书及加密证书等等);可以用自己的CA任意创建IE客户端证书;可以用自己的CA创建存储到jks中的证书以提供给JAVA程序使用等等。

具体工作:
需要做的是生成CA自签名证书,然后利用CA自签名证书再生成服务器证书与其它客户端证书,当然,还有其它的一些额外操作(如将客户端证书存放到服务器的truststore中等)

环境要求:

操作系统是Windows XP SP3,安装的软件有:

1.       jdk1.6.0_10,安装目录JAVA_HOME=D:\Program Files\Java\jdk1.6.0_10

2.       BEAWebLogic Server 10.3,安装目录BEA_HOME=D:\Program Files\bea

3.       VS2008Microsoft Visual Studio 9.0,主要安装VC)或者Microsoft Visual Studio 6.0(主要是VC++),安装目录MVS_HOME=D:\Program Files\Microsoft Visual Studio 9.0\VC

 

在实现过程中需要的软件有:

Perl for win32:(ActivePerl-5.10.1.1006-MSWin32-x86-291086.msi

  Openssl:(openssl-0.9.8k.tar.tar

      安装 activeperl

ActivePerl下载的是.msi文件,点击后可以安装,安装后,添加环境变量:

PERL_HOME= D:\Program Files\Perl

path环境变量中增加:%PERL_HOME%\bin;

安装operssl

下载openssl的压缩源文件以后,解开压缩到目录D:\openssl-0.9.8k目录,通过DOS窗口,进入 到 D:\openssl-0.9.8k目录后,执行

1.       perl Configure VC-WIN32 --prefix=c:/openssl

其中c:/openssl为准备安装openssl的目录,注意要写作/,否则会在编译cversion.c文件时出现错误信息。

2.       cd  D:\Program Files\Microsoft Visual Studio 9.0\VC\bin

然后在该目录输入 >VCVARS32.BAT。注册环境变量。

    (注:找到VCVARS32.BAT所在的VC安装目录就行,上面的地址是我电脑上的目录)

3.       cd D:\openssl-0.9.8k

4.       ms\do_ms

  如果上述执行没有错误,则创建相应的安装目录c:/openssl,然后执行

5.       编译 nmake -f ms\ntdll.mak

6.       测试 nmake -f ms\ntdll.mak test

7.       安装 nmake -f ms\ntdll.mak install

安装openSSL,编译的时间比较长,请耐心等待,并且确认没有错误。

Openssl安装成功以后,需要增加如下的环境变量:

    OPENSSL_HOME=C:\openSSL

  在path中添加:%OPENSSL_HOME%\bin

 

增加环境变量:

OPENSSL_CONF=%OPENSSL_HOME%\openssl.cnf

对于各个软件的初始化设置,主要是设置环境变量,通过我的电脑右键,属性高级环境变量,添加如下:

JAVA_HOME=D:\Program Files\Java\jdk1.6.0_10

BEA_HOME=D:\Program Files\bea

MVS_HOME=D:\Program Files\Microsoft Visual Studio 9.0\VC

CLASSPATH=%BEA_HOME%\wlserver_10.3\server\lib\weblogic.jar; %JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar

INCLUDE=%MVS_HOME%\include

LIB=%MVS_HOME%\lib

Path环境变量中增加(编译openssl使用和java相关命令使用)

%MVS_HOME%\bin;%MVS_HOME%\ce\bin;%BEA_HOME%\jdk160_05\bin;%JAVA_HOME%\bin

 

 

在生成证书和私钥时,我们使用了openssl软件,由于openssl软件在windows上安装需要perl环境,因此我们需要下载Active Perl相关软件,并且需要安装VC++或者Delphi,以便编译安装openssl

设置工作目录为myDir,目录结构为:
  myDir\ca            
目录,存放CA证书
  myDir\server        
目录,存放服务器证书
  myDir\client        
目录,存放客户端证书
  myDir\ca\ca-cert.srl 
文件,仅包括"00"两个字符,执行OpenSSL签名证书时需要读取此配置文件(每签名一个证书,此数加一)
  myDir\openssl.cnf   
文件,从X:\OpenSSL\bin目录拷贝过来,执行OpenSSL生成待签名证书命令时需要使用此配置文件。
  myDir\setEnv.cmd    
文件,内容为:
call X:\bea91\weblogic91\samples\domains\wl_server\setExamplesEnv.cmd
作用为设置WebLogic的环境,这样才可以调用keytooljava utils.pem2der等命令。

 

 

开始:
打开命令行窗口,切换到myDir目录。然后执行setEnv.cmd命令,以设置环境。

步骤一:创建自签名CA证书
1.
生成CA私钥
openssl genrsa -out ca\ca-key.pem 1024

2. 生成待签名证书
openssl req -new -out ca\ca-req.csr -key ca\ca-key.pem -config openssl.cnf
(
这是交换式命令,需要输入证书信息)

3. CA私钥进行自签名
openssl x509 -req -in ca\ca-req.csr -out ca\ca-cert.pem -signkey ca\ca-key.pem -days 7300

步骤二:创建服务器证书
1.
生成KeyPair
keytool -genkey -alias support -keyalg RSA -keysize 1024 -dname "cn=127.0.0.1, ou=Mycompany Support WebService, o=Mycompany Inc,l=Beijing, st=Beijing, c=CN" -keypass mypassword -keystore server\support.jks -storepass support  -validity 7300

2. 生成待签名证书
keytool -certreq -alias support -sigalg "MD5withRSA" -file server\certreq.pem -keypass mypassword -keystore server\support.jks -storepass support

3. CA私钥进行签名
openssl x509 -req -in server\certreq.pem -out server\supportcert.pem -CA ca\ca-cert.pem -CAkey ca\ca-key.pem -days 7300

4. 导入信任的CA根证书到指定的jks文件
keytool -import -alias rootca -trustcacerts -file ca\ca-cert.pem -keystore server\supporttrust.jks -storepass rootca

5. 导入服务器证书到指定的jks文件
...
下面,需要用编辑器合并ca-cert.pemsupportcert.pem的内容,ca-cert.pem在前面,请注意不要留下空格之类的字符在文档里面;然后再执行下面的命令,否则会报"keytool错误: java.lang.Exception: 无法从回复中建立链接"的错误...

keytool -import -alias support -trustcacerts -file server\supportcert.pem -keypass mypassword -keystore server\support.jks -storepass support

6. 到这儿,服务器证书制作完成。最终输出为:server\support.jksserver\supporttrust.jks两个文件,可以在WebLogic 9的控制台中配置SSL的相关设置以使用新的证书。具体操作可以参考bea公司的在控制中配置SSL的文档,或者是参考附录中的SWF

步骤三:创建IE客户端证书(在双向SSL的情况下使用)

1. 生成client私钥
openssl genrsa -out client\client-key.pem 1024

2. 生成待签名证书
openssl req -new -out client\client-req.csr -key client\client-key.pem -config openssl.cnf
(
这是交换式命令,需要输入证书信息)

3. CA私钥进行签名
openssl x509 -req -in client\client-req.csr -out client\client.crt -signkey client\client-key.pem -CA ca\ca-cert.pem -CAkey ca\ca-key.pem -CAcreateserial -days 7300

4. 生成client端的个人证书
因为JSSE1.0.2没有完全实现了对PKCS#12格式文件的操作(只能读取,不能输出),所以在这里需要用openssl制作client端的个人证书(已经包含私钥)
openssl pkcs12 -export -clcerts -in client\client.crt -inkey client\client-key.pem -out client\client.p12

5. 生成信任的根证书,把ca\ca-cert.pem拷贝为ca\ca-cert.cer
copy ca\ca-cert.pem ca\ca-cert.cer

6. 到这儿,IE客户端证书制作完成。最终输出为ca\ca-cert.cerclient\ client.p12这两个证书,需要在IE中安装此两个证书 (直接单击文件名即可,安装个人证书的过程可能需要输入创建时的密码-如果创建个人证书时输入了密码的话)


步骤四:创建JAVA调用keystore(Web Service中的2way SSL需要使用此keystore)

类似服务器证书的制作,但是要注意:
The SSL package of J2SE requires that the password of the client's private key must be the same as the password of the client's keystore.

1. 创建KeyPair
keytool -genkey -alias clientsupport -keyalg RSA -keysize 1024 -dname "CN=127.0.0.1, OU=test webservice, O=test, L=Beijing, ST=Beijing, C=CN" -keypass support -keystore client\clientsupport.jks -storepass support -validity 7300

2. 生成待签名证书
keytool -certreq -alias clientsupport -sigalg "MD5withRSA" -file client\clientreq.pem -keypass support -keystore client\clientsupport.jks -storepass support

3. CA私钥进行签名
openssl x509 -req -in client\clientreq.pem -out client\clientcert.pem -CA ca\ca-cert.pem -CAkey ca\ca-key.pem -days 7300

4. 生成truststore
keytool -import -alias rootca -trustcacerts -file ca\ca-cert.pem -keystore client\supporttrust.jks -storepass rootca

5. 生成keystore
...
下面,需要合并ca-cert.pemclientcert.pem的内容,ca-cert.pem在前面;然后...
keytool -import -alias clientsupport -trustcacerts -file client\clientcert.pem -keypass support -keystore client\clientsupport.jks -storepass support


6.
到这儿,JAVA调用的keystore制作完成。最终输出为client\supporttrust.jksclient\clientsupport.jks两个文件。提供给JAVA程序即可以使用。

步骤五:创建JAVA调用证书(Web Service中的message-level级别需要用此证书)
下面是在IE客户端的证书基础上进行的。
1. 
拷贝client.crtclient-cert.pem,这样就有了client-cert.pem证书与client-key.pem私钥。
copy client\client.crt client\client-cert.pem

2.将client-cert.pem转换为der格式。
java utils.pem2der client\client-cert.pem

3.. client-key.pem转换为pkcs8der格式。
openssl pkcs8 -topk8 -inform PEM -outform DER -in client\client-key.pem -out client\client-key-pkcs8.der -nocrypt

用最终生成的client-cert.derclient-key-pkcs8.der两个文件提供给JAVA客户端调用。

其它操作:
1.
查看keystore内容
keytool -list -keystore server\supporttrust.jks
keytool -list -keystore client\clientsupport.jks

2. 加其它证书到服务器truststore
先转换服务器证书DER格式为PEM格式:
openssl x509 -inform DER -outform PEM -in client-cert.der -out client-cert.pem

然后导入到truststore
keytool -import -alias demowebca -trustcacerts -file client-cert.pem -keystore server\supporttrust.jks -storepass rootca

 

642°/6408 人阅读/2 条评论 发表评论

茅骏骅  2010-05-13

最近在做系统安全的测试,请有这方面测试经验的朋友多给些指导,谢谢。


邓泽明  2011-07-20

我倒,怎么测试没通过哦。。证书都是产生了,绝对没错。。囧。。


登录 后发表评论
茅骏骅
访客 3908
茅骏骅 的其他博文 更多