第十八章_SSL证书

简介:

1、证书概述

SSL基于对称和部队称这两种加密方法。后者涉及了一对密钥,即一个公钥,一个私钥。

公钥通常包在证书中,因为证书是发布公钥的一种可信任的方式。证书是利用与证书中包含的公钥相对应的私钥来签署的,这叫自签证书。换句话说,自签证书的签署者与颁发者是相同的。

如果人们已经人事发送者,那么用自签证书来验证签署文档的发送者是可以的。但是为了得到更广泛的接受,则需要由数字证书认证中心(Certificate AuthorityCA)签署,如VeriSignThawte,你需要将自签证书发给他们。

CA对你完成验证之后,就会给你办法一份证书,它代替了自签证书。这份新证书也可以是一个证书链。在这个证书链的最上方是”根”,就是指自签证书。接下来就是CA对你进行验证的证书。如果这家CA名气不够大,他们会将它发给更大的CA,更大的CA会验证第一家CA的公钥。最后一家CA也会发出证书,因此形成了一个证书链。这个更大的CA通常会广泛发布他们的公钥,因此人们可以很容易验证他们签署的证书。

Java提供了一组可以用于处理前面讲过的不对称加密法的工具和API,用她们可以完成以下工作:

1、生成公钥和私钥对,然后你就可以将生成的公钥发送给证书颁发者,以便获得你自己的证书,当然,这是要收费的。

2、将私钥和公钥保存在一个称作密钥存储库的数据库中。密钥存储库有名称,并且有密码保护。

3、将其他人的证书保存在同一个密钥存储库中。

4、通过自己的私钥进行签署来创建自己的证书。但是,这种证书的用途有限。如果用作测试,那么使用自签证书就可以了。

5、对一个文件进行数字签名,这个特别重要,因为如果Applets是保存在一个签过名的jar文件中,那么浏览器将只允许Applets访问资源。签过名的java代码可以向用户保证,你真的是这个类的开发者。现在我们看以下这个工具

 

2、KeyTool程序

KeyTool程序是创建和维护公钥和私钥及证书的工具。它在JDK中,位于JDKbin目录下。KeyTool是一个命令行程序。要想查看它的正确语法,只要在命令窗口中输入keytool即可。

 

2.1、生成密钥对

首先,要了解在Java中生成密钥的几个关键点:

1、Keytool生成一个公钥/私钥对,并利用这个私钥创建一份证书。其中,证书包含了公钥及实体的身份信息,证明这是属于谁的密钥。因此,你需要提供名称和其他信息。这个名称称作识别名称(Distinguished Name, DN),包含以下信息:

CN= common name, e.g. Joe Sample

OU=organizational unit, e.g. Information Technology

O=organization name, e.g. Brainy Software Corp

L=locality name, e.g. Vancouver

S=state name, e.g. BC

C=country, (two letter country code) e.g. CA

 

2、密钥将保存在一个称作密钥存储库的数据库中。密钥存储库是基于文件并有密码保护的,因此任何未被授权的用户都无法访问保存在其中的私钥。

3、如果在生成密钥或执行其他功能时没有指定密钥存储库,将使用默认的密钥存储库,在用户的home目录下(即user.home系统属性定义的目录),默认木要存储库命名为.keystore。例如,在Windows平台上,Windows XP的默认密钥存储库是放在C:\Documents and Settings\userName

4、密钥存储库中有两种条目:

a、密钥条目,每个条目都是一个私钥,并配有对应公钥的证书链。

b、可信任的证书条目,每个条目中都包含你所信任的实体的公钥。

5、密钥存储库汇总的每个条目都用一个唯一的名称或者别名表示。你在用keytool生成密钥或做其他事情的时候必须指定一个别名。

6、如果在生成密钥对时没有指定别名,将默认使用mykey做为别名。

生成密钥对的最简短的命令是:

keytool -genkeypair

使用这个命令时,将使用默认的密钥存储库;如果用户的home目录下没有密钥存储库,则会创建一个。生成的密钥以mykey做为别名。然后你会被要求输入密钥存储库的密码,并提供识别名称的信息。最后,会有弹出窗口要求你输入条目的密码。

