keytool Commands (SSL)

Table 11-1  Commonly Used keytool Commands 
Command
Description
keytool -genkey -keystore  keystorename  -storepass  keystorepassword
Generates a new private key entry and self-signed digital certificate in a keystore. If the keystore does not exist, it is created.
keytool -import -alias  aliasforprivatekey  
-file 
privatekeyfilename.pem
-keypass  privatekeypassword
-keystore  keystorename  -storepass  keystorepassword
Updates the self-signed digital certificate with one signed by a trusted CA.
keytool -import -alias  rootCA  -trustcacerts -file  RootCA.pem  -keystore trust.jks -storepass  keystorepassword
keytool -import -alias intermediate -trustcacerts -file  Intermediate.pem  -keystore  keystorename  -storepass  keystorepassword
Creates a custom keystore to be used for holding an intermediate CA certificate.
  • The first keytool command creates the keystore, trust.jks, which holds the root CA certificate.
  • The second keytool command imports the intermediate CA certificate into trust.jks.
This enables WebLogic Server’s SSL implementation to transmit the intermediate certificate with the server’s public certificate to the client during the SSL handshake.
keytool -import -alias  aliasfortrustedca  -trustcacerts -file trustedcafilename.pem  -keystore  keystorename  -storepass  keystorepassword
Loads a trusted CA certificate into a keystore. If the keystore does not exist, it is created.
keytool -certreq -alias alias
-sigalg
  sigalg
-file  certreq_file
-keypass  privatekeypassword
-storetype  keystoretype
-keystore  keystorename
-storepass  keystorepassword
Generates a Certificate Signing Request (CSR), using the PKCS#10 format, and a self-signed certificate with a private key.
Stores the CSR in the specified  certreq_file, and the certificate/private key pair as a key entry in the specified keystore under the specified alias.
keytool -list -keystore  keystorename
Displays what is in the keystore.
keytool -delete -keystore  keystorename  -storepass  keystorepassword  -alias privatekeyalias
Deletes the entry identified by the specified alias from the keystore.
keytool -help
Provides online help for keytool.


前提:
已经安装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.       BEA的WebLogic Server 10.3,安装目录BEA_HOME=D:\Program Files\bea


3.       VS2008(Microsoft 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的环境,这样才可以调用keytool,java 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.pem与supportcert.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.jks与server\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.cer与client\ 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.pem与clientcert.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.jks与client\clientsupport.jks两个文件。提供给JAVA程序即可以使用。


步骤五:创建JAVA调用证书(像Web Service中的message-level级别需要用此证书)
下面是在IE客户端的证书基础上进行的。
1. 拷贝client.crt为client-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转换为pkcs8的der格式。
openssl pkcs8 -topk8 -inform PEM -outform DER -in client\client-key.pem -out client\client-key-pkcs8.der -nocrypt


用最终生成的client-cert.der与client-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


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值