收藏 分销(赏)

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

上传人:xrp****65 文档编号:9855676 上传时间:2025-04-10 格式:DOCX 页数:13 大小:40.17KB 下载积分:10 金币
下载 相关 举报
用Keytool和OpenSSL生成和签发数字证书.docx_第1页
第1页 / 共13页
用Keytool和OpenSSL生成和签发数字证书.docx_第2页
第2页 / 共13页


点击查看更多>>
资源描述
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"。 <Connector className="org.apache.catalina.connector.http.HttpConnector" port="8443" minProcessors="5" maxProcessors="75" enableLookups="true" acceptCount="10" debug="0" scheme="https" secure="true"> <Factory className=".SSLServerSocketFactory" clientAuth="true" protocol="TLS" 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安全连接。 编码 (也用于扩展名) · .DER = 扩展名DER用于二进制DER编码的证书。这些证书也可以用CER或者CRT作为扩展名。比较合适的说法是“我有一个DER编码的证书”,而不是“我有一个DER证书”。 · .PEM = 扩展名PEM用于ASCII(Base64)编码的各种X.509 v3 证书。文件开始由一行"—– BEGIN …“开始。 常用的扩展名 · .CRT = 扩展名CRT用于证书。证书可以是DER编码,也可以是PEM编码。扩展名CER和CRT几乎是同义词。这种情况在各种unix/linux系统中很常见。 · CER = CRT证书的微软型式。可以用微软的工具把CRT文件转换为CER文件(CRT和CER必须是相同编码的,DER或者PEM)。扩展名为CER的文件可以被IE识别并作为命令调用微软的cryptoAPI(具体点就是rudll32.exe cryptext.dll, CyrptExtOpenCER),进而弹出一个对话框来导入并/或查看证书内容。 · .KEY = 扩展名KEY用于PCSK#8的公钥和私钥。这些公钥和私钥可以是DER编码或者PEM编码。 CRT文件和CER文件只有在使用相同编码的时候才可以安全地相互替代。 证书导入 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的实体,它包括公钥、私钥和证书。这个证书是自签名的。<o:p></o:p> 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 f 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 f   其中-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 f 2)    用CA私钥进行签名,也可以到权威机构申请CA签名 openssl ca -in tomcat_client.csr -out tomcat_client.crt -cert ca.crt -keyfile ca.key -notext -config f 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下的f也复制到了这个目录下来。文件名都是以本人使用的来说了: 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 f 生成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 f 4.CSR文件必须有CA的签名才可形成证书.可将此文件发送到verisign等地方由它验证,要交一大笔钱,何不自己做CA呢. openssl req -new -x509 -keyout ca.key -out ca.crt -config f 5.用生成的CA的证书为刚才生成的server.csr,client.csr文件签名: Openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config f Openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -config f 现在我们所需的全部文件便生成了. 另: 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 <alias>]  [-keystore <keystore>] [-storepass <storepass>]  [-storetype <storetype>] [-provider <provider_class_name>]  例如: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 654321 -new 123456 -storepass 888888 -keystore d2aApplet.keystore这一行命令以非交互式的方式修改库中别名为 RapaServer 的证书的密码为新密码 654321,行中的 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
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服