Java 生成数字证书系列
- 格式:docx
- 大小:1.17 MB
- 文档页数:24
Keytool是一个Java数据证书的管理工具,Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里,包含两种数据:密钥实体(Key entity)——密钥(secret key)又或者是私钥和配对公钥(采用非对称加密)可信任的证书实体(trusted certificate entries)——只包含公钥ailas(别名)每个keystore都关联这一个独一无二的alias,这个alias通常不区分大小写JDK中keytool常用命令:-genkey 在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书(在没有指定生成位置的情况下,keystore会存在用户系统默认目录,如:对于window xp系统,会生成在系统的C:\Documents and Settings\UserName\文件名为“.keystore”)-alias 产生别名-keystore 指定密钥库的名称(产生的各类信息将不在.keystore文件中)-keyalg 指定密钥的算法(如RSA DSA(如果不指定默认采用DSA))-validity 指定创建的证书有效期多少天-keysize 指定密钥长度-storepass 指定密钥库的密码(获取keystore信息所需的密码)-keypass 指定别名条目的密码(私钥的密码)-dname 指定证书拥有者信息例如:"CN=名字与姓氏,OU=组织单位名称,O=组织名称,L=城市或区域名称,ST=州或省份名称,C=单位的两字母国家代码"-list 显示密钥库中的证书信息keytool -list -v -keystore 指定keystore-storepass 密码-v 显示密钥库中的证书详细信息-export 将别名指定的证书导出到文件keytool -export -alias 需要导出的别名-keystore 指定keystore -file 指定导出的证书位置及证书名称-storepass 密码-file 参数指定导出到文件的文件名-delete 删除密钥库中某条目keytool -delete -alias 指定需删除的别-keystore 指定keystore -storepass 密码-printcert 查看导出的证书信息keytool -printcert -file yushan.crt-keypasswd 修改密钥库中指定条目口令keytool -keypasswd -alias 需修改的别名-keypass 旧密码-new 新密码-storepass keystore密码-keystore sage-storepasswd 修改keystore口令keytool -storepasswd -keystoree:\yushan.keystore(需修改口令的keystore) -storepass 123456(原始密码) -new yushan(新密码)-import 将已签名数字证书导入密钥库keytool -import -alias 指定导入条目的别名-keystore 指定keystore -file 需导入的证书下面是各选项的缺省值。
rsa java 创建证书
RSA是一种非对称加密算法,它被广泛应用于数字证书的创建和验证过程中。
在Java中,我们可以使用Java的密钥库(KeyStore)和相关的类来创建和管理RSA证书。
首先,我们需要生成RSA密钥对,包括公钥和私钥。
这可以通过Java的KeyPairGenerator类来实现。
然后,我们可以使用公钥来创建数字证书,私钥用于对证书进行签名。
接下来,我们需要将生成的密钥对存储到KeyStore中。
KeyStore是Java中用于存储密钥和证书的安全存储库。
我们可以使用KeyStore类来创建一个新的KeyStore,并将生成的密钥对存储其中。
然后,我们可以使用生成的密钥对来创建数字证书。
这可以通过Java的Certificate类来实现。
我们可以使用公钥和相关的信息(如持有者的名称、有效期等)来创建证书,并使用私钥对证书进行签名。
最后,我们可以将生成的证书存储到KeyStore中,以便后续使
用。
我们还可以使用KeyStore来管理和检索已创建的证书。
总之,通过使用Java的密钥库和相关类,我们可以很容易地使用RSA算法来创建和管理数字证书。
这些证书可以用于安全通信、身份验证和数字签名等各种安全应用中。
RSA算法的强大加密性能和Java的灵活性使得证书的创建和管理变得更加简单和安全。
如何利⽤java程序实现加密所需的公钥、密钥、数字证书本篇的主要⽬的在于实现pdf的数字签名问题,只是作为我学习知识的总结。
1、数字签名算法的概述数字签名:私钥⽤于签名,公钥⽤于验证。
数字签名的作⽤:验证数据的完整性,认证数据来源,抗否认。
数字签名实现的具体原理:1、将报⽂按双⽅约定的HASH算法计算得到⼀个固定位数的报⽂摘要。
在数学上保证,只要改动报⽂中任何⼀位,重新计算出的报⽂摘要值就会与原先的值不相符。
这样就保证了报⽂的不可更改性。
(详见参考资料的"公钥密码技术原理"章节)2、将该报⽂摘要值⽤发送者的私⼈密钥加密,然后连同原报⽂和数字证书(包含公钥)⼀起发送给接收者⽽产⽣的报⽂即称数字签名。
3、接收⽅收到数字签名后,⽤同样的HASH算法对报⽂计算摘要值,然后与⽤发送者的公开密钥进⾏解密解开的报⽂摘要值相⽐较,如相等则说明报⽂确实来⾃所称的发送者。
4、同时通过证书颁发机构CA确认证书的有效性即可确认发送的真实⾝份。
常⽤的数字签名有:RSA、DSA、ECDSA2、RSA算法概述RSA是⽬前为⽌应⽤最为⼴泛的⾮对称加密算法。
⾮对称加密算法简单的说就是分成公钥和私钥。
加密和解密采⽤不同的算法实现,这样的好处是不需要像传统对称加密算法⼀样将相同算法的密钥分发给对⽅,从⽽减少密钥被获取所带来的严重危害,⽬前基本上都是采⽤⾮对称算法,⽽RSA是最为⼴泛的。
理论上1024位以上的RSA是⽆法破解的(或者未公开)。
基本原理:⾮对称算法将密码将密码分为公钥和私钥,公钥发送给⽤户(可以是多个),⽤户⽤公钥加密想要发送的数据,然后发送给服务器,服务器通过私钥解密加密后的数据。
基本步骤:⽣成公钥和私钥步骤:1. 随机选择两个不相等的质数p和q2. 计算p和q的乘积n (n的长度就是密钥长度。
3233写成⼆进制是110010100001,⼀共有12位,所以这个密钥就是12位。
实际应⽤中,RSA密钥⼀般是1024位,重要场合则为2048位。
java certificate工具类Java Certificate工具类是Java编程中常用的一个类库,用于处理与数字证书相关的操作。
数字证书在网络通信和信息安全领域起着重要的作用,通过使用Java Certificate工具类,我们可以方便地生成、解析、验证和管理数字证书。
本文将介绍Java Certificate工具类的基本使用方法及其在实际开发中的应用。
一、Java Certificate工具类概述Java Certificate工具类是Java提供的一个用于处理数字证书的类库,主要包括以下几个方面的功能:1. 数字证书的生成:Java Certificate工具类提供了生成数字证书的方法,可以生成包含公钥、私钥、证书有效期等信息的数字证书。
2. 数字证书的解析:Java Certificate工具类可以解析数字证书的各个字段,包括证书的颁发者、持有者、有效期、证书类型等信息。
3. 数字证书的验证:Java Certificate工具类支持对数字证书的有效性进行验证,包括验证证书的数字签名、证书是否过期等。
4. 数字证书的管理:Java Certificate工具类可以用于管理数字证书,包括导入、导出、删除证书等操作。
二、Java Certificate工具类的基本使用方法1. 生成数字证书使用Java Certificate工具类生成数字证书的基本步骤如下:(1)创建数字证书生成器对象。
(2)设置证书的有效期、持有者等信息。
(3)生成证书的公钥和私钥对。
(4)将公钥和证书信息传入数字证书生成器。
(5)调用生成方法生成数字证书。
2. 解析数字证书使用Java Certificate工具类解析数字证书的基本步骤如下:(1)创建数字证书解析器对象。
(2)通过输入流读取证书文件。
(3)调用解析方法解析数字证书。
(4)获取数字证书的各个字段信息,如颁发者、持有者、有效期等。
3. 验证数字证书使用Java Certificate工具类验证数字证书的基本步骤如下:(1)创建数字证书验证器对象。
java:如何生成以及导入x.509证书java:如何生成以及导入x.509证书在OpenSSL官网上下栽了OpenSSL工具,在配置环境变量后,执行以下命令://创建根证书,并采用自签名签署它//创建私钥openssl genrsa -out root/root-key.pem 1024//创建证书请求openssl req -new -out root/root-req.csr -key root/root-key.pem//自签署根证书openssl x509 -req -in root/root-req.csr -out root/root-cert.pem -signkey root/root-key.pem -days 3650//将根证书导出成浏览器支持的.p12(PKCS12)格式openssl pkcs12 -export -clcerts -in root/root-cert.pem -inkey root/root-key.pem -out root/root.p12//创建服务器证书,并采用根证书签署它//创建私钥openssl genrsa -out server/server-key.pem 1024//创建证书请求openssl req -new -out server/server-req.csr -key server/server-key.pem//签署服务器证书openssl x509 -req -in server/server-req.csr -out server/server-cert.pem -signkey server/server-key.pem -CA root/root-cert.pem -CAkey root/root-key.pem -CAcreateserial -days 3650//将客户证书导出成浏览器支持的.p12(PKCS12)格式openssl pkcs12 -export -clcerts -in server/server-cert.pem -inkey server/server-key.pem -out server/server.p12//创建客户证书,并采用根证书签署它//创建私钥openssl genrsa -out client/client-key.pem 1024//创建证书请求openssl req -new -out client/client-req.csr -key client/client-key.pem//签署客户证书openssl x509 -req -in client/client-req.csr -out client/client-cert.pem -signkey client/client-key.pem -CA root/root-cert.pem -CAkey root/root-key.pem -CAcreateserial -days 3650 //将客户证书导出成浏览器支持的.p12(PKCS12)格式openssl pkcs12 -export -clcerts -in client/client-cert.pem -inkey client/client-key.pem -out client/client.p12//将根证书导入到trustStore中keytool -import -v -trustcacerts -storepass password -alias root -file root-cert.pem -keystore root.jksv。
生成 SSL 证书可以使用 Java 的 `keytool` 工具。
以下是一些基本的步骤:### 使用 keytool 生成 SSL 证书#### 步骤 1: 创建密钥库(keystore)```bashkeytool -genkey -alias your_alias -keyalg RSA -keystore your_keystore.jks -keysize 2048```这将提示你输入一些信息,如密码、姓名、组织等。
#### 步骤 2: 生成证书签名请求(CSR)```bashkeytool -certreq -alias your_alias -keystore your_keystore.jks -file your_csr_file.csr```这将生成一个 CSR 文件,它包含了你的公钥信息。
#### 步骤 3: 自签名证书```bashkeytool -export -alias your_alias -fileyour_certificate.cer -keystore your_keystore.jks```这将生成一个自签名的证书文件。
以上命令中的参数:- `your_alias` 是你为证书分配的别名。
- `your_keystore.jks` 是你的密钥库文件名。
- `your_csr_file.csr` 是证书签名请求文件名。
- `your_certificate.cer` 是自签名证书文件名。
这些命令会在命令行中运行,确保替换掉 `your_alias`、`your_keystore.jks` 等为你自己的命名和路径。
请注意,生成的证书可以用于测试或内部使用。
如果要在生产环境中使用 SSL 证书,最好从受信任的证书颁发机构(CA)获取正式证书。
Java中的数字证书的生成及维护方法Java中的keytool.exe可以用来创建数字证书,所有的数字证书是以一条一条(采用别名区别)的形式存入证书库的中,证书库中的一条证书包含该条证书的私钥,公钥和对应的数字证书的信息。
证书库中的一条证书可以导出数字证书文件,数字证书文件只包括主体信息和对应的公钥。
每一个证书库是一个文件组成,它有访问密码,在首次创建时,它会自动生成证书库,并要求指定访问证书库的密码。
在创建证书的的时候,需要填写证书的一些信息和证书对应的私钥密码。
这些信息包括 CN=xx,OU=xx,O=xx,L=xx,ST=xx,C=xx,它们的意思是:CN(Common Name名字与姓氏)OU(Organization Unit组织单位名称)O(Organization组织名称)L(Locality城市或区域名称)ST(State州或省份名称)C(Country国家名称)可以采用交互式让工具提示输入以上信息,也可以采用参数-dname "CN=xx,OU=xx,O=xx,L=xx,ST=xx,C=xx"来自动创建。
1、示例如下所示一句采用交互式创建一个证书,指定证书库为 abnerCALib,创建别名为abnerCA的一条证书,它指定用RSA算法生成,且指定密钥长度为 1024,证书有效期为3650天:如下图所示:上图中最后一步,我们输入的是 CN,代表中国的缩写,也可以直接输入“中国”两个字。
2、证书的操作方法●证书的显示如:将显示 abnerCALib证书库的的所有证书列表:如下图示:又如: keytool -list -alias abnerCA -keystore abnerCALib将显示 abnerCALib证书库中别名为abnerCA的证书的信息。
如下图所示:又如: keytool -list -v -alias abnerCA -keystore abnerCALib将显示证书的详细信息( -v参数)如下图所示:●将证书导出到证书文件如: keytool -export -alias abnerCA -file abnerCA.cer -keystore abnerCALib将把证书库 abnerCALib中的别名为abnerCA的证书导出到abnerCA.cer证书文件中,它包含证书主体的信息及证书的公钥,不包括私钥,可以公开,如下图所示 :上面导出的证书文件是以二进制编码文件,无法用文本编辑器正确显示,因此不利用公布证书,可以加上 -rfc参数以一种可打印的编者编码输出。
JavaKeyStore⽤命令⽣成keystore⽂件⾃⼰⽣成证书,简介1.⽣成keyStore⽂件在命令⾏下执⾏以下命令:Shell代码收藏代码keytool -genkey -validity 36000 -alias -keyalg RSA -keystore d:\zlex.keystore其中-genkey表⽰⽣成密钥-validity指定证书有效期,这⾥是36000天-alias指定别名,这⾥是-keyalg指定算法,这⾥是RSA-keystore指定存储位置,这⾥是d:\zlex.keystore在这⾥我使⽤的密码为 123456控制台输出:Console代码收藏代码输⼊keystore密码:再次输⼊新密码:您的名字与姓⽒是什么?[Unknown]: 您的组织单位名称是什么?[Unknown]: zlex您的组织名称是什么?[Unknown]: zlex您所在的城市或区域名称是什么?[Unknown]: BJ您所在的州或省份名称是什么?[Unknown]: BJ该单位的两字母国家代码是什么[Unknown]: CNCN=, OU=zlex, O=zlex, L=BJ, ST=BJ, C=CN 正确吗?[否]: Y输⼊<tomcat>的主密码(如果和 keystore 密码相同,按回车):再次输⼊新密码:这时,在D盘下会⽣成⼀个zlex.keystore的⽂件。
2.⽣成⾃签名证书光有keyStore⽂件是不够的,还需要证书⽂件,证书才是直接提供给外界使⽤的公钥凭证。
导出证书:Shell代码收藏代码keytool -export -keystore d:\zlex.keystore -alias -file d:\zlex.cer -rfc其中-export指定为导出操作-keystore指定keystore⽂件-alias指定导出keystore⽂件中的别名-file指向导出路径-rfc以⽂本格式输出,也就是以BASE64编码输出这⾥的密码是 123456控制台输出:Console代码收藏代码输⼊keystore密码:保存在⽂件中的认证 <d:\zlex.cer>。
生成证书命令keytoolNOTE: (xp: %JAVA_HOME%/jre/lib/security/cacerts, linux: $JAVA_HOME/jre/lib/security /cacerts)验证是否已创建过同名的证书keytool -list -v -alias tomcat -keystore "%JAVA_HOME%/jre/lib/security/cacerts " -store pass changeit删除已创建的证书keytool -delete -alias tomcat -keystore "%%JAVA_HOME%/jre/lib/security/cacerts " -sto repass changeitKeytool是一个Java数据证书的管理工具。
keystoreKeytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里,包含两种数据:密钥实体(Key entity)——密钥(secret key)又或者是私钥和配对公钥(采用非对称加密)可信任的证书实体(trusted certificate entries)——只包含公钥Alias(别名)每个keystore都关联这一个独一无二的alias,这个alias通常不区分大小写keystore的存储位置在没有制定生成位置的情况下,keystore会存在与用户的系统默认目录,如:对于window xp系统,会生成在系统的C:\Documents and Settings\UserName\文件名为“.keystore”keystore的生成引用keytool -genkey -alias tomcat -keyalg RSA-keystore d:\mykeystore -dname "CN=local host, OU=localhost, O=localhost, L=SH, ST=SH, C=CN" -keypass changeit -storepass -validity 180参数说明:-genkey表示要创建一个新的密钥-dname表示密钥的Distinguished Names,CN=commonNameOU=organizationUnitO=organizationNameL=localityNameS=stateNameC=countryDistinguished Names表明了密钥的发行者身份-keyalg使用加密的算法,这里是RSA-alias密钥的别名-keypass私有密钥的密码,这里设置为changeit-keystore 密钥保存在D:盘目录下的mykeystore文件中-storepass 存取密码,这里设置为changeit,这个密码提供系统从mykeystore文件中将信息取出-validity该密钥的有效期为180天(默认为90天)cacerts证书文件(The cacerts Certificates File)该证书文件存在于java.home\jre\lib\security目录下,是Java系统的CA证书仓库创建证书1.服务器中生成证书:(注:生成证书时,CN要和服务器的域名相同,如果在本地测试,则使用localhos t)keytool -genkey -alias tomcat -keyalg RSA -keystore d:\mykeystore -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN" -keypass changeit -storepass ch angeit2.导出证书,由客户端安装:keytool -export -alias tomcat -keystore d:\mykeystore -file d:\mycerts.cer -storepass ch angeit3.客户端配置:为客户端的JVM导入密钥(将服务器下发的证书导入到JVM中)keytool -import -trustcacerts -alias tomcat -keystore "%JAVA_HOME%/jre/lib/security/ca certs " -file d:\mycerts.cer -storepass changeit生成的证书可以交付客户端用户使用,用以进行SSL通讯,或者伴随电子签名的jar包进行发布者的身份认证。
实验背景:系统环境:Windows XP | SUN JDK1.6U4 | Tomcat6.0.14 | CAS Server 3.1.1 + CASClient 2.1.1主机完整名称:Linly浏览器:FireFox V2.0.0.11实验步骤:STEP 1,搭建Java Web服务器环境安装JDK + Tomcat 6.0.14 ,HTTP端口8080 ,HTTPS端口8443JAVA_HOME = D:\Java\jdk1.6.0_04CATALINA_HOME = D:\Java\apache-tomcat-6.0.14安装完毕,启动Tomcat ,在浏览器上测试http://Linly:8080/出现上述界面,表明系统STEP1成功搭建。
STEP 2,使用Java Keytool工具为系统生成HTTPS证书,并为系统注册(Java Keytool相关资料可参阅:Java keytool 安全证书学习笔记),在DOS窗体运行以下指令(建议编写一个BAT批处理文件执行)clsrem please set the env JAVA_HOME before run this bat filerem delete alia tomcat if it is existedkeytool -delete -alias tomcatsso -keystore %JAVA_HOME%/jre/lib/security/cacerts-storepass changeitkeytool -delete -alias tomcatsso -storepass changeit(注释:清除系统中可能存在的名字为tomcatsso 的同名证书)rem list all alias in the cacertskeytool -list -keystore %JAVA_HOME%/jre/lib/security/cacerts -storepass changeit(注释:列出系统证书仓库中存在证书名称列表)rem generator a keykeytool -genkey -keyalg RSA -alias tomcatsso -dname "cn=linly" -storepass changeit (注释:指定使用RSA算法,生成别名为tomcatsso的证书,存贮口令为changeit,证书的DN为"cn=linly" ,这个DN必须同当前主机完整名称一致哦,切记!!!)rem export the key keytool -export -alias tomcatsso -file %java_home%/jre/lib/security/tomcatsso.crt-storepass changeit(注释:从keystore中导出别名为tomcatsso的证书,生成文件tomcatsso.crt)rem importinto trust cacertskeytool -import -alias tomcatsso -file %java_home%/jre/lib/security/tomcatsso.crt -keystore %java_home%/jre/lib/security/cacerts -storepass changeit(注释:将tomcatsso.crt导入jre的可信任证书仓库。
使⽤JDK⾃带的keytool⼯具⽣成证书⼀、keytool 简介 keytool 是java⽤于管理密钥和证书的⼯具,它使⽤户能够管理⾃⼰的公钥/私钥对及相关证书,⽤于(通过数字签名)⾃我认证(⽤户向别的⽤户/服务认证⾃⼰)或数据完整性以及认证服务。
在JDK 1.4以后的版本中都包含了这⼀⼯具,它的位置为%JAVA_HOME%\bin\keytool.exe,如下图所⽰:其功能包括:创建并管理密钥创建并管理证书作为CA 为证书授权导⼊导出证书⼆、keytool的⽤法三、⽣成证书⽣成证书主要是使⽤" -genkey",该命令的可⽤参数如下:⽰例:⽣成⼀个名称为tomcat的证书(cas服务https环境证书⽣成⽰例)keytool -genkey -alias tomcat -keyalg RSA -keystore D:/cas.keystore功能说明:⽣成⼀个别名为tomcat的证书,该证书存放在名为cas.keystore的密钥库中,若cas.keystore密钥库不存在则创建。
参数说明:-genkey:⽣成⼀对⾮对称密钥;-alias:指定密钥对的别名,该别名是公开的;-keyalg:指定加密算法,本例中的采⽤通⽤的RAS加密算法;-keystore:密钥库的路径及名称,不指定的话,默认在操作系统的⽤户⽬录下⽣成⼀个".keystore"的⽂件。
注意: 1.密钥库的密码⾄少必须6个字符,可以是纯数字或者字母或者数字和字母的组合等等 2."名字与姓⽒"应该是输⼊域名,⽽不是我们的个⼈姓名,其他的可以不填执⾏完上述命令后,在D盘下⽣成了⼀个"cas.keystore"的⽂件,如下图所⽰:四、导出证书导出证书主要是使⽤" -export",该命令的可⽤参数如下:⽰例:将名为cas.keystore的证书库中别名为tomcat的证书条⽬导出到证书⽂件cas.crt中keytool -export -trustcacerts -alias tomcat -file D:/cas.crt -keystore D:/cas.keystore执⾏完上述命令后,在D盘下⽣成了⼀个"cas.crt"的⽂件,如下图所⽰:五、导⼊证书导⼊证书主要是使⽤" -import",该命令的可⽤参数如下:⽰例1:将证书⽂件cas.crt导⼊到名为test_cacerts的证书库中keytool -import -file D:/cas.crt -keystore D:/test_cacerts⽰例2:将证书⽂件test.crt导⼊到名为cacerts的证书库中(这⾥将会演⽰将证书导⼊到jdk的证书库中)keytool -import -trustcacerts -alias tomcat -file D:/cas.crt -keystore %JAVA_HOME%/jre/lib/security/cacerts注:次例中jdk证书库的默认密码为:changeit六、查看密钥库⾥⾯的证书keytool -list -keystore D:/cas.keystore七、查看证书信息keytool -printcert -file D:/cas.crt⼋、删除密钥库中的条⽬⽰例:删除密钥库cas.keystore中别名为tomcat的证书条⽬keytool -delete -keystore D:/cas.keystore -alias tomcat九、修改证书条⽬的⼝令⽰例:将密钥库cas.keystore中别名为test的证书条⽬的密码修改为666666(别名为test的证书条⽬必须存在)keytool -keypasswd -alias test -keystore D:/cas.keystore。
Java使⽤keytool创建CA证书的操作keytool是⼀个密钥和证书管理⼯具1.keytool⼯具位置keytool⼯具在 JDK 的安装⽬录的 bin ⽬录下⾯2.keytool⼯具命令展⽰打开命令⾏进⼊ bin ⽬录,然后输⼊命令 keytool.exe,就能看见keytool⼯具⽀持哪些命令,如下图所⽰:注意下⾯的⽤法提⽰:使⽤ “keytool -command_name -help” 获取 command_name 的⽤法3.查看具体命令⽤法这⾥我们使⽤ -genkeypair 命令来创建密钥库,先来看看 genkeypair 命令的⽤法,如下图所⽰:4.新建密钥库.\keytool.exe -genkeypair -alias CA -keyalg RSA -validity 30 -keystore D:\keytoolCert\.CAkeystore4.1.参数说明-alias CA: alias表⽰别名的意思,这⾥别名为 CA,如果不写的话,它的默认值为 mykey-keyalg RSA:密钥算法名称,这⾥使⽤RSA算法-validity 30:有效天数为30天-keystore D:\keytoolCert.CAkeystore:指定密钥库存放的位置。
命令输⼊过后会让我们输⼊密码、唯⼀判别名(dname)和密钥⼝令注意密钥库的密码⾄少必须6个字符,可以是纯数字或者字母或者数字和字母的组合等等名字与姓⽒"应该是输⼊域名,⽽不是我们的个⼈姓名,其他的可以不填这条命令的完整含义是:使⽤ keytool.exe ,创建⼀个别名为 CA,算法为 RSA,有效天数为30天的密钥,并将它存放在 D:\keytoolCert\ ⽬录下的⼀个名叫 .CAkeystore 的密钥库中,如果密钥库不存在则⾃动创建。
执⾏完上述命令后,在 D:\keytoolCert\ ⽬录下⽣成了⼀个".CAkeystore"的⽂件,如下图所⽰:5.查看密钥库⾥⾯的信息命令如下:.\keytool.exe -list -keystore D:\keytoolCert\.CAkeystore -v结果如下:5.1.查看密钥库信息其他命令查看密钥库中指定密钥的信息:keytool.exe -list -alias CA -keystore“D:\keytoolCert.CAkeystore” -v6.导出密钥到证书⽂件.\keytool -export -alias CA -file D:\keytoolCert\pendIssueCert_1.cer -keystore D:\keytoolCert\.CAkeystore执⾏完上述命令后,在 D:\keytoolCert\ ⽬录下⽣成了⼀个"pendIssueCert_1.cer"的证书⽂件,如下图所⽰:7.查看指定证书⽂件的信息:keytool.exe -printcert -file D:\keytoolCert\.pendIssueCert_1.cer -v8.导⼊证书将证书⽂件 pendIssueCert_1.cer 导⼊到名为 .pendIssuekeystore 的证书库中keytool -import -keystore D:\keytoolCert\.pendIssuekeystore -file D:\keytoolCert\pendIssueCert_1.cer注意:D:\keytoolCert.pendIssuekeystore 密钥库不存在会⾃动创建导⼊时没有输⼊ -alias 那么它的别名就是 mykey ,如果有需要可以⾃⼰指定别名9.删除密钥库中的条⽬删除密钥库 .pendIssuekeystore 中别名为 mykey 的证书条⽬keytool -delete -keystore D:\keytoolCert\.pendIssuekeystore -alias mykey删除前先查看有⼀个密钥,删除后再查看就没有了,表⽰删除成功。
本章重点:第4章使用数字签名来确定数据的身份,保证了身份的确定性以及不可篡改性和不可否认性。
使用数字签名的前提是接收数据者能够确性验证签名时所使用的公钥确实是某个人的,数字证书可以解决这一问题。
本章主要内容:使用Keytool工具创建数字证书使用Keytool工具和Java程序读取并显示数字证书使用Keytool工具和Java程序维护密钥库使用Java程序签发数字证书对单个数字证书作初步检验数字证书的创建数字证书的主要功能是保存公钥和某个人或机构的对应关系,本节介绍几种数字证书的创建方法。
它们都使用了keytool工具的-genkey参数。
5.1.1 使用默认的密钥库和算法创建数字证书★ 实例说明本实例使用J2SDK提供的keytool工具用默认的密钥库和算法创建几个数字证书。
★运行程序keytool程序运行时加上命令行参数–genkey即可。
在命令行中输入“keytool –genkey”将自动使用默认的算法生成公钥和私钥,并以交互方式获得公钥持有者的信息。
其交互过程如下,其中带下划线的字符为用户键盘输入的内容,其他为系统提示的内容。
C:\>keytool -genkey输入keystore密码: 123456您的名字与姓氏是什么?[Unknown]: Xu Yingxiao1您的组织单位名称是什么?[Unknown]: Network Center您的组织名称是什么?[Unknown]: Shanghai University您所在的城市或区域名称是什么?[Unknown]: ZB您所在的州或省份名称是什么?[Unknown]: Shanghai该单位的两字母国家代码是什么[Unknown]: CNCN=Xu Yingxiao1, OU=Network Center, O=Shanghai University, L=ZB,ST=Shanghai, C=CN 正确吗?[否]:是输入的主密码(如果和 keystore 密码相同,按回车): abcdefgC:\>如果使用中文操作系统,上述操作中输入的“是”不能用英文“yes”代替。
JAVA调⽤keytool⽣成keystore和cer证书keytool是⼀个Java数据证书的管理⼯具,keytool将密钥(key)和证书(certificates)存在⼀个称为keystore的⽂件中在keystore⾥,包含两种数据:密钥实体(Key entity)——密钥(secret key)⼜或者是私钥和配对公钥(采⽤⾮对称加密)可信任的证书实体(trusted certificate entries)——只包含公钥ailas(别名)每个keystore都关联这⼀个独⼀⽆⼆的alias,这个alias通常不区分⼤⼩写下⾯给出⼀个java 调⽤ keytool ⽣成keystore 和 cer 证书的例⼦测试:public class ExportCertFormKeystore {public void execCommand(String[] arstringCommand) {for (int i = 0; i < arstringCommand.length; i++) {System.out.print(arstringCommand[i] + " ");}try {Runtime.getRuntime().exec(arstringCommand);} catch (Exception e) {System.out.println(e.getMessage());}}public void execCommand(String arstringCommand) {try {Runtime.getRuntime().exec(arstringCommand);} catch (Exception e) {System.out.println(e.getMessage());}}/*** ⽣成密钥*/public void genkey() {String[] arstringCommand = new String[] {"cmd ", "/k","start", // cmd Shell命令"keytool","-genkey", // -genkey表⽰⽣成密钥"-validity", // -validity指定证书有效期(单位:天),这⾥是36000天"36500","-keysize",// 指定密钥长度"1024","-alias", // -alias指定别名,这⾥是ss"ss","-keyalg", // -keyalg 指定密钥的算法 (如 RSA DSA(如果不指定默认采⽤DSA))"RSA","-keystore", // -keystore指定存储位置,这⾥是d:/demo.keystore"d:/demo.keystore","-dname",// CN=(名字与姓⽒), OU=(组织单位名称), O=(组织名称), L=(城市或区域名称), // ST=(州或省份名称), C=(单位的两字母国家代码)""CN=(SS), OU=(SS), O=(SS), L=(BJ), ST=(BJ), C=(CN)","-storepass", // 指定密钥库的密码(获取keystore信息所需的密码)"123456","-keypass",// 指定别名条⽬的密码(私钥的密码)"123456","-v"// -v 显⽰密钥库中的证书详细信息};execCommand(arstringCommand);}/*** 导出证书⽂件*/public void export() {String[] arstringCommand = new String[] {"cmd ", "/k","start", // cmd Shell命令"keytool","-export", // - export指定为导出操作"-keystore", // -keystore指定keystore⽂件,这⾥是d:/demo.keystore "d:/demo.keystore","-alias", // -alias指定别名,这⾥是ss"ss","-file",//-file指向导出路径"d:/demo.cer","-storepass",// 指定密钥库的密码"123456"};execCommand(arstringCommand);}}View CodeJUnit测试⽤例:import org.junit.Test;public class ExportCertFormKeystoreTest {@Testpublic void genkeyTest() {//⽣成密钥测试new ExportCertFormKeystore().genkey();}@Testpublic void exportTest() {//导出证书⽂件测试new ExportCertFormKeystore().export();}}View Code运⾏测试⽤例之后,在D盘的根⽬录下⾯会⽣成两个⽂件:demo.keystoredemo.cer。
java x509certificate用法X509Certificate是Java中用于表示数字证书的类,它提供了一组方法来操作和验证数字证书。
在Java中,X509Certificate通常用于安全通信,如SSL/TLS连接、数字签名和证书验证等场景。
要使用X509Certificate,首先需要获取数字证书的字节数组。
这可以通过从文件中读取证书、从证书存储中获取证书或从证书请求中生成证书等方式获得。
一旦获得了证书字节数组,就可以使用X509Certificate类的构造函数创建一个新的对象。
以下是一个简单的示例,演示如何使用字节数组创建一个X509Certificate对象:```javaimportjava.security.cert.Certificate;importjava.security.cert.X509Certificate;//假设已经获得了证书字节数组byte[]certBytes=...;X509Certificatecertificate=newX509Certificate(certBytes);```二、验证数字证书X509Certificate类提供了一组方法来验证数字证书,如验证证书的有效期、签发者、主题等。
可以使用isValid()方法检查证书是否有效,使用getIssuerDN()方法获取证书的签发者信息,使用getSubjectDN()方法获取证书的主题信息等。
以下是一个示例,演示如何验证数字证书:```java//假设已经有一个X509Certificate对象X509Certificatecertificate=...;//验证证书有效性if(certificate.isValid()){System.out.println("证书有效");}else{System.out.println("证书无效");}//获取签发者信息X509CertInfocertInfo=(X509CertInfo)certificate.get(X509Ce );GeneralNameissuerName=(GeneralName)certInfo.getIssuerDN() .getName();Stringissuer=issuerName.getName(X509Name.RFC2253);System.out.println("签发者:"+issuer);//获取主题信息X509CertInfosubjectInfo=(X509CertInfo)certificate.get(X50 9CertInfo.SUBJECT);Stringsubject=((X509Name)subjectInfo.getSubjectDN().getNa me()).toString();System.out.println("主题:"+subject);```三、使用X509Certificate进行安全通信在安全通信中,可以使用X509Certificate进行SSL/TLS连接、数字签名和证书验证等操作。
java certificate工具类【实用版】目录1.Java 证书概述2.Java 证书工具类介绍3.Java 证书工具类的使用示例4.总结正文1.Java 证书概述Java 证书是一种用于证明 Java 应用程序安全性和可靠性的电子证明文件。
通过使用证书,可以确保客户端在运行 Java 应用程序时,应用程序没有被篡改或伪造。
Java 证书由认证机构 (Certificate Authority,CA) 颁发,并使用公钥基础设施 (Public Key Infrastructure,PKI) 进行管理。
2.Java 证书工具类介绍Java 证书工具类是一组用于处理 Java 证书的类和方法。
它们提供了用于生成、解析、验证和存储证书的 API。
Java 证书工具类包括以下内容:- 证书工厂 (CertificateFactory):用于生成和解析证书的工厂类。
- 证书颁发机构 (CertificateAuthority):用于管理证书颁发机构的类。
- 证书存储 (CertPath):用于存储证书的类。
- 证书链 (CertificateChain):用于表示证书链的类。
- 证书路径 (CertificatePathBuilder):用于构建证书链的类。
3.Java 证书工具类的使用示例以下是一个使用 Java 证书工具类的示例,用于从文件中读取证书并验证其签名:```javaimport java.io.FileInputStream;import java.io.IOException;import java.security.Certificate;import java.security.CertificateFactory;import java.security.PublicKey;import java.security.Signature;public class CertificateExample {public static void main(String[] args) throws IOException {// 从文件中读取证书CertificateFactory certificateFactory = CertificateFactory.getInstance("X509");FileInputStream fis = newFileInputStream("certificate.crt");Certificate certificate =certificateFactory.generateCertificate(fis);// 验证证书签名PublicKey publicKey = certificate.getPublicKey();Signature signature =Signature.getInstance("SHA256WithRSA");signature.initVerify(publicKey);signature.verify(certificate.getSignedContent());System.out.println("Certificate signature is valid.");}}```4.总结Java 证书工具类提供了用于处理 Java 证书的类和方法。