您好,欢迎来到抵帆知识网。
搜索
您的当前位置:首页用Keytool和OpenSSL生成和签发数字证书

用Keytool和OpenSSL生成和签发数字证书

来源:抵帆知识网
4.2.1 建立工作目录 demoCA

4.2.2 生成CA私钥以及自签名根证书 4.2.2.1 生成CA私钥

openssl genrsa -out demoCA\\ca-key.pem 1024

4.2.2.2 生成待签名证书

openssl req -new -out demoCA\\ca-req.csr -key demoCA\\ca-key.pem

4.2.2.3 用CA私钥进行自签名

openssl x509 -req -in demoCA\\ca-req.csr -out ca\\ca-cert.pem -signkey demoCA\\ca-key.pem -days 365

4.3 设置Tomcat 4.x

在本文中用符号\"%JDK_HOME%\"来表示JDK的安装位置,用符号\"%TCAT_HOME%\" 表示Tomcat的安装位置。

4.3.1建立工作目录 mkdir server

4.3.2 生成server端证书 4.3.2.1 生成KeyPair

%JDK_HOME%\\bin\\keytool -genkey -alias tomcat_server -validity 365 -keyalg RSA -keysize 1024 -keypass 123456 -storepass 123456 -keystore server\\server_keystore

4.3.2.2 生成待签名证书

%JDK_HOME%\\bin\\keytool -certreq -alias tomcat_server -sigalg MD5withRSA -file server\\server.csr -keypass 123456 -keystore server\\server_keystore -storepass changeit

4.3.2.3 用CA私钥进行签名

openssl x509 -req -in server\\server.csr -out server\\server-cert.pem -CA demoCA\\ca-cert.pem -CAkey demoCA\\ca-key.pem -CAserial demoCA/ca-cert.srl -CAcreateserial -days 365

4.3.2.4 导入信任的CA根证书到JSSE的默认位置

(%JDK_ROOT %/jre/security/cacerts)

%JDK_HOME%\\bin\\ keytool -import -v -trustcacerts -storepass 123456 -alias my_ca_root -file demoCA\\ca-cert.pem

-keystore %JDK_HOME%\\jre\\lib\\security\\cacerts

4.3.2.5 把CA签名后的server端证书导入keystore

%JDK_HOME%\\bin\\keytool -import -v -trustcacerts -storepass changeit -alias tomcat_server -file server\\server-cert.pem -keystore server\\server_keystore

%JDK_HOME%\\bin\\keytool -import -v -alias tomcat_server -file server\\server-cert.pem -storepass 123456 -keystore server_keystore

4.3.2.6 查看server端证书

keytool -list -keystore %JDK_HOME%\\jre\\lib\\security\\cacerts keytool -list -keystore server\\server_keystore

4.3.3 修改server.xml使Tomcat支持SSL

首先找到以下内容,去掉对其的注释。然后参照红色部分修改。如果配置Tomcat不验证客户身份,可以设置

clientAuth=\"false\"。

acceptCount=\"10\" debug=\"0\" scheme=\"https\" secure=\"true\">

keystoreFile=\"%TCAT_HOME%/conf/server_keystore\" keystorePass=\"changeit\" />

然后把文件server\\server_keystore复制到目录%TCAT_HOME%\\conf\\下。

4.4 在IE中安装个人证书 4.4.1 建立工作目录 mkdir client

4.4.2 生成client私钥并用CA私钥签名

4.4.2.1 生成client私钥

openssl genrsa -out client\\client-key.pem 1024

4.4.2.2 生成待签名证书

openssl req -new -out client\\client-req.csr -key client\\client-key.pem

4.4.2.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 365

4.4.2.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

4.4.2.5 安装信任的根证书

#把ca\\ca-key.pem改名为ca\\ca-key.cer,在client端的IE中使用\"工具 ' Internet选项 ' 内容 ' 证书 ' 导入\"把我们生成的CA根证书导入,使其成为用户信任的CA。

运行这条命令CA才能被导入fireFox的服务器证书列表

中:/usr/local/ssl/ca# openssl pkcs12 -export -clcerts -in ca-cert.pem -inkey ca-key.pem -out ca.p12

4.4.3 安装个人证书

把client.p12导入到client端的IE中作为个人证书,导入过程同4.4.2.5。

4.5 用IE浏览器使用SSL协议访问Tomcat

4.5.1 启动Tomcat 4.x

执行%TCAT_HOME%\\bin\\startup.bat启动Tomcat 4.x

