导航:首页 > 源码编译 > keytool加密算法

keytool加密算法

发布时间:2025-02-11 23:52:44

㈠ keytool证书

证书,又称公钥证书,是实体(签发者)通过数字签名提供的一种声明,确认另一实体(主体)的公钥及其相关信息具有特定的值。

公钥是与实体关联的数字,所有与其交互的人都需要知道。公钥的主要作用是验证签名,确保数据来源的真实性。

数字签名是将数据与实体的身份绑定,通过使用实体的私钥,数据不可被伪造。身份在不同系统中可能表现为公钥、Unix UID、电子邮件地址或X.509特征名等。

签名是实体(签发者)使用其私钥对数据进行加密的过程。私钥是保密的,通常每个私钥仅与特定实体相对应,私钥与公钥成对出现,如DSA系统。

实体可以是个人、组织或程序等,需要信任的对象。在分布式网络中,为解决公钥分发问题,出现了认证机构(CA),如VeriSign、Thawte等,它们作为第三方为实体签发证书,确保信息的可靠性和有效性。

keytool是一个工具,它支持X.509证书的操作,包括显示、导入、导出和自签名证书的生成。X.509标准定义了证书内容格式,包括版本识别、序列号、签名算法、签发者名称、有效期和主体名称等详细信息。

例如,X.509证书可能包含v1、v2或v3版本,序列号用于唯一标识证书,签发者名称是证书的签发者,有效期则限制了证书的使用时间,而主体名称则是公钥所对应实体的唯一标识。

㈡ keytool 的问题

Keytool 是安全钥匙与证书的管理工具.它管理一个存储了私有钥匙和验证相应公共钥匙的与它们相关联的X.509 证书链的keystore(相当一个数据库).
Keytool 是一个有效的安全钥匙和证书的管理工具. 它能够使用户使用数字签名来管理他们自己的私有/公共钥匙对,管理用来作自我鉴定的相关的证书,管理数据完整性和鉴定服务.它还能使用户在通信时缓存它们的公共钥匙.
一个证书是某一实体(个人,公司等)的数字签名,指出其他实体的公共钥匙(或其他信息)的详细的值.当数据被签名后,这个签名信息被用来检验数据的完整性和真实性.完整性指数据没有被修改和篡改,真实性指数据从任何产生和签名的一方真正的传输到达.
Keytool 把钥匙和证书储存到一个keystore.默任的实现keystore的是一个文件.它用一个密码保护钥匙.
而另外的一个工具jarsigner用keystore中的信息产生或检验java aRchive(jar文件)中的数字签名.
Keystore有两个不同的入口:
1.钥匙入口:保存了非常敏感的加密的钥匙信息,并且是用一个保护的格式存储以防止未被授权的访问.以这种形式存储的钥匙是秘密钥匙,或是一个对应证书链中公有钥匙的私有钥匙.
2.信任证书入口:包含一个属于其他部分的单一公共钥匙证书.它之所以被称为"信任证书",是因为keystore信任的证书中的公共钥匙真正属于证书所有者的身份识别.
Keystore的别名:
所有的keystore入口(钥匙和信任证书入口)是通过唯一的别名访问.别名是 不区分大小写的.如别名Hugo和hugo指向同一个keystore入口.
可以在加一个入口到keystore的时候使用-genkey参数来产生一个钥匙对(公共钥匙和私有钥匙)时指定别名.也可以用-import参数加一个证书或证书链到信任证书.
如:
keytool -genkey -alias ke -keypass kekeypasswd
其中ke为别名,kekeypasswd为ke别名的密码.这行命令的作用是产生一个新的公共/私有钥匙对.
假如你想修改密码,可以用:
keytool -keypasswd -alias ke -keypass kekeypasswd -new newpass
将旧密码kekeypasswd改为newpass.

