知识大全 Java中使用密钥库和算法创建数字证书

Posted

篇首语:书史足自悦,安用勤与劬。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java中使用密钥库和算法创建数字证书相关的知识,希望对你有一定的参考价值。

Java中使用密钥库和算法创建数字证书  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   实例说明

  本实例使用J SDK提供的keytool工具用默认的密钥库和算法创建几个数字证书

  运行程序

  keytool程序运行时加上命令行参数–genkey即可

  在命令行中输入 keytool  –genkey 将自动使用默认的算法生成公钥和私钥 并以交互方式获得公钥持有者的信息 其交互过程如下 其中带下划线的字符为用户键盘输入的内容 其他为系统提示的内容

  C:\\>keytool genkey

  输入keystore密码  

  您的名字与姓氏是什么?

  [Unknown] Liao Weimin

  您的组织单位名称是什么?

  [Unknown] Neork Center

  您的组织名称是什么?

  [Unknown]   Guangzhou University

  您所在的城市或区域名称是什么?

  [Unknown]   ZB

  您所在的州或省份名称是什么?

  [Unknown] Guangzhou

  该单位的两字母国家代码是什么

  [Unknown]   CN

  CN=Liao Weimin OU=Neork Center O=Guangzhou University L=ZB ST=Guangzhou C=CN 正确吗?

  [否]   是

  输入的主密码

  (如果和 keystore 密码相同 按回车)   abcdefg

  C:\\>

  以上操作将生成一个公钥和一个私钥 这里并未指定使用何算法 将使用默认的DSA算法

  同时上述操作将创建一个数字证书 证书中包含了新生成的公钥和一个名字为 CN=Liao Weimin OU=Neork Center O=Guangzhou University L=ZB ST=Guangzhou C=CN 的主体(人或机构)的对应关系 其中 CN=Liao Weimin OU=Neork Center O=Guangzhou University L=ZB ST=Guangzhou C=CN 是X 格式的全名 包含了主体的国家 州 城市 机构 单位和名字 这样 这个证书将证明相应的公钥是这个人或机构所拥有的

  以上生成的公钥 私钥和证书都保存在用户的主目录中创建一个默认的文件 keystore 中 如果是Windows 系统 用户主目录是c:\\ Documents and Setting\\用户名

  由于 keystore 中包含了私钥 所以是一个需要保密的文件 因此上述操作提示为该文件设置一个密码 输入keystore密码 这里因为是第一次使用该密钥库 因此输入的密码 将成为该默认的密钥库的密码(实际使用时应该设置复杂的口令) 以后再使用这个密钥库时必须提供这个口令才可以使用

  以上操作最后还提示 输入的主密码 这里 mykey 是默认的别名 使用该名字可以在密钥库 keystore 中找到对应的公钥 私钥和证书 此处输入的密码是对应于该别名的私钥的密码 密钥库中每个别名可以使用不同的密码加以保护

   使用别名

  密钥库中可以存放多个条目(公钥/私钥对和证书) 它们在密钥库中以别名(alias)区分 小节在使用keytool工具时没有指定别名 因此系统使用了默认的别名mykey 如果再次运行 keytool –genkey 则系统将提示 keytool错误 java lang Exception: 没有创建键值对 别名 已经存在 因此当密钥库中有多个公钥/私钥对和证书时 应该使用别名

   实例说明

  本实例使用J SDK提供的keytool工具用在默认的密钥库中利用别名增加多个证书

  运行程序

  keytool程序运行时加上命令行参数–alias即可

  在命令行中输入 keytool  –genkey  –alias  liaoweimin 将自动使用默认的算法生成别名为liaoweimin 的公钥和私钥 并以交互方式获得公钥持有者的信息 其交互过程如下

  C:\\>keytool genkey alias liaoweimin

  输入keystore密码  

  您的名字与姓氏是什么?

  [Unknown]   Liao Weimin

  您的组织单位名称是什么?

  [Unknown]   Neork Center

  您的组织名称是什么?

  [Unknown]   SHU

  您所在的城市或区域名称是什么?

  [Unknown]   ZB

  您所在的州或省份名称是什么?

  [Unknown]   SH

  该单位的两字母国家代码是什么

  [Unknown]   CN

  CN=Liao Weimin OU=Neork Center O=SHU L=ZB ST=SH C=CN 正确吗?

  [否]   是

  输入的主密码

  (如果和 keystore 密码相同 按回车)

  其中 输入keystore密码 后面输入的内容必须和 小节相同的密码 否则将无法访问密钥库 并提示如下错误 keytool错误 java io IOException: Keystore was tampered with or password was incorrect 这是因为 小节已经为默认的密钥库设置了该密码 以后使用该密钥库都必须提供该密码

  在 输入 的主密码 的提示后这里不妨直接按 回车键 这样该私钥将使用和密钥库相同的密码 来保护

  以上操作将在用户主目录的 keystore 文件中增加一对公钥和私钥(DSA算法) 同时增加一个数字证书 证书中包含了新生成的公钥和一个名字为 CN=Liao Weimin OU=Neork Center O=Guangzhou University L=ZB ST=Guangzhou C=CN 的主体(人或机构)的对应关系

   使用指定的算法和密钥库和有效期

   和 小节中使用的是默认的算法和密钥库 本节介绍如何自己指定算法和密钥库

   实例说明

  本实例使用J SDK提供的keytool工具用RSA算法和在指定的密钥库mykeystore中创建公钥/私钥对和证书

  运行程序

  keytool的keyalg参数可以指定密钥的算法 如果需要指定密钥的长度 可以再加上keysize参数 密钥长度默认为 位 使用DSA算法时 密钥长度必须在 到 之间 并且是 的整数倍

  Keytool的 keystore参数可以指定密钥库的名称 密钥库其实是存放密钥和证书的文件 密钥库对应的文件如果不存在自动创建

   validity参数可以指定所创建的证书有效期是多少天

  如在命令行中输入 keytool genkey alias mytest keyalg RSA keysize keystore mykeystore validity 将使用RSA算法生成 位的公钥/私钥对及整数 密钥长度为 位 证书有效期为 天 使用的密钥库为mykeystore文件

  C:\\java\\ch >keytool genkey alias mytest keyalg RSA keysize keystore mykeystore validity

  输入keystore密码   wshr ut

  您的名字与姓氏是什么?

  [Unknown]   Liao Weimin

  您的组织单位名称是什么?

  [Unknown]   Neork Center

  您的组织名称是什么?

  [Unknown]   Guangzhou University

  您所在的城市或区域名称是什么?

  [Unknown]   ZB

  您所在的州或省份名称是什么?

  [Unknown]   Guangzhou

  该单位的两字母国家代码是什么

  [Unknown]   CN

  CN=Liao Weimin OU=Neork Center O=Guangzhou University L=ZB ST=Guangzhou C=CN 正确吗?

  [否]   是

  输入的主密码

  (如果和 keystore 密码相同 按回车)

  C:\\java\\ch >

  由于当前目录下没有mykeystore文件 因此以上操作将在当前目录建立文件名为mykeystore的文件 并提示输入一个密码加以保护 输入keystore密码 因为这里使用的密钥库和 小节及 小节不是同一个文件 因此这里输入的密码和 小节及 小节没有必要一致 这里不妨设置为 wshr ut 这样 以后再使用这个密钥库文件时必须提供该密码

  对其中的 输入的主密码 这里不妨直接按回车键 这样mykeysotre文件中的mytest条目将使用和密钥库相同的密码 wshr ut

   使用Keytool将数字证书导出到文件

   实例说明

  本实例使用J SDK提供的keytool工具将指定的证书从密钥库导出为编码过和没编码过两种格式的文件

  运行程序

  使用keytool的export参数可以将别名指定的证书导出到文件 文件名通过file参数指定 如输入如下命令

  C:\\java\\ch >keytool export alias liaoweimin file liaoweimin cer

  输入keystore密码  

  保存在文件中的认证

  则将默认密钥库中的liaoweimin 条目对应的证书导出到文件liaoweimin cer中 由于命令行中没有用storepass给出密码 因此屏幕提示输入keystore密码 由于证书中不包含私钥 因此不需要条目的主密码

  该操作完成后将在当前目录中创建liaoweimin cer文件 该文件即是默认密钥库中的liaoweimin 条目对应的证书 它包含了公钥和主体的对应关系 内容也可以公开

  输入如下命令则可以指定密钥库

  C:\\java\\ch >keytool export alias lf file lf cer keystore lfkeystore –storepass wshr ut

  保存在文件中的认证

  该操作完成后将在当前目录中创建lf cer文件

  如果用文本编辑器打开liaoweimin cer或lf cer 将会发现它是二进制文件 有些内容无法显示 这不利于公布证书 在导出证书时加上 rfc参数则可以使用一种可打印的编码格式来保存证书 如

  C:\\java\\ch > keytool export alias mytest file mytest cer  keystore mykeystore  storepass wshr ut rfc

  保存在文件中的认证

  则当前目录下将增加一个文件mytest cer 其内容是编码过的 可以在屏幕上显示 拷贝或打印 如图 所示 (打印内容不同)

   使用Keytool从文件中显示证书

   实例说明

  本实例使用J SDK提供的keytool工具将 小节导出的证书文件显示出来

  运行程序

  使用keytool的printcert参数可以将 小节导出到证书文件详细内容显示出来 文件名称通过file参数指定 如

  C:\\java\\ch >keytool printcert file  lf cer

  (见自己的屏幕)

  对编码过的证书可以同样显示 如

  C:\\java\\ch >keytool printcert file  mytest cer

  (见自己的屏幕)

   在Windows中从文件显示证书

   实例说明

  本实例在Windows中直接显示 小节导出的证书文件

  运行程序

   小节导出的证书文件中 只要文件名以 cer为后缀 Windows操作系统就可以直接识别 如在Windows中双击lf cer图标 将出现窗口 其中包含了证书的所有者 颁发者 有效期等信息 这些信息和使用keytool显示出的信息一致

  由于该证书是用自己的私钥对该证书进行数字签名的 即自己给自己签发的证书 因此窗口中显示警告信息 该证书发行机构根证书没受信任

  假设您用 jarsigner 工具来签名 Java 归档 (JAR) 文件 需要使用这一文件的客户机将认证您的签名

  认证签名的一种方法是先将您的公钥证书作为 可信任 项导入它们的密钥仓库中 您可以将证书导出并将其提供给客户机 例如 假设项的别名为 mykey 您可以用以下命令将您的证书导出到名为 MJ cer 的文件中

  keytool export alias mykey file MJ cer

  有了该证书以及已被签名的 JAR 文件 客户机就可以用 jarsigner 工具来认证您的签名

  更改特征名但保留密钥对

  假设 譬如说因为您换了部门或搬到另一个城市去了而改变了您的特征名 如果愿意 您仍然可以使用您先前使用的公钥/私钥对而只对特征名进行更新 例如 假设您的名字叫 Susan Miller 并用别名 sMiller 和以下的特征名创建了初始密钥项

   cn=Susan Miller ou=Finance Department o=BlueSoft c=us

  假设您从财务部门换到了会计部门 您仍然可使用先前所生成的公钥/私钥对 而用以下方法对特征名进行更新 首先 复制您的密钥项

  keytool keyclone alias sMiller dest sMillerNew

  (您将得到要求输入密钥仓库口令和初始密钥口令及目标密钥口令的提示 因为在命令行没有提供这些信息 )现在 您需要更改与复制项关联的证书链以使链中的第一个证书使用您的新特征名 先用相应名称生成自签名证书

  keytool selfcert alias sMillerNew

   dname cn=Susan Miller ou=Accounting Department o=BlueSoft c=us

  然后根据该新证书中的信息生成证书签名请求

  keytool certreq alias sMillerNew

  当您得到 CA 认证答复后 将其导入

  keytool import alias sMillerNew file VSSMillerNew cer

  导入认证答复后 您也许会要删除使用旧特征名的初始密钥项

  keytool delete alias sMiller

  将认证后的CA根证书导入密钥库 以便于用这个公钥证书来进行认证签名其它的证书