4.5.2 用IE访问Tomcat 4.x

在IE浏览器的地址栏中输入https://localhost:8443,如果前面的操作都正确的话,应该可以看到Tomcat的欢迎页面。同时状态栏上的小锁处于闭合状态,表示您已经成功地与服务器建立了要求客户端验证的SSL安全连接。

http://www.blogjava.net/duanzhimin528/archive/2010/06/22/324182.html

编码 (也用于扩展名)

.DER = 扩展名DER用于二进制DER编码的证书。这些证书也可以用或者作为扩展名。比较合适的说法是“我有一个DER编码的证书”,而不是“我有一个DER证书”。

• .PEM = 扩展名PEM用于ASCII(Base)编码的各种X.509 v3 证书。文件开始由一行\"—– BEGIN …“开始。

常用的扩展名

. = 扩展名用于证书。证书可以是DER编码,也可以是PEM编码。扩展名和几乎是同义词。这种情况在各种unix/linux系统中很常见。

• = 证书的微软型式。可以用微软的工具把文件转换为文件(和必须是相同编码的,DER或者PEM)。扩展名为的文件可以被IE识别并作为命令调用微软的cryptoAPI(具体点就是rudll32.exe cryptext.dll, CyrptExtOpenCER),进而弹出一个对话框来导入并/或查看证书内容。

• .KEY = 扩展名KEY用于PCSK#8的公钥和私钥。这些公钥和私钥可以是DER编码或者PEM编码。

文件和文件只有在使用相同编码的时候才可以安全地相互替代。

证书导入

Der/Cer证书导入:

要从某个文件中导入某个证书,使用keytool工具的-import命令: keytool -import -file mycert.der -keystore mykeystore.jks

如果在 -keystore 选项中指定了一个并不存在的密钥仓库,则该密钥仓库将被创建。

如果不指定 -keystore 选项,则缺省密钥仓库将是宿主目录中名为 .keystore 的文件。如果该文件并不存在,则它将被创建。

创建密钥仓库时会要求输入访问口令,以后需要使用此口令来访问。可使用-list命令来查看密钥仓库里的内容:

keytool -list -rfc -keystore mykeystore.jks

P12格式证书导入:

keytool无法直接导入PKCS12文件。

第一种方法是使用IE将pfx证书导入,再导出为cert格式文件。使用上面介绍的方法将其导入到密钥仓库中。这样的话仓库里面只包含了证书信息,没有私钥内容。

第二种方法是将pfx文件导入到IE浏览器中,再导出为pfx文件。

新生成的pfx不能被导入到keystore中,报错:keytool错误: java.lang.Exception: 所输入的不是一个 X.509 认证。新生成的pfx文件可以被当作keystore使用。但会报个错误as unknown attr1.3.6.1.4.1.311.17.1,查了下资料,说IE导出的就会这样,使用Netscape就不会有这个错误. 第三种方法是将pfx文件当作一个keystore使用。但是通过微软的证书管理控制台生成的pfx文件不能直接使用。keytool不认此格式,报keytool错误: java.io.IOException: failed to decrypt safe contents entry。需要通过OpenSSL转换一下:

1)openssl pkcs12 -in mycerts.pfx -out mycerts.pem

2)openssl pkcs12 -export -in mycerts.pem -out mykeystore.p12 通过keytool的-list命令可检查下密钥仓库中的内容:

keytool -rfc -list -keystore mykeystore.p12 -storetype pkcs12 这里需要指明仓库类型为pkcs12,因为缺省的类型为jks。这样此密钥仓库就即包含证书信息也包含私钥信息。 P7B格式证书导入:

keytool无法直接导入p7b文件。

需要将证书链RootServer.p7b(包含根证书)导出为根rootca.cer和子rootcaserver.cer 。

将这两个证书导入到可信任的密钥仓库中。

keytool -import -alias rootca -trustcacerts -file rootca.cer -keystore testkeytrust.jks

遇到是否信任该证书提示时,输入y

keytool -import -alias rootcaserver -trustcacerts -file rootcaserver.cer -keystore testkeytrust.jks

一)keytool生成私钥文件(.key)和签名请求文件(.csr),openssl签发数字证书

J2SDK在目录%JAVA_HOME%/bin提供了密钥库管理工具Keytool,用于管理密钥、证书和证书链。Keytool工具的命令在JavaSE6中已经改变,不过以前的命令仍然支持。Keytool也可以用来管理对称加密算法中的密钥。

