开发者社区> benjaminwhx> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

第十八章_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参数,将在此使用默认的密钥存储库

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
为什么推荐使用国密SSL证书?
国密SSL证书采用了我国自主研发的SM2公钥算法体系,支持SM2、SM3、SM4等国产密码算法及国密SSL安全协议。
2300 0
国密改造—国密SSL
国密SSL通信依据的协议是中国人民共和国密码行业标准《SSL VPN技术规范GM/T 0024--2014》协议(链接)。其协议流程和传统的使用RSA证书的TLS协议流程基本一致,但是过程中使用的核心算法已经全部切换到国密相关的算法实现上,保证了通信的安全。所以监管机构开始推动国内金融行业进行国密改造。但是在我们日常运维的传统金融客户里,大部分加密方式还是不支持国密的相关加密方案,尤其是金融行业的银行App如何在现有的环境里快速支持国密改造,成为客户关注的重点。在我们和客户一起进行了多个国密项目的改造之后,这里分享下最近几个国密改造项目的积累的相关技术。
4003 0
SSL证书问题合集
SSL证书问题合集
1737 0
SSL证书审核方式
SSL证书在颁发前必须经过的流程详解
351 0
SSL证书价格为多少?
SSL译为安全套接层,主要运用于对互联网的加密措施,对消费者的权益起一定的保护性,防止数据的丢失。所以SSL还是在使用互联网的过程中不可或缺的。SSL证书要由值得信任的颁发机构CA在了解服务器IP后颁发SSL证书。
1451 0
SSL证书的生成方法
在Linux下,我们进行下面的操作前都须确认已安装OpenSSL软件包。 1.创建根证书密钥文件root.key: [root@mrlapulga:/etc/pki/CA/private]#openssl genrsa -des3 -out root.
886 0
SSL安全证书-概念解析
一、关于证书 数字证书是一种认证机制。简单点说,它代表了一种由权威机构颁发授权的安全标志。 由来 在以前,传统网站采用HTTP协议进行数据传输,所有的数据几乎都用的明文,很容易发生隐私泄露。为了解决安全问题,大家开始考虑采用加解密的方案,于是乎诞生了公钥加密(非对称加解密)及签名算法。
924 0
+关注
194
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载