JDK自带工具keytool生成ssl证书
- 格式:doc
- 大小:232.00 KB
- 文档页数:10
jdk linux 生成crt证书【实用版】目录一、JDK 自带工具 keytool 简介二、在 Linux 环境下生成 CRT 证书的步骤三、生成 CRT 证书的注意事项四、总结正文一、JDK 自带工具 keytool 简介keytool 是 Java Development Kit (JDK) 自带的一款工具,用于生成和管理 Java 密钥库(KeyStore)和证书(Certificate)。
在项目中,我们可以使用 keytool 生成 SSL 证书,以实现 HTTPS 数据传输的安全性。
二、在 Linux 环境下生成 CRT 证书的步骤1.安装 JDK在开始之前,确保你的 Linux 系统已经安装了 JDK。
如果没有安装,请从 Oracle 官网下载并安装合适版本的 JDK。
2.切换到 JDK 目录切换到 JDK 安装目录,例如:/usr/local/jdk1.8.0_291,使用以下命令:```cd /usr/local/jdk1.8.0_291```3.使用 keytool 生成自签名证书在 JDK 目录下,执行以下命令以生成一个自签名的证书:```keytool -genkey -alias mykey -keyalg RSA -keysize 2048-keystore mykeystore -validity 365 -storepass changeit -keypass changeit```其中,`mykey`是证书的别名,`mykeystore`是密钥库的文件名,`changeit`是密钥库和证书的密码。
4.导出 CRT 文件证书生成后,我们需要将其导出为 CRT 文件。
执行以下命令:```keytool -export -alias mykey -keystore mykeystore -file mycert.crt -certpath```其中,`mycert.crt`是导出的 CRT 文件名。
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 需导入的证书下面是各选项的缺省值。
jdk linux 生成crt证书摘要:一、JDK 自带工具keytool 简介二、生成SSL 证书的步骤1.创建KeyStore2.创建证书请求3.创建自签名证书4.将证书安装到KeyStore5.导出证书三、注意事项正文:一、JDK 自带工具keytool 简介在Java 开发中,为了保证数据的安全传输,我们常常需要使用SSL 证书来实现HTTPS。
而JDK 自带的工具keytool 可以帮助我们生成所需的SSL 证书。
二、生成SSL 证书的步骤1.创建KeyStore首先,我们需要创建一个KeyStore 对象,用于存储生成的SSL 证书。
在Linux 环境下,我们可以使用keytool 命令来创建一个KeyStore 文件:```keytool -keystore myKeyStore.jks -storepass changeit -keyalg RSA -keysize 2048 -validity 365 -exportcert -alias myCert```其中,`myKeyStore.jks`是KeyStore 文件的名称,`changeit`是KeyStore 的密码,`RSA`是密钥算法,`2048`是密钥长度,`365`是证书的有效期,`myCert`是证书的别名。
2.创建证书请求接下来,我们需要创建一个证书请求,以便于生成自签名证书。
可以使用以下命令来创建证书请求:```keytool -req -new -keyalg RSA -keysize 2048 -validity 365 -exportcert -alias myCert```3.创建自签名证书利用证书请求,我们可以生成一个自签名证书。
使用以下命令来创建自签名证书:```keytool -selfsign -certreqs -alias myCert -keyalg RSA -keysize 2048 -validity 365 -exportcert -out myCert.crt```4.将证书安装到KeyStore生成自签名证书后,我们需要将其安装到KeyStore 中。
生成 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)获取正式证书。
数字证书中keytool命令使⽤说明这个命令⼀般在JDK\jre\lib\security\⽬录下操作keytool常⽤命令-alias 产⽣别名-keystore 指定密钥库的名称(就像数据库⼀样的证书库,可以有很多个证书,cacerts这个⽂件是jre⾃带的,你也可以使⽤其它⽂件名字,如果没有这个⽂件名字,它会创建这样⼀个)-storepass 指定密钥库的密码-keypass 指定别名条⽬的密码-list 显⽰密钥库中的证书信息-v 显⽰密钥库中的证书详细信息-export 将别名指定的证书导出到⽂件-file 参数指定导出到⽂件的⽂件名-delete 删除密钥库中某条⽬-import 将已签名数字证书导⼊密钥库-keypasswd 修改密钥库中指定条⽬⼝令-dname 指定证书拥有者信息-keyalg 指定密钥的算法-validity 指定创建的证书有效期多少天-keysize 指定密钥长度使⽤说明:导⼊⼀个证书命令可以如下:keytool -import -keystore cacerts -storepass 666666 -keypass 888888 -alias alibabacert -file C:\alibabajava\cert\test_root.cer 其中-keystore cacerts中的cacerts是jre中默认的证书库名字,也可以使⽤其它名字-storepass 666666中的666666是这个证书库的密码-keypass 888888中的888888是这个特定证书的密码-alias alibabacert中的alibabacert是你导⼊证书的别名,在其它操作命令中就可以使⽤它-file C:\alibabajava\cert\test_root.cer中的⽂件路径就是要导⼊证书的路径浏览证书库⾥⾯的证书信息,可以使⽤如下命令:keytool -list -v -alias alibabacert -keystore cacerts -storepass 666666要删除证书库⾥⾯的某个证书,可以使⽤如下命令:keytool -delete -alias alibabacert -keystore cacerts -storepass 666666要导出证书库⾥⾯的某个证书,可以使⽤如下命令:keytool -export -keystore cacerts -storepass 666666 -alias alibabacert -file F:\alibabacert_root.cer要修改某个证书的密码(注意:有些数字认证没有私有密码,只有公匙,这种情况此命令⽆效)这个是交互式的,在输⼊命令后,会要求你输⼊密码keytool -keypasswd -alias alibabacert -keystore cacerts这个不是交互式的,输⼊命令后直接更改Keytool -keypasswd -alias alibabacert -keypass 888888 -new 123456 -storepass 666666 -keystore cacertsOwner: CN=BOCTestCA, O=BOCTest, C=CNIssuer: CN=BOCTestCA, O=BOCTest, C=CNSerial number: 31e60001Valid from: Tue Oct 28 16:54:26 CST 2008 until: Sat Oct 28 16:54:26 CST 2028Certificate fingerprints:MD5: F0:35:F9:69:31:AE:87:01:6C:2D:56:BD:02:0A:16:4ASHA1: 24:EF:84:14:4E:BD:0D:37:59:2D:70:28:79:10:88:EA:0A:06:13:20Signature algorithm name: SHA1withRSAVersion: 3Extensions:#1: ObjectId: 2.5.29.19 Criticality=trueBasicConstraints:[CA:truePathLen:2147483647]#2: ObjectId: 2.5.29.15 Criticality=falseKeyUsage [DigitalSignatureNon_repudiationKey_EnciphermentData_EnciphermentKey_AgreementKey_CertSignCrl_Sign]#3: ObjectId: 2.5.29.14 Criticality=falseSubjectKeyIdentifier [KeyIdentifier [0000: E3 81 66 00 7B C9 8F 3F 5A 77 E0 6D 5C EB 41 42 ..f....?Zw.m\.AB 0010: C7 48 5A 10 .HZ.]]#4: ObjectId: 1.3.6.1.5.5.7.1.1 Criticality=falseAuthorityInfoAccess [[accessMethod: 1.3.6.1.5.5.7.48.1]#5: ObjectId: 2.5.29.31 Criticality=falseCRLDistributionPoints [[DistributionPoint:[CN=crl1, OU=crl, O=BOCTest, C=CN]]]#6: ObjectId: 2.5.29.32 Criticality=falseCertificatePolicies [[CertificatePolicyId: [2.5.29.32.0][PolicyQualifierInfo: [qualifierID: 1.3.6.1.5.5.7.2.182.1190010: 2E 31 37 31 2E 31 30 36 2F 63 70 73 2E 68 74 6D .171.106/cps.htm ]] ]]#7: ObjectId: 2.16.840.1.113730.1.1 Criticality=false NetscapeCertType [SSL CAS/MIME CAObject Signing CA]#8: ObjectId: 2.5.29.35 Criticality=falseAuthorityKeyIdentifier [KeyIdentifier [0000: E3 81 66 00 7B C9 8F 3F 5A 77 E0 6D 5C EB 41 42 ..f....?Zw.m\.AB 0010: C7 48 5A 10 .HZ.]]Trust this certificate? [no]: yesCertificate was added to keystore[root@orange3c bin]#NOTE: (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 " -storepass changeit删除已创建的证书keytool -delete -alias tomcat -keystore "%%JAVA_HOME%/jre/lib/security/cacerts " -storepass changeitKeytool是⼀个Java数据证书的管理⼯具。
keytool生成证书加密算法原理keytool 是Java JDK 自带的一个命令行工具,用于管理密钥和证书,通常用于
生成数字证书。
在使用 keytool 生成证书时,其加密算法原理是基于公钥基础设施(PKI)的。
PKI 使用一对密钥来加密和解密数据,包括私钥和公钥。
私钥用于加
密数据,而公钥用于解密数据。
公钥可以自由分发,而私钥则必须严格保密,以确保数据安全性。
当使用 keytool 生成证书时,首先会生成一个密钥对,其中包括一对公钥和私钥。
然后,将公钥放入证书中并将证书签名,以确保证书的真实性。
生成的证书可以被其他方使用来加密数据,而只有私钥的持有者才能解密这些数据。
keytool 生成证书的加密算法原理是基于公钥基础设施,使用密钥对来确保数
据的安全性和真实性。
这种加密算法在网络通信和数据传输中起着至关重要的作用,保护着我们的数据不被恶意窃取和篡改。
J D K自带工具k e y t o o l生成s s l证书(总12页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--JDK自带工具keytool生成ssl证书前言:因为公司项目客户要求使用HTTPS的方式来保证数据的安全,所以木有办法研究了下怎么生成ssl证书来使用https以保证数据安全。
百度了不少资料,看到JAVA的JDK自带生成SSL证书的工具:keytool,外加看了同事的心得体会,自己总结了一下具体的使用方法和使用过程中发现的问题及解决办法。
1:什么是HTTPSHTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块,并且会进行身份的验证。
问题:Firebug和postman之类的浏览器调试工具,为什么获取到的是明文解答:SSL是对传输的数据进行加密,针对的是传输过程的安全。
firebug之类的浏览器调试工具,因为他们得到的是客户端加密之前/解密之后的数据,因此是明文的。
2:什么是自签名证书就是自己生成的证书,并不是官方生成的证书。
除非是很正式的项目,否则使用自己签发的证书即可,因为官方生成证书是要花钱滴。
3:进入正题,使用JDK自带工具KeyTool 生成自签发证书!第一步:为服务器生成证书打开CMD命令行工具,cd到C盘根目录或者是jdk的bin目录下,如下图所示:附录1:常用keytool命令使用keytool命令生成证书:keytool-genkey-alias tomcat(别名)-keypass 123456(别名密码)-keyalg RSA(算法)-keysize 1024(密钥长度)-validity 365(有效期,天单位)-keystore D:/keys/(指定生成证书的位置和证书名称)-storepass 123456(获取keystore信息的密码)方便复制版:keytool -genkey -alias tomcat -keypass 123456 -keyalg RSA -keysize 1024 -validity 365 -keystore D:/keys/ -storepass 123456图例:回车执行后如下图:点击回车即可在D:/keys/文件夹内生成名为:的文件。
利用OpenSSL 和keytool 实现tomcat下自签名证书前言项目需要在tomcat中配置ssl认证,学习了一下怎么配置,由于对pki认证体系、证书的制作和发放过程不了解,整个配置过程坎坷,所以配置成功后立即记录下来希望以后遇到类似的情况有所参考。
本文讲述了如何使用openssl 制作证书、keytool生成证书申请并将证书导入证书库、如何配置tomcat,和配置当中出现问题的解释。
本文用到的工具:OpenSSL.rar(点击下载) keytool(JDK中自带的工具)(这里下载的OpenSSL.rar,其中的f并没有在ssl文件夹中,需新建ssl文件夹并把f 放入其中)。
使用openssl 生成根证书生成1.解压openssl.rar 到c:\openssl 下,在命令行中将目录转到c:\openssl\bin2. 生成根证书的私钥,生成文件cakey.pemopenssl genrsa -out cakey.pem 10243.根据私钥生成证书申请,生成文件careq.csropenssl req -new -out careq.csr -key cakey.pem在生成申请时需要填入相关的信息,根据部署的地点不同做相应的改变4. 利用根证书申请生成自签名根证书,生成文件cacert.pemopenssl x509 -req -in careq.csr -out cacert.pem -signkey cakey.pem -days 3650至此根证书制作完毕,为了方便起见,在openssl.rar\bin\ 中已经包含生成根证书.bat 点击执行即可。
生成tomcat证书库文件和证书申请1.生成证书库文件tomcatkey.jkskeytool -genkey -alias tomcat_server -keyalg RSA -keysize 1024 -validity "1825" -keypass 123456 -keystore tomcatkey.jks -storepass 123456红色部分可以根据具体的部署情况做相应的改变-alias 证书库文件中私钥的别名-keypass 证书库文件私钥的密码-keystore 证书库文件的存储路径-storepass 证书库文件的密码执行后需要填写相应的信息名称和姓氏一定要填入服务器的域名或ip地址,否则部署之后会提示证书地址不匹配的错误剩余的部分必须和根证书填写一致。
4.2.1 成立工作目录demoCA4.2.2 生成CA私钥和自签名根证书4.2.2.1 生成CA私钥openssl genrsa -out demoCA\ca-key.pem 10244.2.2.2 生成待签名证书openssl req -new -out demoCA\ca-req.csr -keydemoCA\ca-key.pem4.2.2.3 用CA私钥进行自签名openssl x509 -req -in demoCA\ca-req.csr -out ca\ca-cert.pem -signkey demoCA\ca-key.pem -days 3654.3 设置Tomcat 4.x在本文顶用符号"%JDK_HOME%"来表示JDK的安装位置,用符号"%TCAT_HOME%" 表示Tomcat的安装位置。
4.3.1成立工作目录mkdir server4.3.2 生成server端证书4.3.2.1 生成KeyPair%JDK_HOME%\bin\keytool -genkey -alias tomcat_server-validity 365 -keyalg RSA -keysize 1024 -keypass 123456-storepass 123456 -keystore server\server_keystore4.3.2.2 生成待签名证书%JDK_HOME%\bin\keytool -certreq -alias tomcat_server -sigalg MD5withRSA -file server\server.csr -keypass 123456 -keystore server\server_keystore -storepass changeit4.3.2.3 用CA私钥进行签名openssl x509 -req -in server\server.csr -outserver\server-cert.pem -CA demoCA\ca-cert.pem -CAkey demoCA\ca-key.pem -CAserial demoCA/ca-cert.srl-CAcreateserial -days 3654.3.2.4 导入信任的CA根证书到JSSE的默许位置(%JDK_ROOT %/jre/security/cacerts)%JDK_HOME%\bin\ keytool -import -v -trustcacerts -storepass 123456 -alias my_ca_root -file demoCA\ca-cert.pem-keystore %JDK_HOME%\jre\lib\security\cacerts4.3.2.5 把CA签名后的server端证书导入keystore%JDK_HOME%\bin\keytool -import -v -trustcacerts -storepass changeit -alias tomcat_server -file server\server-cert.pem-keystore server\server_keystore%JDK_HOME%\bin\keytool -import -v -alias tomcat_server -file server\server-cert.pem -storepass 123456 -keystoreserver_keystore4.3.2.6 查看server端证书keytool -list -keystore %JDK_HOME%\jre\lib\security\cacerts keytool -list -keystore server\server_keystore4.3.3 修改server.xml使Tomcat支持SSL第一找到以下内容,去掉对其的注释。
keytool生成证书1.创建一个证书C:\jdk1.5.0_04\bin>keytool -genkey -alias xahCA -keyalg RSA -keystore dyfCALib 输入keystore密码:admindyf您的名字与姓氏是什么?[Unknown]:徐吖禾您的组织单位名称是什么?[Unknown]:天河您的组织名称是什么?[Unknown]:天河有限公司您所在的城市或区域名称是什么?[Unknown]:南京您所在的州或省份名称是什么?[Unknown]:江苏该单位的两字母国家代码是什么[Unknown]:CNCN=徐吖禾, OU=天河, O=天河有限公司, L=南京, ST=江苏, C=CN 正确吗?[否]:y输入的主密码(如果和keystore 密码相同,按回车):xahadmin2.列出证书库中所有的证书(一共有两个:xahca和dyfca)C:\jdk1.5.0_04\bin>keytool -list -keystore dyfCALib输入keystore密码:admindyfKeystore 类型:jksKeystore 提供者:SUN您的keystore 包含 2 输入xahca, 2006-12-16, keyEntry,认证指纹(MD5):2C:36:A5:52:D0:4A:BA:72:60:19:2F:32:80:02:A9:C5dyfca, 2006-12-16, keyEntry,认证指纹(MD5):E7:8B:D8:93:1A:06:B1:B8:51:3D:13:CF:46:38:AC:773.列出证书库中别名为xahCA的证书C:\jdk1.5.0_04\bin>keytool -list -v -alias xahCA -keystore dyfCALib输入keystore密码:admindyf别名名称:xahCA创建日期:2006-12-16输入类型:KeyEntry认证链长度: 1认证[1]:Owner: CN=徐吖禾, OU=天河, O=天河有限公司, L=南京, ST=江苏, C=CN发照者:CN=徐吖禾, OU=天河, O=天河有限公司, L=南京, ST=江苏, C=CN序号:458400d7有效期间:Sat Dec 16 22:21:11 CST 2006 至:Fri Mar 16 22:21:11 CST 2007认证指纹:MD5:2C:36:A5:52:D0:4A:BA:72:60:19:2F:32:80:02:A9:C5SHA1:E6:A2:DD:EE:D2:8F:FB:D4:85:CE:46:4F:7E:25:7F:C4:C2:69:68:DF4.删除证书库中证书别名为xahCA的证书C:\jdk1.5.0_04\bin>keytool -delete -alias xahCA -keystore dyfCALib输入keystore密码:admindyf删除后里面再列出证书库中的证书只剩一个C:\jdk1.5.0_04\bin>keytool -list -keystore dyfCALib输入keystore密码:admindyfKeystore 类型:jksKeystore 提供者:SUN您的keystore 包含 1 输入dyfca, 2006-12-16, keyEntry,认证指纹(MD5):E7:8B:D8:93:1A:06:B1:B8:51:3D:13:CF:46:38:AC:775.修改证书密码C:\jdk1.5.0_04\bin>keytool -keypasswd -alias dyfCA -keystore dyfCALib输入keystore密码:admindyf输入的主密码dyfadmin新的主密码:dyfadmin必须是不同的密码新的主密码:dyf密码太短-至少必须为6个字符新的主密码:dyfpws重新输入新的主密码:dyfpws6.非交互式修改密码C:\jdk1.5.0_04\bin>keytool -keypasswd -alias dyfCA -keypass dyfpws -new dyfadmin -storepass admindyf -keystore dyfCALib7.列出证书的详细信息C:\jdk1.5.0_04\bin>keytool -list -v -alias dyfCA -keystore dyfCALib输入keystore密码:admindyf别名名称:dyfCA创建日期:2006-12-16输入类型:KeyEntry认证链长度: 1认证[1]:Owner: CN=董云飞, OU=天运, O=天运, L=南京, ST=江苏, C=CN发照者:CN=董云飞, OU=天运, O=天运, L=南京, ST=江苏, C=CN序号:4583fd13有效期间:Sat Dec 16 22:05:07 CST 2006 至:Tue Dec 13 22:05:07 CST 2016认证指纹:MD5:E7:8B:D8:93:1A:06:B1:B8:51:3D:13:CF:46:38:AC:77SHA1:8C:CB:76:50:DB:34:35:C5:95:49:DA:9E:18:22:B0:F9:AF:73:C8:F58.将证书导出到证书文件中(该证书文件以二进制编码,无法用文本编辑器查看,不利用公布证书)C:\jdk1.5.0_04\bin>keytool -export -alias xahCA -file dyfCA.cer -keystore dyfCALibkeytool -genkey -alias xahCA -keyalg RSA -keystore dyfCALibib输入keystore密码:admindyf保存在文件中的认证9.将证书导出到证书文件中(以一种可打印的编码输出)C:\jdk1.5.0_04\bin>keytool -export -alias dyfCA -file dyfCA.cer -keystore dyfCALib -rfc输入keystore密码:admindyf保存在文件中的认证10.查看证书文件C:\jdk1.5.0_04\bin>keytool -printcert -file dyfCA.cerOwner: CN=董云飞, OU=天运, O=天运, L=南京, ST=江苏, C=CN发照者:CN=董云飞, OU=天运, O=天运, L=南京, ST=江苏, C=CN序号:4583fd13有效期间:Sat Dec 16 22:05:07 CST 2006 至:Tue Dec 13 22:05:07 CST 2016认证指纹:MD5:E7:8B:D8:93:1A:06:B1:B8:51:3D:13:CF:46:38:AC:77SHA1:8C:CB:76:50:DB:34:35:C5:95:49:DA:9E:18:22:B0:F9:AF:73:C8:F511.自己签署证书C:\jdk1.5.0_04\bin>keytool -selfcert -alias dyfCA -keystore dyfCALib输入keystore密码:admindyf输入的主密码dyfadmin22222222222222222222222222222222详细请见:Tomcat的帮助文档,:https://localhost:8080/tomcat-docs/ssl-howto.html 。
J D K自带工具k e y t o o l生成s s l证书-CAL-FENGHAI.-(YICAI)-Company One1JDK自带工具keytool生成ssl证书前言:因为公司项目客户要求使用HTTPS的方式来保证数据的安全,所以木有办法研究了下怎么生成ssl证书来使用https以保证数据安全。
百度了不少资料,看到JAVA的JDK自带生成SSL证书的工具:keytool,外加看了同事的心得体会,自己总结了一下具体的使用方法和使用过程中发现的问题及解决办法。
1:什么是HTTPSHTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块,并且会进行身份的验证。
问题:Firebug和postman之类的浏览器调试工具,为什么获取到的是明文解答:SSL是对传输的数据进行加密,针对的是传输过程的安全。
firebug之类的浏览器调试工具,因为他们得到的是客户端加密之前/解密之后的数据,因此是明文的。
2:什么是自签名证书就是自己生成的证书,并不是官方生成的证书。
除非是很正式的项目,否则使用自己签发的证书即可,因为官方生成证书是要花钱滴。
3:进入正题,使用JDK自带工具KeyTool 生成自签发证书!第一步:为服务器生成证书打开CMD命令行工具,cd到C盘根目录或者是jdk的bin目录下,如下图所示:附录1:常用keytool命令使用keytool命令生成证书:keytool-genkey-alias tomcat(别名)-keypass 123456(别名密码)-keyalg RSA(算法)-keysize 1024(密钥长度)-validity 365(有效期,天单位)-keystore D:/keys/(指定生成证书的位置和证书名称)-storepass 123456(获取keystore信息的密码)方便复制版:keytool -genkey -alias tomcat -keypass 123456 -keyalg RSA -keysize 1024 -validity 365 -keystore D:/keys/ -storepass 123456图例:回车执行后如下图:点击回车即可在D:/keys/文件夹内生成名为:的文件。
成功后无提示信息注意:①D:/keys/ 目录需要提前手动创建好,否则会生成失败②提示输入域名的时候不能输入IP地址问题①的错误信息如下:第二步:为客户端生成证书为浏览器生成证书,以便让服务器来验证它。
为了能将证书顺利导入至IE和Firefox,证书格式应该是PKCS12,因此,使用如下命令生成:keytool-genkey-alias client-keypass 123456-keyalg RSA-storetype PKCS12-keypass 123456-storepass 123456-keystore D:/keys/方便复制版:keytool -genkey -alias client1 -keypass 123456 -keyalg RSA -keysize 1024 -validity 365 -storetype PKCS12 -keystore D:/keys/ -storepass 123456图例:第二步余下操作步骤同第一步。
第三步:让服务器信任客户端证书1、由于不能直接将PKCS12格式的证书库导入,必须先把客户端证书导出为一个单独的CER文件,使用如下命令:keytool -export -alias client -keystore D:/keys/ -storetype PKCS12 -keypass 123456 -file D:/keys/注意:Keypass:指定CER文件的密码,但会被忽略,而要求重新输入2、将该文件导入到服务器的证书库,添加为一个信任证书:keytool -import -v -file D:/keys/ -keystore D:/keys/e -storepass 123456图例:完成之后通过list命令查看服务器的证书库,可以看到两个证书,一个是服务器证书,一个是受信任的客户端证书:keytool -list -v -keystore D:/keys/第四步:让客户端信任服务器证书1、由于是双向SSL认证,客户端也要验证服务器证书,因此,必须把服务器证书添加到浏览器的“受信任的根证书颁发机构”。
由于不能直接将keystore格式的证书库导入,必须先把服务器证书导出为一个单独的CER文件,使用如下命令:keytool -keystore D:/keys/ -export -alias tomcat6 -file D:/keys/2、双击文件,按照提示安装证书,将证书填入到“受信任的根证书颁发机构”。
填入方法:打开浏览器 - 工具 - internet选项-内容- 证书-把中级证书颁发机构里的该名称即时你前面生成证书时填写的名字与姓氏)证书导出来-再把导出来的证书导入受信任的根颁发机构就OK了。
第五步:配置Tomcat服务器<Connector port="8443"protocol="" SSLEnabled="true"maxThreads="150"scheme="https"secure="true"clientAuth="true"sslProtocol="TLS"keystoreFile="D:/keys/"keystorePass="123456"truststoreFile="D:/keys/"truststorePass="123456" />属性说明:clientAuth:设置是否双向验证,默认为false,设置为true代表双向验证keystoreFile:服务器证书文件路径keystorePass:服务器证书密码truststoreFile:用来验证客户端证书的根证书,此例中就是服务器证书truststorePass:根证书密码注意:①设置clientAuth属性为True时,需要手动导入客户端证书才能访问。
②要访问https请求需要访问8443端口,访问http请求则访问Tomcat默认端口(你自己设置的端口,默认8080)即可。
总结:经过以上五步,你使用HTTPS 端口为8443 进行访问的时候就是经过SSL信息加密,不怕被截获了。
通话的双方,必须是都拥有证书的端,才能进行会话,换句话说,就是只有安装了咱证书的客户端,才能与服务器通信。
小贴士:强制 https 访问在 tomcat /conf/ 中的 </welcome- file-list> 后面加上这1.<login-config>2.<!--AuthorizationsettingforSSL-->3.<auth-method>CLIENT-CERT</auth-method>4.<realm-name>ClientCertUsers-onlyArea</realm-name>5.</login-config>6.<security-constraint>7.<!--AuthorizationsettingforSSL-->8.<web-resource-collection>9.<web-resource-name>SSL</web-resource-name>10.<url-pattern>/*</url-pattern>11.</web-resource-collection>12.<user-data-constraint>13.<transport-guarantee>CONFIDENTIAL</transport-guarantee>14.</user-data-constraint>15.</security-constraint>16.完成以上步骤后,在浏览器中输入http的访问地址也会自动转换为https了。
附录1:keytool常用命令-alias 产生别名-keystore 指定密钥库的名称(就像数据库一样的证书库,可以有很多个证书,cacerts这个文件是jre自带的,你也可以使用其它文件名字,如果没有这个文件名字,它会创建这样一个)-storepass 指定密钥库的密码-keypass 指定别名条目的密码-list 显示密钥库中的证书信息-v 显示密钥库中的证书详细信息-export 将别名指定的证书导出到文件-file 参数指定导出到文件的文件名-delete 删除密钥库中某条目-import 将已签名数字证书导入密钥库-keypasswd 修改密钥库中指定条目口令-dname 指定证书拥有者信息-keyalg 指定密钥的算法-validity 指定创建的证书有效期多少天-keysize 指定密钥长度使用说明:导入一个证书命令可以如下:keytool -import -keystore cacerts -storepass 666666 -keypass 888888 -alias alibabacert -file C:\alibabajava\cert\其中-keystore cacerts中的cacerts是jre中默认的证书库名字,也可以使用其它名字-storepass 666666中的666666是这个证书库的密码-keypass 888888中的888888是这个特定证书的密码-alias alibabacert中的alibabacert是你导入证书的别名,在其它操作命令中就可以使用它-file C:\alibabajava\cert\中的文件路径就是要导入证书的路径浏览证书库里面的证书信息,可以使用如下命令:keytool -list -v -alias alibabacert -keystore cacerts -storepass 666666要删除证书库里面的某个证书,可以使用如下命令:keytool -delete -alias alibabacert -keystore cacerts -storepass 666666要导出证书库里面的某个证书,可以使用如下命令:keytool -export -keystore cacerts -storepass 666666 -alias alibabacert -file F:\要修改某个证书的密码(注意:有些数字认证没有私有密码,只有公匙,这种情况此命令无效)这个是交互式的,在输入命令后,会要求你输入密码keytool -keypasswd -alias alibabacert -keystore cacerts这个不是交互式的,输入命令后直接更改Keytool -keypasswd -alias alibabacert -keypass 888888 -new 123456 -storepass 666666 -keystore cacerts撰写日期:2016年02月18日撰写人:张之彬。