参考网址:http://www.cnblogs.com/youxia/p/java002.html

阅读目录

  • 参考资料

  • 网络安全概论

  • 使用keytool创建和管理证书

  • 总结

参考资料

  该文中的内容来源于 Oracle 的官方文档 Java SE Tools Reference 。Oracle 在 Java 方面的文档是非常完善的。对 Java 8 感兴趣的朋友,可以直接找到这个总入口 Java SE 8 Documentation ,想阅读什么就点什么。本博客不定期从 Oracle 官网搬砖。这里介绍的工具是 keytool 。

回到顶部

网络安全概论

  在 Web 世界里,安全是一个重之又重的课题,甚至是美国政府都禁止某些加密解密算法的出口。 Java 和 Linux 都是 Web 领域的领头羊,各种加解密的算法和管理工具一应俱全,例如 GnuPG 就是一个不错的安全套件。但是在这里,只展示一下 JDK 中的 keytool 工具的使用方法。

  先来说一下加解密算法的分类。基本上可以分为三类,它们分别是对称性解密算法、非对称性加密算法和消息摘要算法。每一类算法中又有多个不同的具体算法。对于这些算法,我们不要求完全掌握,但是对于各类算法的特点和用途是一定要了解的,对于一些常见的名字,如 DES、AES、RSA、DSA、MD5、SHA1 等,一定要熟悉,至少要知道它们分别属于哪类算法。

  对称性加密算法使用同一个密钥对信息进行加密和解密,其信息的安全性一部分取决于加密算法和密钥的长度,另一部分取决于密钥在传递过程中是否会被截获或盗取。非对称性加密算法使用两个密钥分别对信息进行加密和解密,这两个密钥称为私钥/公钥对。使用私钥加密的信息必须使用公钥解密,反之亦然。公钥可以公开发布,私钥由加密方保存,绝对不公开,将私钥被截获或窃取的可能性降到最低,因此非对称性加密算法的安全性比对称性加密算法的安全性更高。既然非对称性加密算法比对称性加密算法安全性更高,那对称性加密算法有什么存在的必要呢?这是因为对称性加密算法的运算速度更快。现实中,往往将对称性加密算法和非对称性加密算法结合使用,对于要传输的大块数据使用对称性加密算法加密,然后对加密使用的密钥使用非对称性加密算法进行加密,这样既可以获得更高的安全性,又可以获得更高的加解密运算速度。常用的对称性加密算法有DES算法、AES算法、3DES算法、TDEA算法、Blowfish算法、RC5算法、IDEA算法。常用的非对称性加密算法有DSA算法、RSA算法、Elgamal算法、背包算法、Rabin算法、D-H算法、ECC算法(椭圆曲线加密算法)。

  消息摘要算法的主要目的是对数据生成摘要。消息摘要算法不需要密钥,只有输入相同的数据才能得到相同的摘要,而且不可能从摘要反过来推算出数据。常用的消息摘要算法有MD5算法和SHA-1算法及其大量的变体。它们可以用来保证数据的完整性,在网络上发布文件时,常同时提供该文件的MD5值就是利用的消息摘要算法的这个特点,一旦该文件被篡改或者在网络传输中出现数据错误,再对其进行摘要运算就得不到相同的MD5值。

  对数据进行签名是我们在网络中最常见的安全操作。签名有双重作用,作用一就是保证数据的完整性,证明数据并非伪造,而且在传输的过程中没有被篡改,作用二就是防止数据的发布者否认其发布了该数据。签名同时使用了非对称性加密算法和消息摘要算法,对一块数据签名时,会先对这块数据进行消息摘要运算生成一个摘要,然后对该摘要使用发布者的私钥进行加密。接收者接受这块数据后,先使用发布者的公钥进行解密得到原数据的摘要,再对接收到的数据计算摘要,如果两个摘要相同,则说明数据没有被篡改。同时,因为发布者的私钥是不公开的,只要接收者通过发布者的公钥能成功对数据进行解密,就说明该数据一定来源于该发布者,他再怎么抵赖也没有用。

  那么问题来了,怎么确定某公钥一定是属于某发布者的呢?这就需要证书了。证书由权威认证机构颁发,其内容包含证书所有者的标识和它的公钥,并由权威认证机构使用它的私钥进行签名。信息的发布者通过在网络上发布证书来公开它的公钥,该证书由权威认证机构进行签名,认证机构也是通过发布它的证书来公开该机构的公钥,认证机构的证书由更权威的认证机构进行签名,这样就形成了证书链。证书链最顶端的证书称为根证书,根证书就只有自签名了。总之,要对网络上传播的内容进行签名和认证,就一定会用到证书。关于证书遵循的标准,最流行的是 X.509,关于证书的具体内容,网络上一搜一大把,我这里就不讲了。