Keystore的产生:
1.当使用-genkey 或-import或-identitydb命令添加数据到一个keystore,而当这个keystore不存在时,产生一个keystore.默认名是.keystore,存放到user-home目录.
2.当用-keystore指定时,将产生指定的keystore.
Keystore的实现:
Keytool 类位于java.security包下,提供一个非常好的接口去取得和修改一个keystore中的信息. 目前有两个命令行:keytool和jarsinger,一个GUI工具Policy 可以实现keystore.由于keystore是公开的,用户可以用它写一些额外的安全应用程序.
Keystore还有一个sun公司提供的内在实现.它把keystore作为一个文件来实现.利用了一个keystore类型(格式)"JKS".它用单独的密码保护每一个私有钥匙.也用可能不同的密码保护整个keystore的完整性.
支持的算法和钥匙大小:
keytool允许用户指定钥匙对和注册密码服务供应者所提供的签名算法.缺省的钥匙对产生算法是"DSA".假如私有钥匙是"DSA"类型,缺省签名算法是"SHA1withDSA",假如私有钥匙是"RSA"类型,缺省算法是"MD5withRSA".
当产生一个DSA钥匙对,钥匙必须在512-1024位之间.对任何算法的缺省钥匙大小是1024位.
证书:
一个证书是一个实体的数字签名,指出其他实体的公共钥匙有明确的值.
1.公共钥匙 :是同一个详细的实体的数字关联,并有意让所有想同这个实体发生信任关系的其他实体知道.公共钥匙用来检验签名;
2.数字签名:假如数据已被签名,并用身份存储在一个实体中,一个签名能够证明这个实体知道这个数据.这个数据用实体私有钥匙签名并递交;
3.身份:知道实体的方法.在一些系统中身份是公共钥匙,其他系统中可以是从一个X.509名字的邮件地址的Unix UID来的任何东西;
4.签名:一个签名用用实体私有钥匙来计算某些加密数据;
5.私有钥匙:是一些数字,每一个私有钥匙只能被特定的拥有该私有钥匙的实体知道.私有和公共钥匙存在所有用公共钥匙加密的系统的钥匙对中.一个公共钥匙加密(如DSA),一个私有钥匙与一个正确的公共钥匙通信.私有钥匙用来计算签名.
6.实体:一个实体可以是一个人,一个组织,一个程序,一台计算机,一个商业,一个银行,或其他你想信任的东西.

Keytool应用实例:
1.产生一个keystore:
keytool -genkey -alias User(keystore的别名) -keyalg RSA -validity 7 -keystore keystore(指定keystore).
运行这个命令,系统提示:
Enter keystore password:yourpassword(输入密码)
What is your first and last name?
[Unknown]: your name(输入你的名字)
What is the name of your organizational unit?
[Unknown]:your organizational(输入你所在组织单位的名字)
What is the name of your organization?
[Unknown]:your organization name (输入你所在组织的名字)
What is the name of your City or Locality?
[Unknown]:your city name(输入所在城市的名字)
What is the name of your State or Province?
[Unknown]:your provice name(输入所在省份名字)
What is the two-letter country code for this unit?
[Unknown]:cn(输入国家名字)
Is CN=your name, OU=your organizaion, O="your organization name",
L=your city name, ST=your province name, C=cn correct?
[no]: yes

2.检查一个keystore:
keytool -list -v -keystore keystore
Enter keystore password:your password(输入密码)
将显示keystore内容如:
Keystore type: jks
Keystore provider: SUN

Your keystore contains 1 entry

Alias name: yourname
Creation date: Dec 20, 2001
Entry type: keyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=yourname, OU=your organization, O="your organization name",
L=your city name, ST=your province name, C=CN
Issuer: CN=Duke, OU=Java Software, O="Sun Microsystems, Inc.", L=Palo Alto, ST=CA, C=US
Serial number: 3c22adc1
Valid from: Thu Dec 20 19:34:25 PST 2001 until: Thu Dec 27 19:34:25 PST 2001
Certificate fingerprints:
MD5: F1:5B:9B:A1:F7:16:CF:25:CF:F4:FF:35:3F:4C:9C:F0
SHA1: B2:00:50:DD:B6:CC:35:66:21:45:0F:96:AA:AF:6A:3D:E4:03:7C:74
3.输出keystore到一个文件:testkey:
keytool -export -alias ke -keystore keystore -rfc -file testkey
系统输出:
Enter keystore password:your password(输入密码)
Certificate stored in file
4.输入证书到一个新的truststore:
keytool -import -alias kecert -file testkey -keystore truststore
Enter keystore password:your new password.(输入truststore新密码)

5.检查truststore:
keytool -list -v -keystore truststore
系统将显示truststore的信息.
现在可以用适当的keystore运行你的应用程序.如:
java -Djavax.net.ssl.keyStore=keystore -Djavax.net.ssl.keyStorePassword=password Server
和: java -Djavax.net.ssl.trustStore=truststore
-Djavax.net.ssl.trustStorePassword=trustword Client

㈢ 网址后面有个S加密怎么弄

https默认端口是443,http默认端口是80,所有加一个s就不一样。也不是所有网站加s就可以加密,需要WEB服务器端进行相应的配置。以下配置步骤仅供参考:
HTTPS_SSL配置的步骤:

服务器端单向认证:

第一步:进入jdk的安装文件路径下面的bin目录;