cha138/Article/program/Java/hx/201311/27201

相关参考

知识大全 java数字图像处理常用算法

    前些时候做毕业设计用java做的数字图像处理方面的东西这方面的资料ms比较少发点东西上来大家共享一下主要就是些算法有自己写的有人家的还有改人家的有的算法

知识大全 一个用JAVA开发的会话密钥程序,可能对你有所帮助

一个用JAVA开发的会话密钥程序,可能对你有所帮助  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 为测试 Java 应用程序生成证书链

为测试Java应用程序生成证书链  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  学习如何创建数字

知识大全 java中使用MD5加密算法进行加密

java中使用MD5加密算法进行加密  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在各种应用系

知识大全 Java中常用的加密算法MD5,SHA,RSA

Java中常用的加密算法MD5,SHA,RSA  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  M

知识大全 java api混排算法

  混排(Shuffling)      混排算法所做的正好与sort相反:它打乱在一个List中可能有的任何排列的踪迹也就是说基于随机源的输入重排该List这样的排列具有相同的可能性(假设随机源是公

知识大全 java如何创建jar文件

  并不是所有类型的Java应用程序都能打包到单独的一个JAR文件中去必须符合一定的条件一个Java应用程序的所有文件才能打包到一个文件中去另外JAR文件有两种一种是有清单(manifest)文件的一

知识大全 为Java创建Pair类

为Java创建Pair类  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java中对于多个返回参

知识大全 Java SE 6中XML数字签名标准Java接口

JavaSE6中XML数字签名标准Java接口  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  级

知识大全 java与android之间的安全通讯

  实际上就是非对称密钥加密RSA  但为什么不使用jca这些java自带的呢?因为android是非sun的虚拟机其实现方法有不同在现实使用中老是报错而且网上几乎没有资料谈到这些所以干脆自己写纯ja