最简单的命令是生成一个自签名的证书,并把它放到指定的keystore文件中: keytool -genkey -alias tomcat -keyalg RSA -keystore c:/mykey

如果c:/mykey文件不存在,keytool会生成这个文件。按照命令的提示,回答一系列问题,就生成了数字证书。注意,公共名称(cn)应该是服务器的域名。这样keystore中就存在一个别名为tomcat的实体,它包括公钥、私钥和证书。这个证书是自签名的。

Keytool工具可以从keystore中导出证书,但是不能导出私钥。对于配置apache这样的服务器,就不太方便。这种情况下就完全用OpenSSL吧,下面将会介绍。不过keytool对于J2EE AppServer是很有用的,它们就是用keystore存储证书链的。keystore的作用类似于windows存放证书的方式,不过跨平台了,^_^下面用Keytool生成CSR(Certificate Signing Request),并用OpenSSL生成CA签名的证书。

1. 准备

1) 在bin目录下新建目录 demoCA、demoCA/certs、demoCA/certs 、 demoCA/newcerts 2) 在demoCA建立一个空文件 index.txt

3) 在demoCA建立一个文本文件 serial, 没有扩展名,内容是一个合法的16进制数字,例如 0000 4) 配置环境变量PATH,加入%JAVA_HOME%/bin,本文用的JavaSDK1.6

2. 生成CA的自签名证书

openssl req -new -x509 -keyout ca.key -out ca.crt -config openssl.cnf

3. 生成server端证书 1) 生成KeyPair生成密钥对

keytool -genkey -alias tomcat_server -validity 365 -keyalg RSA -keysize 1024 -keypass 123456 -storepass 123456 -keystore server_keystore 输入common name时,要和服务器的域名保持一致。 2) 生成证书签名请求

keytool -certreq -alias tomcat_server -sigalg MD5withRSA -file tomcat_server.csr -keypass 123456 -storepass 123456 -keystore server_keystore 3) 用CA私钥进行签名,也可以到权威机构申请CA签名。

openssl ca -in tomcat_server.csr -out tomcat_server.crt -cert ca.crt -keyfile ca.key -notext -config openssl.cnf

其中-notext表示不要把证书文件的明文内容输出到文件中去,否则在后面用keytool导入到keystore时会出错。

4) 导入信任的CA根证书到keystore

keytool -import -v -trustcacerts -alias my_ca_root -file ca.crt -storepass 123456 -keystore server_keystore

5) 把CA签名后的server端证书导入keystore

keytool -import -v -alias tomcat_server -file tomcat_server.crt -storepass 123456 -keystore server_keystore 6) 查看server端证书

keytool -list -v -keystore server_keystore 可以看到tomcat_server的证书链长度是2

4. 生成client端证书 1) 生成客户端CSR

openssl genrsa -des3 -out tomcat_client.key 1024

openssl req -new -key tomcat_client.key -out tomcat_client.csr -config openssl.cnf 2) 用CA私钥进行签名,也可以到权威机构申请CA签名

openssl ca -in tomcat_client.csr -out tomcat_client.crt -cert ca.crt -keyfile ca.key -notext -config openssl.cnf 3) 生成PKCS12格式证书

openssl pkcs12 -export -inkey tomcat_client.key -in tomcat_client.crt -out tomcat_client.p12

4) 使用Keytool列出pkcs12证书的内容:

keytool -rfc -list -keystore tomcat_client.p12 -storetype pkcs12

二)openssl生成私钥文件(.key)和签名请求文件(.csr),以及签发数字证书

操作目录是openssl/bin(没办法改不了环境变量,如果你可以改的话,就不用在这个目录下工作了),为了方便本人把apps下的openssl.cnf也复制到了这个目录下来。文件名都是以本人使用的来说了: 1.首先要生成服务器端的私钥(key文件): openssl genrsa -des3 -out server.key 1024

运行时会提示输入密码,此密码用于加密key文件(参数des3便是指加密算法,当然也可以选用其他你认为安全的算法.),以后每当需读取此文件(通过openssl提供的命令或API)都需输入口令.如果觉得不方便,也可以去除这个口令,但一定要采取其他的保护措施! 去除key文件口令的命令:

openssl rsa -in server.key -out server.key

2.openssl req -new -key server.key -out server.csr -config openssl.cnf