在此调用keytool -genkeypair会产生一个错误,因为它会试图创建一对密钥,并且在此使用mykey做为别名。

指定别名时,可以使用-alias参数。例如,以下命令创建了以关键字email标识的一个密钥对:

keytool -genkeypair -alias email

还是使用默认的密钥存储库。

指定密钥存储库时,要使用-keystore参数。例如,下列命令生成了一个密钥对,并将他保存在C:\javakeys目录下名为myKeystore.keystore的密钥存储文件中:

keytool -genkeypair -keystore C;\javakeys\myKeyStore

调用完程序之后,会要求你输入任务信息。

生成密钥对的完整命令要使用genkeypairaliaskeypassstorepass以及dname参数。例如:

keytool -genkeypair -alias email4 -keypass myPassword -dname

“CN=JoeSample, OU=IT, O=Brain Software Corp, L=Surrey, S=BC, C=CA”

-storepass myPassword

 

2.2、认证

当你可以利用Keytool生成公钥/私钥对和自签证书时,这个证书将只被已经认识你的人所信任。为了得到更广泛的认可,要由数字证书认证中心(CA)为你的证书进行签署,例如VeriSignEntrust或者Thawte

如果想要这么做,需要利用Keytool-certreq参数生成一个CSRCertificate Signing Request,证书签署请求),其语法如下:

keytool -certreq -alias alias -file certregFile

这个命令的输入值就是alias所引用的证书,其输出是一个CSR,这是一个由certregFile指定路径的文件。将CSR发送给CA,他们会离线对你进行验证,一般会请你提供有效的身份证明资料,例如护照或者驾照复印件。

如果CA认可你的身份资料,就会给你发一份新的证书,或者是一个包含你公钥的证书链。这个新证书代替了目前的证书链。一旦你收到回复,就可以利用Keytoolimportcert参数将新证书导入到一个密钥存储库中。

 

2.3、将证书导入密钥存储库

如果从第三方收到一个签过名的文档,或者收到CA的回复,就可以将它保存在密钥存储库中,并且需要给它起一个容易记住这份证书的别名。

要将证书存入或导入密钥存储库中,需使用importcert参数,其语法如下:

keytool -importcert -alias anAlias -file filename

例如,要将joeCertificate.cer中的证书导入密钥存储库,并取别名brotherJoe时,要使用下面这个命令:

keytool -importcert -alias brotherJoe -file joeCertificate.cer

将证书保存在密钥存储库中有两个好处。第一,有一个受密码保护的集中保存的地方。第二,如果你已经将第三方的证书保存在密钥存储库中,就可以轻松得验证来自他们的签名文档。

 

2.4、从密钥存储库中导出证书

利用私钥可以给文档进行签名。在给文档签名时,要给文档建议一份摘要信息,然后用私钥对摘要信息进行加密。然后发布文档以及加过密的摘要。

其他人要验证文档,他们必须有你的公钥。为了安全期间,公钥也需要进行签名。你可以自签,也可以让可信任的证书颁发商为它签名。

首先,是从密钥存储库中导出证书,并将它保存成一个文件。然后轻松地发布这个文件,为了从密钥存储库中提取证书,需要使用-exportcert参数,并传入包含证书的文件名和别名,其语法如下:

keytool -exportcert -alias anAlias -file filename

包含证书的文件一般以.cer为扩展名。例如,为了提取别名为Meredith的证书,并将它存入meredithcertificate.cer文件,可以使用以下命令:

keytool -exportcert -alias Meredith-file meredithcertificate.cer

 

2.5、列出密钥存储库条目

有了可以保存专用密钥的密钥存储库,以及可信任的证书颁发商,就可以利用keytool程序将它列出,来查询它的内容,其做法是使用list参数:

keytool -list -keystore myKeyStore -storepass myPassword

如果缺失keystore参数,将在此使用默认的密钥存储库