回到顶部

使用keytool创建和管理证书

  在 Java 中也广泛使用证书,例如,使用 jarsigner 命令对 jar 包进行签名和认证。JDK 中创建和管理证书的工具是 keytool 。 keytool 是一个功能强大的安全工具,它不仅仅只是用来创建和管理证书,还可以用来创建和管理对称性加密算法需要用到的密钥,还可以用自己的证书给别人签发证书(类似 CA 的工作),还可以导入别人发布的证书。 keytool 使用 keystore 存储密钥和证书,在一个 keystore 中可以存储多个条目,访问 keystore 和访问 keystore 中的条目均需要密码。

  下面开始实战。要进行非对称性加密,我们首先要有属于自己的私钥/公钥对,这可以通过 keytool -genkeypairs -alias xxx 命令得到。创建密钥对的时候, keytool 会在 keystore 中生成一个新的条目, -alias xxx 选项就是对该条目进行命名。生成密钥对之后,私钥是以原始数据直接储存在 keystore 中的,而公钥是要发布出去的,所以它被封装在一个 X.509 格式的自签名证书中。换句话说,创建密钥对的时候,同时就创建了一个自签名的证书。

  先将自己假想为一个认证机构,或者说一个只对我自己签发证书的私有认证机构,我称之为 MyCA,先为 MyCA 生成一个自签名的根证书,使用的命令是 keytool -genkeypair -alias MyCA ,如下图:

  可以看到,除了提示我们输入 keystore 的密码和 MyCA 条目的密码之外,还提示我们输入名字、部门、组织、区域、国家代码等信息,这些信息主要是用来标识证书的所有者。按提示完成操作后,就在 keystore 中生成了一个 MyCA 条目,该条目中保存有 MyCA 的私钥和 MyCA 的自签名证书,该证书中包含 MyCA 的公钥。使用 keytool -list 命令看一下,可以看到 keystore 中新增的 MyCA 条目。

  如果给 keytool -list 命令增加 -v 选项,则可以看到更加详细的内容。这些内容可以让我们对 MyCA 的证书有更直观的了解,如下图:

  然后,再为我自己生成一个密钥对,使用命令 keytool -genkeypair -alias youxia 命令,按提示完成操作后,keystore 中就又多了一个 youxia 条目,如下图:

  使用 keytool -list -v -alias youxia 命令可以查看 youxia 的证书,它也是自签名的,如下图:

  自签名的证书可以使用,但是总不如认证机构颁发的证书权威。怎么样让 CA 为我们颁发证书呢?首先我们要向 CA 提交申请,提交申请的时候需要提交一份称为 certificate request 的数据。我们可以通过 keytool -certreq 命令针对 keystore 中相应的条目生成该数据。在这里,我想让 CA 给 youxia 颁发证书,则使用 keytool -certreq -alias youxia 来生成 certificate request,我同时使用管道和 tee 命令让生成的数据既显示在控制台中,又保存在文件 youxia.certreq 中,如下图:

  从上图中可以看到,生成的 certificate request 数据是 Base64 编码的。然后,将该申请提交给 CA。当然,现实中的 CA 那都是要收费的,而且还不便宜。那么我只好自己提交给自己了,使用私有的 MyCA 来给 youxia 颁发证书。使用的命令为 keytool -gencert -alias MyCA -infile youxia.certreq -outfile youxia.cer,文件 youxia.cer 就是由 MyCA 颁发的证书。使用 keytool -printcert -v -file youxia.cer 命令可以查看该证书。

  然后,申请者收到 CA 颁发的证书后,可以使用 keytool -importcert -alias youxia -file youxia.cer 将证书导入到 keystore 中。导入证书后,再使用 keytool -list -v -alias youxia 查看,会看到完整的证书链,如下图:

  作为管理工具,keytool 当然提供导出证书的功能,使用 keytool -exportcert 命令即可。至此,我们已经完全了解了生成密钥对和证书的完整流程。关于 keytool 更详细的参数,请大家自己查看 keytool 的文档吧。

回到顶部

总结

  keytool 的使用方法很简单,重要的也就是 keytool -genkeypairkeytool -gencertkeytool -certreq 等命令,看到这些命令基本上就可以想到它们的功能。让人稍稍有点疑惑的是, keytool -genkeypair 不仅仅是生成密钥对,它会同时对公钥进行包装生成自签名的证书, keytool -gencert 并不是凭空生成证书,而是对 certificate request 进行回复。理解这两点,使用 keytool 就畅通无阻了。

转载于:https://blog.51cto.com/1459294/1932443