生成Certificate Signing Request(CSR),生成的csr文件交给CA签名后形成服务端自己的证书.屏幕上将有提示,依照其指示一步一步输入要求的个人信息即可. 3.对客户端也作同样的命令生成key及csr文件: openssl genrsa -des3 -out client.key 1024

openssl req -new -key client.key -out client.csr -config openssl.cnf

4.CSR文件必须有CA的签名才可形成证书.可将此文件发送到verisign等地方由它验证,要交一大笔钱,何不自己做CA呢.

openssl req -new -x509 -keyout ca.key -out ca.crt -config openssl.cnf 5.用生成的CA的证书为刚才生成的server.csr,client.csr文件签名:

Openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf Openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -config openssl.cnf 现在我们所需的全部文件便生成了. 另:

client使用的文件有:ca.crt,client.crt,client.key server使用的文件有:ca.crt,server.crt,server.key

.crt文件和.key可以合到一个文件里面,本人把2个文件合成了一个.pem文件(直接拷贝过去就行了) ---------------------------------------------------

合并证书文件(crt)和私钥文件(key): #cat client.crt client.key > client.pem #cat server.crt server.key > server.pem

JDK中keytool常用命令

-genkey 在用户主目录中创建一个默认文件\".keystore\还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书 -alias 产生别名

-keystore 指定密钥库的名称(产生的各类信息将不在.keystore文件中

-keyalg 指定密钥的算法

-validity 指定创建的证书有效期多少天 -keysize 指定密钥长度

-storepass 指定密钥库的密码 -keypass 指定别名条目的密码

-dname 指定证书拥有者信息 例如: \"CN=sagely,OU=atr,O=szu,L=sz,ST=gd,C=cn\" -list 显示密钥库中的证书信息 keytool -list -v -keystore sage -storepass .... -v 显示密钥库中的证书详细信息

-export 将别名指定的证书导出到文件 keytool -export -alias caroot -file caroot.crt -file 参数指定导出到文件的文件名

-delete 删除密钥库中某条目 keytool -delete -alias sage -keystore sage

-keypasswd 修改密钥库中指定条目口令 keytool -keypasswd -alias sage -keypass .... -new .... -storepass ... -keystore sage

-import 将已签名数字证书导入密钥库 keytool -import -alias sage -keystore sagely -file sagely.crt

导入已签名数字证书用keytool -list -v 以后可以明显发现多了认证链长度,并且把整个CA链全部打印出来。

1.证书的显示 -list

[-v | -rfc] [-alias ]

[-keystore ] [-storepass ]

[-storetype ] [-provider ]

例如:keytool -list -v -alias RapaServer -keystore cacerts -storepass 12345678

keytool -list -v -keystore d2aapplet.keystore -storepass 12345678 -storetype IAIKKeystore

2.将证书导出到证书文件

例如:keytool -export -keystore monitor.keystore -alias monitor -file monitor.cer

将把证书库 monitor.keystore 中的别名为 monitor 的证书导出到 monitor.cer 证书文件中,它包含证书主体的信息及证书的公钥,不包括私钥,可以公开。

keytool -export -keystore d2aApplet.keystore -alias RapaServer -file Rapa.cert -storetype IAIKKeystore

3.将keystore导入证书中

这里向Java默认的证书 cacerts导入Rapa.cert

keytool -import -alias RapaServer -keystore cacerts -file Rapa.cert -keystore cacerts 4.证书条目的删除

keytool的命令行参数 -delete 可以删除密钥库中的条目,如: keytool -delete -alias RapaServer -keystore d2aApplet.keystore ,这条命令将 d2aApplet.keystore 中的 RapaServer 这一条证书删除了。 5.证书条目口令的修改

使用 -keypasswd 参数,如:keytool -keypasswd -alias RapaServer -keystore d2aApplet.keystore,可以以交互的方式修改 d2aApplet.keystore证书库中的条目为 RapaServer 的证书。

Keytool -keypasswd -alias RapaServer -keypass 6321 -new 123456 -storepass 888888

-keystore d2aApplet.keystore这一行命令以非交互式的方式修改库中别名为 RapaServer 的证书的密码为新密码 6321,行中的 123456 是指该条证书的原密码, 888888 是指证书库的密码。

由于原有的格式都是pem格式,在导入证书库之前(即导入jks文件)需要转换成cer 格式,生成文件cacert.cer、tomcatcert.cer

openssl x509 -in cacert.pem -out cacert.cer

openssl x509 -in tomcatcert.pem -out tomcatcert.cer

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- dfix.cn 版权所有 湘ICP备2024080961号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务