目录
相关文章
|
PyTorch 算法框架/工具 Python
Anaconda3和pycharm的下载指南
本文提供了Anaconda3和PyCharm的详细下载及安装指南,并介绍了如何在Anaconda3环境下创建名为"pytorch"的新环境。
Anaconda3和pycharm的下载指南
|
7月前
|
数据采集 机器学习/深度学习 人工智能
SongGen:三秒克隆音色!开源AI一键生成专业级歌曲,创作人必备神器
SongGen是由上海AI Lab、北京航空航天大学和香港中文大学联合推出的单阶段自回归Transformer模型,能够通过文本生成高质量歌曲,支持混合模式和双轨模式,显著提升生成歌曲的自然度和人声清晰度。
684 3
SongGen:三秒克隆音色!开源AI一键生成专业级歌曲,创作人必备神器
|
10月前
|
缓存 安全 网络协议
使用事件日志识别常见 Windows 错误
事件查看器是Windows操作系统中的标准诊断工具,用于记录系统事件,包括硬件问题、软件中断和系统行为等详细信息。通过分析这些日志,管理员能够追踪和解决系统错误。访问方法包括使用快捷键Win + R输入eventvwr.msc,或通过控制面板进入。事件查看器中的每条记录包含事件ID、来源和描述,帮助识别和解决问题。常见错误如蓝屏死机、DLL错误、驱动程序错误等,可通过更新驱动程序、运行系统诊断、使用恢复功能等方式解决。
674 4
|
11月前
|
搜索推荐 开发工具 Android开发
打造个性化Android应用:从设计到实现的旅程
【10月更文挑战第26天】在这个数字时代,拥有一个能够脱颖而出的移动应用是成功的关键。本文将引导您了解如何从概念化阶段出发,通过设计、开发直至发布,一步步构建一个既美观又实用的Android应用。我们将探讨用户体验(UX)设计的重要性,介绍Android开发的核心组件,并通过实际案例展示如何克服开发中的挑战。无论您是初学者还是有经验的开发者,这篇文章都将为您提供宝贵的见解和实用的技巧,帮助您在竞争激烈的应用市场中脱颖而出。
|
12月前
|
缓存 负载均衡 API
抖音抖店API请求获取宝贝详情数据、原价、销量、主图等参数可支持高并发调用接入演示
这是一个使用Python编写的示例代码,用于从抖音抖店API获取商品详情,包括原价、销量和主图等信息。示例展示了如何构建请求、处理响应及提取所需数据。针对高并发场景,建议采用缓存、限流、负载均衡、异步处理及代码优化等策略,以提升性能和稳定性。
|
边缘计算 自动驾驶 物联网
Massive MIMO技术在5G中的应用:开启无线通信的新篇章
Massive MIMO技术在5G中的应用:开启无线通信的新篇章
792 2
|
人工智能 自然语言处理 搜索推荐
阿里云搜索开发工作台:打造智能语义搜索与RAG链路
随着大数据时代的信息爆炸,传统关键字搜索难以满足精准需求。阿里云搜索开发工作台集成AI技术和语义理解,助力企业快速构建智能语义搜索与RAG系统。该平台支持多源数据接入、NLP查询分析、高级排序算法及效果评估工具,并集成大规模预训练模型提升搜索质量。构建流程涵盖数据准备、索引构建、查询分析、文档检索、结果生成及展示。应用场景包括客户支持、内容推荐、电商搜索和新闻聚合等,极大提升了搜索的准确性和用户体验。
|
数据采集 SQL 数据挖掘
2024最新版Python安装教程,适合新手,赶快收藏!_python3最新版2024(1)
2024最新版Python安装教程,适合新手,赶快收藏!_python3最新版2024(1)
|
算法 大数据 量子技术
探索未来:量子计算在解决复杂问题中的潜力与挑战
本文深入探讨了量子计算技术如何为解决传统计算机无法有效处理的复杂问题开辟新路径。通过分析量子计算的原理、当前发展状况以及面临的主要技术挑战,文章揭示了量子计算在未来可能带来的革命性变化,并讨论了其对科学研究、密码学和大数据处理等领域的潜在影响。