JDK 中的证书生成和管理工具 keytool相关推荐

  1. python中setup函数_Python包管理工具setuptools之setup函数参数详解

    ***对所学内容的简单汇总 在安装python依赖库时,我们使用pip install 或者python setup.py install. pip 会自己搜索适合的版本,python setup.p ...

  2. 将https安全证书导入jdk中

    添加https安全证书 添加https安全证书 生成证书 导出证书 将证书导入jdk中 查看添加到jdk中的所有证书 添加https安全证书 以下是我在linux上安装mysql5.7版本的步骤以及遇 ...

  3. 【转载】Kano模型在用户调研中的应用:客户关系管理工具调研实例

    原文链接:http://www.alibuybuy.com/posts/77204.html 1.Kano模型简介 1.1 Kano模型起源:满意度的二维模式 著名市场营销学大师.美国西北大学教授菲利 ...

  4. python包管理工具 ports_MacPorts安装使用Python/pip

    Mac OS未预装任何在Unix/Linux中常见的命令行包管理工具,Mac OS中的App Store和自身的软件升级功能可以下载更新许多比较好的应用,但这些应用多数是满足普通消费者需求,对于开发人 ...

  5. GPU技术支持-基础篇-包管理工具

    GPU技术支持-基础篇-包管理工具 目录 GPU技术支持-基础篇-包管理工具 前言 概述 包管理工具简介 dpkg「Debian Package」 rpm「RPM Package Manager」 依 ...

  6. Python supervisor 强大的进程管理工具

    一.问题背景 1.背景 如何才能让一个进程摆脱终端,获得相对较长的生命周期? 2.后台(守护).前台进程 什么是守护进程?通俗点讲就是后台跑着的进程,不会因为你关了终端服务就会随之停止,直到你把计算机 ...

  7. JDK创建SSL证书

    1. 生成SSL证书 (1)进入JDK安装目录下的cacerts文件所在目录 例:C:\Program Files\Java\jdk1.8.0_261\jre\lib\security (2)在路径处 ...

  8. 测试管理工具实践(小组作业)

      作业要求:从51Testing在2016年针对全国软件测试调查问卷中所列举的测试管理工具中,任选一种,学习该工具的使用,编写使用说明书,并录制成使用视频.分组完成. (1)撰写工具使用手册,要求在 ...

  9. 服务器系统安装优盘启动工具,u盘启动大师在Win10上安装和卸载远程服务器管理工具的方法...

    我们在win10系统中不能随意的更改远程服务器的角色和功能.但是如果安装了远程服务器管理工具,就可以实现这个目的了.那么我们都要怎么如何安装和卸载远程服务器管理工具呢?今天小编就来教大家安装和卸载远程 ...

最新文章

  1. 【五线谱】高低八度标记 ( 高八度标记 | 标记范围的音符整体提升一个八度 | 低八度标记 | 标记范围的音符整体降低一个八度 )
  2. HOWTO:用InstallShield制作安装包时如何重写取消安装确认部分的逻辑
  3. max与top的效率
  4. C++STL的 list容器
  5. HDU 1233 还是畅通工程(最小生成树)
  6. Linux基础和常用命令
  7. 设置grub从哪个分区的menu.lst引导系统
  8. php 去除空格和换行
  9. c语言大作业通讯录报告,数据结构大作业报告-C语言通讯录系统-链表.pdf
  10. Oracle imp/impdp 导入dmp文件到数据库
  11. 面试官问你期望的工资是多少,怎么回答最好?
  12. Rancher 离线安装 longhorn 存储类
  13. 电话簿程序设计c语言,电话簿管理程序设计.doc
  14. BatchNorm、LayerNorm、InstanceNorm、GroupNorm、WeightNorm
  15. 怎么把HTML网页重构为VUE,基于vue cli重构多页面脚手架过程详解
  16. EverBox开发笔记-1
  17. 计算最长连续1数码长度c语言,C语言练习场-有难度
  18. sql 除法计算一直 为0原因及解决方案
  19. 深度学习模型部署浅析
  20. 苹果损失一大将,也挖来了ARM大神…|一周热闻回顾

热门文章

  1. matlab的单项悟空整流,一种新型单相脉冲整流器的MATLAB仿真研究
  2. Selenium与Cypress的比较
  3. 读取4:2:0格式YUV序列的Y分量、U分量以及V分量,并分别保存为.yuv格式(matlab实现)
  4. api php usdt 以太坊_php调用以太坊geth API说明
  5. 下载文件扩展名php,[宜配屋]听图阁
  6. 基于深度卷积神经网络的大豆叶斑病识别
  7. 快速制作BP神经网络结构示意图
  8. google地球无法连接_WiFi无法连接?解决macOS Big Sur/Mojave/ Catalina上的Wi-Fi问题
  9. Deep_Rank,经典ctr系列预估模型复现框架
  10. android极光推送声音,Android 极光推送JPush---自定义提示音