第二步:在bin目录下输入以下命令
keytool -genkey -v -alias mykey -keyalg RSA -validity 3650 -keystore c:\sst.keystore
-dname "CN=你的ip,OU=cn,O=cn,L=cn,ST=cn,c=cn" -storepass 123456 -keypass 123456
说明:
keytool 是JDK提供的证书生成工具,所有参数的用法参见keytool –help

-genkey 创建新证书
-v详细信息
-alias以”mykey”作为该证书的别名。这里可以根据需要修改
-keyalgRSA 指定算法
-keysize 指定算法加密后弯凳密钥长度
-keystorec:\sst.keystore保存路径及文件名
-validity3650证书有效期,单位为天

CN=你的ip,OU=cn,O=cn,L=cn,ST=cn,c=cn 基本信息的配置
CN=你的ip 这个配置务必注意
-storepass 123456789 -keypass 123456789 密码设置

第三步:生成的文件如下图所示

第埋碰旅四步:配置tomcat的server.xml文件[1]redirectPort端口号改为:443
<Connector connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="443" useBodyEncodingForURI="true"/>

[2]SSL HTTP/1.1 Connector定义的地方,修改端口号为:443

<Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol"
minSpareThreads="5" maxSpareThreads="75"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" maxThreads="200" SSLEnabled="true" scheme="https" secure="true"
keystoreFile="C:/sst.keystore" keystorePass="123456"
clientAuth="false" sslProtocol="TLS" />
属性说明:clientAuth:设置是否双向验证,默认为false,设置为true代表吵橘双向验证keystoreFile:服务器证书文件路径keystorePass:服务器证书密码truststoreFile:用来验证客户端证书的根证书,此例中就是服务器证书truststorePass:根证书密码
[3] AJP 1.3 Connector定义的地方,修改redirectPort为443
<Connector port="8009" protocol="AJP/1.3" redirectPort="443"/>

第五步:重新启动Tomcat就可以了。

附加内容:若要使得应用只能通过https的方式访问,在该项目的web.xml文件中加入如下代码:

<login-config><!-- Authorization setting for SSL --><auth-method>CLIENT-CERT</auth-method><realm-name>Client Cert Users-only Area</realm-name></login-config><security-constraint><!-- Authorization setting for SSL --><web-resource-collection><web-resource-name>SSL</web-resource-name><url-pattern>/*</url-pattern></web-resource-collection><user-data-constraint><transport-guarantee>CONFIDENTIAL</transport-guarantee></user-data-constraint></security-constraint><!--Require HTTPS for everything except /img (favicon) and /css.--><security-constraint><web-resource-collection><web-resource-name>HTTPSOrHTTP</web-resource-name><url-pattern>*.ico</url-pattern><url-pattern>/img/*</url-pattern><url-pattern>/css/*</url-pattern></web-resource-collection><user-data-constraint><transport-guarantee>NONE</transport-guarantee></user-data-constraint></security-constraint>测试 :在浏览器中输入:https://localhost:8443/,会弹出选择客户端证书界面,点击“确定”,会进入tomcat主页,地址栏后会有“锁”图标,表示本次会话已经通过HTTPS双向验证,接下来的会话过程中所传输的信息都已经过SSL信息加密。
可能存在的问题:
Eclipse中启动tomcat7.0,本地tomcat配置文件被eclipse恢复。

问题是这样的,在eclipse的servers配置项里,将tomcat的启动配置为了use tomcat location,但是每次在eclipse里publish项目都会把本地G:\tomcate7.0\apache-tomcat-7.0.29\conf下的配置文件(如:tomcat-user.xml添加了用户等信息)给重置,也就是里面添加的内容被清空了,回复到原来的样子:

问题解决方案:

你eclipse工程列表中应该 还有个 Servers工程,下面会有Tomcat7的配置文件,你把里面的对应配置文件改了。每次是用这个文件来覆盖,tomcat下面的文件的。

特定的目录实现https访问
解决方案:

在web.xml文件中配置相应的路径

<security-constraint><!-- Authorization setting for SSL --><web-resource-collection><web-resource-name>SSL</web-resource-name><url-pattern>/login.html</url-pattern></web-resource-collection><user-data-constraint><transport-guarantee>CONFIDENTIAL</transport-guarantee></user-data-constraint></security-constraint>

㈣ Java Keytool生成数字证书/.cer/.p12文件

如何使用 JDK 自带的 keytool 创建 p12 文件

创建私钥和证书:

1. 打开命令提示符,切换至 JDK 的 bin 目录。

2. 输入命令:

storepass: 设置 keystore 文件存储密码。keypass: 设置私钥加解密密码。alias: 设置实体别名,即包括证书私钥。dname: 填写证书个人信息。keyalg: 选择公钥算法,默认为 DSA,此处建议采用 RSA。keysize: 指定密钥长度,注意 DSA 算法可能不支持 2048 长度,此时需采用 RSA。validity: 设置有效期。keystore: 指定 keystore 文件存储位置。

3. 命令行会请求输入相关信息,为了试验,随便填写即可。

4. 最后一行:输入密钥口令,如果与之前设置的 keystore 密码相同,直接回车;若不同,则输入新口令。

5. 完成上述步骤后,秘钥库中生成了数字证书(未经 CA 认证),不影响使用。可导出数字证书给合作伙伴,实现加密通信。

查看 keystore 详情:

输入命令,查看 keystore 的详细信息。

导出本地证书(.cer):

输入命令:

参数:-export 表示证书导出操作。-keystore 指定秘钥库文件。-file 指定导出文件路径。-storepass 输入密码。-rfc 指定以 Base64 编码格式输出。

打印数字证书:

输入命令,打印出数字证书。

将 .cer 格式证书转换为 p12 证书:

输入命令:

步骤:执行转换命令,输入目标密钥库口令和源密钥库口令。目标密钥库口令为设置 .p12 证书的口令,源密钥库口令为 .cer 证书的密钥库口令。

P12 证书相关命令:

生成证书:

导出证书:

㈤ 关于公私钥、各种证书、https基本概念扫盲

最近实习需要写一些生成证书的脚本,借此机会顺便搞清楚了许多关于证书这块的疑惑。说到这一块东西,名词多到爆炸,对称加密、非对称加密、密钥、密钥库、公钥、私钥、CA、证书、数字签名、ssh、https、ssl、keytool、openssl、PKCS、X.509以及令人眼花缭乱的文件后缀名,cer、crt、pem、keystore、jks、key、p12、pfx...

先听我讲个故事,这次我们不用Bob和Alice,听完之后再去看这些概念,绝壁恍然大悟。

故事背景: 这是2018年,为了能够安全的进行通信,假设每个人都有俩把锁,一个叫A锁,一个叫B锁,这俩把锁和一般的锁有点区别,每把锁上即带有自己的锁孔又带有另一把锁的钥匙,因此A锁和B锁既是锁又是钥匙。 A锁和B锁唯一配对,A锁锁住之后,只有B锁可以打开,同样B锁锁住之后,只有A锁可以打开 。其中一把锁是公开的,而一把锁则自己保管,不公开。假设默认A锁是公开的,B锁是私有的。

故事内容: 阿里巴巴子弟小学的小明想给隔壁班的小花写封表白信,为了不被别人看到,他将信放入在信箱中,并用小花的A锁将信箱锁住,因为小花的B锁(同是A锁的钥匙)只有小花自己有,所以除了小花以外的任何人拿到信件,都无法看到信件内容。同样小花要给小明写信,那么也要用小明的A锁对信件内容进行保护。

小明与小花通过就这样聊了有一段时间,后来小花觉得差不多了,可以进入秀恩爱的阶段了,跟小明说,以后写信别tm加密了,又不是银行卡密码,被人看到又能怎么样呢?只要看了之后别瞎改就行了。于是小明在写完信后,把信里每个字的拼音首字母拼凑了一个字符串,并取名为 消息摘要 ,然后仅仅将消息摘要放入信箱,用自己的B锁锁住这个信箱。虽然信件本身没有放入安全的信箱,但小明作为一个情书高手,随便一封信都是上万字,如果其他人对信件内容做任何改变,那么拼音首字母组成的字符串几乎肯定会改变,因此小花拿到信件后,先用小明的A锁(B锁的钥匙)打开信箱,拿到小明的摘要,然后小花再对信件内容做同样的处理(即计算信件每个字的拼音首字母,实际上不会用这么简单的算法,而是会用不可逆的hash算法),计算出的字符串值如与小明的信息摘要一致,说明这封信就是小明写给自己的,没有被任何人篡改。

故事高潮: 事情并没有那么简单,小花发现小明只是在信件里对自己热情似火,平常见了面连声招呼都不打,一副不认识的样子。终于有一天小花忍不住了,当面质问小明,小明却说,我什么时候给你写情书了,自作多情吧...于是小花把昨天刚收到的情书狠狠甩在了小明脸上:“上面落款不是你小明吗?怎么了,怂了?”小明一看上面还真是自己的名字,但是自己写没写信自己还不知道吗?小明把自己的作业本拿给小花,并叫自己的同桌做笔迹鉴定,小花发现笔迹的确不大像,看来是有人恶作剧,冒充小明给自己写情书,哎,好尴尬啊。。。

故事讲完了,文章开头涉及的所有概念都与信息的安全传输有关,可以说,一切都是为了安全。关于通信安全,我们通常有三个基本的需求

我们以上面的故事为例说一下这三点安全需求,一开始小明与小花通过A锁( 对应公钥 )加密,B锁( 对应私钥 )解密的通信方式即符合第一点,信件内容本身被加密,而因为公私钥唯一配对,只有配对的密钥才可以解密,因此很难被第三人破解。

之后,为了秀恩爱,他们采用了B锁( 私钥 )加密,A锁( 公钥 )解密的通信方式,其中用私钥对消息摘要加密后的字符串称为 数字签名 ,这样虽然信件可以被人直接看到,但如果被人篡改掉后可以轻易发现数据被篡改。本来以为满足第一条和第二条就可以安全的通信了,但最后才发现小明根本不是小明!为什么会出现这样的问题?因为“小明”说他是小明,小花就以为他是小明,他没有提供任何证明自己真的是小明的认证。因此要想安全通信,我们还需要一个权威第三方的机构来做身份认证,这个机构就是CA机构,通过认证后,CA机构会颁发权威的证书,而有了证书就可以证明身份,就不会出现身份被假冒的情况。而认证的过程则需要向CA机构提供自己的身份信息以及私钥。

对称加密就是通信双方或多方采用的密钥是一样的。加解密速度快,但不够安全。因为一旦密钥泄露,谁都可以对数据进行解密。非对称加密就是当然就是通信双方使用的密钥不同。而公钥和私钥就是非对称加密的一种方式。比较常用的对称加密算法如
AES、DES,非对称加密比较常见的则有sha256,RSA。
非对称加密算法有俩个密钥,一个公钥,一个私钥。公钥和私钥必须配对出现,一对公钥和一个私钥统称为一个 密钥 ,而 密钥库 中可以存放多个密钥,即多对公私钥。

如果你用github的话,应该注意到github链接有俩种方式。一种是https,一种是ssh,通过https经常需要输密码,而通过ssh则不需要。回忆你设置ssh的步骤,本地生成了一个密钥对,并将公钥上传到了github。每次传输用自动本地私钥加密,服务器用你上传的公钥解密,就不需要手动输入密码了。

keytool和openssl是俩个证书管理工具.keytool是java JDK自带的证书管理工具,使用keytool可以生成密钥,创建证书。只要装了jdk,并正确设置了环境变量,就可以之间通过命令行执行keytool命令来管理证书。
openssl则是一个开源的安全套接字层密码库,功能比keytool更加丰富。

PKCS全称Public-Key Cryptography Standards 即公钥标准,PKCS已经发布了15个标准。
PKCS#12 包含了公钥和私钥的二进制格式的证书形式,以pfx作为证书文件后缀
X.509 则是一个通用的证书标准,规定了证书应该包含哪些内容,X.509通常有俩种编码方式,一种是二进制编码,另一种是base64编码
X.509#DER 二进制格式证书,常用后缀.cer .crt
X.509#PEM 文本格式证书,常用后缀.pem

因为http是明文传输,非常不安全,因此又提出了ssl(Secure Sockets Layer即安全套接字)层协议,即在原来的基础上又加了一层协议用于保障安全传输,可以认为https=ssl+http。很多人刚开始接触https,用浏览器F12打开控制台后。可能发现数据仍然没有加密。要注意https是 传输层加密 ,浏览器F12控制台你看到的还是应用层的数据。
因为本文主要是概念扫盲,帮助理解,因此关于这部分具体细节不作介绍。

.keystore和.jks和.truststore都是java用来存放密钥的文件
.key nginx中私钥文件
而不同的证书文件后缀都是为了区分不同种类的证书的,主要有俩个分类维度

阅读全文

与keytool加密算法相关的资料

热点内容
小米加密照片后缀 浏览:234
我的世界网易手机怎么创服务器 浏览:978
载入单页源码 浏览:930
阿里云服务器seo 浏览:777
海洋斗什么时候上线安卓 浏览:86
中行app如何查每日汇款限额 浏览:840
输入服务器sn是什么意思 浏览:725
sha1算法java 浏览:90
asp代码压缩 浏览:851
按键压枪源码 浏览:180
福建服务器负载均衡是什么 浏览:697
算法将所有的岛屿连通 浏览:313
51单片机40引脚是什么 浏览:536
手机文件夹大小怎么调节 浏览:309
android自定义日期选择器 浏览:658
租服务器要看什么 浏览:164
Lightroom文件夹移动以后 浏览:968
web前端pdf 浏览:898
程序员养鸡创业 浏览:501
山西有什么app 浏览:408