用Keytool和OpenSSL生成和签发数字证书

合集下载

java-keytool生成数字证书

java-keytool生成数字证书

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 需导入的证书下面是各选项的缺省值。

OpenSSL 命令常用证书操作

OpenSSL 命令常用证书操作

在OpenSSL开发包中,包含一个实用工具:openssl,比如我用MinGW GCC 编译OpenSSL 0.9.8k 后,openssl 就保存在out目录下。

openssl 工具是完成密钥、证书操作和其它SSL 事务的入口环境,直接运行不带参数的openssl 命令后,可以得到一个shell 环境,在其中可以以交互的方式完成SSL 相关的安全事务。

不过有时,如果用一个带参数选项的openssl 命令完成操作,会更方便。

下面是我使用openssl 做证书操作时,记录的常用命令用法。

1.生成密钥生成RSA密钥,保存在file.key中,命令如下:上面命令的含义是:产生RSA密钥,包括:私钥和公钥两部分,然后使用DES3算法,用用户输入的密码(passphrase)加密该密钥数据,保存在file.key中。

file.key默认以BASE64方式编码密钥数据,file.key的格式称为:PEM (Privacy Enhanced Mail)格式,在RFC 1421到RFC 1424中定义,PEM是早期用来进行安全电子邮件传输的标准,但现在广泛用在证书、证书请求、PKCS#7对象的存储上,所以证书文件也经常以.pem为扩展名。

2.不加密的密钥如果在生成密钥时,使用了-des3等加密选项,则会生成被用户密码保护的加密密钥,以增强密钥数据的保密性(因为密钥文件中包含私钥部分)。

但有时为了方便,需要不加密的明文密钥(这样安全性会降低),比如:使用Apache的HTTPS服务,每次启动Apache服务时,都需要用户输入保护密钥的密码,感觉麻烦的话,可以使用明文密钥。

明文密钥可以使用不带-des3等加密选项的openssl命令生成,还可以使用以下命令将加密保护的密钥转换成明文密钥,当然转换过程需要用户输入原来的加密保护密码:3.查看密钥查看保存在file.key中的RSA密钥的细节,如果此文件是加密保护的,会提示用户输入加密此文件的密码,命令如下:输出的内容均是RSA密钥数据的数学信息(模数、指数、质数等),从输出的结果中也可知file.key保存的RSA密钥数据包括:私钥和公钥两部分。

如何应用JDK中的keytool.exe命令工具创建数字证书

如何应用JDK中的keytool.exe命令工具创建数字证书
ห้องสมุดไป่ตู้
6、导出生成安全证书文件的命令和创建过程
(1)在操作系统的命令行窗口中输入如下的命令 keytool -export -alias yangSB -file F:/server.cer -keystore f:/server.keystore -validity 365
上面的命令的主要功能将实现把位于目录文件中的数字证 书库f:/server.keystore中的别名为“yangSB”的证书导出到 F:/server.cer的数字证书文件中。在F:/server.cer的数字证 书文件中将包含有证书主体的信息及证书的公钥等方面的信息, 但不包括私钥信息。因此,该server.cer数字证书文件可以公 开。 (2)输入密码 然后再输入前面的f:/server.keystore数字证书库文件中 存储的keystore密码(本示例为123456),系统将会在F盘的 根目录中创建出一个文件名称为server.cer的数字证书文件。 其中的“-file F:/server.cer”命令参数即为要求生成.cer 格式文件,如下示图所示:
(3)双击所创建的server.cer的数字证书文件,将能够正常地 看到数字证书中相关的信息。
3、熟悉和了解数字证书文件
(1)数字证书库中的一条证书可以导出为数字证书文件,而数字 证书文件只包括主体信息和对应的公钥——公共密钥用于加密 信息,私用密钥用于解译加密的信息。 (2)每一个数字证书 库是由一个文件所组 成,并保存有访问的 密码。在首次创建时, 它会自动生成数字证 书库,并要求指定访 问该数字证书库的密 码。
2、数字证书的主要用途
(1)发送安全电子邮件、访问安全站点、网上证券交易、网上招 标采购、网上办公、网上保险、网上税务、网上签约和网上银 行等安全电子事务处理和安全电子交易等活动中。 (2)比如,将服务器端的SSL证书安装于服务器设备上,可以用 来证明服务器的身份和进行通信加密。 因为,应用服务器端的数字证书可以有效地防止欺诈的“钓 鱼”站点。

java生成ssl证书方法

java生成ssl证书方法

生成 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命令使用说明

数字证书中keytool命令使用说明

数字证书中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数据证书的管理⼯具。

生成ssl证书和私钥的命令

生成ssl证书和私钥的命令

生成ssl证书和私钥的命令
生成 SSL 证书和私钥的命令取决于您使用的操作系统和工具。

以下是一些常见的生成 SSL 证书和私钥的命令示例:
1. 使用 OpenSSL 命令生成自签名证书和私钥:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout private.key -out certificate.crt.
2. 使用 OpenSSL 命令生成证书签发请求 (CSR) 和私钥:
openssl req -new -newkey rsa:2048 -nodes -keyout private.key -out csr.csr.
3. 使用 OpenSSL 命令生成带有 CA 签名的证书和私钥:
openssl genrsa -out private.key 2048。

openssl req -new -key private.key -out csr.csr.
openssl x509 -req -days 365 -in csr.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out certificate.crt.
4. 使用 Certbot 工具生成 Let's Encrypt 免费证书:
certbot certonly --standalone --email your-
*****************************************.com.
请注意,以上命令仅为示例,实际使用时需要替换为您自己的信息和配置。

同时,确保您已经安装了相应的工具和软件,例如OpenSSL 或 Certbot。

linux中openssl生成证书和自签证书linux操作系统-电脑资料

linux中openssl生成证书和自签证书linux操作系统-电脑资料

linux中openssl生成证书和自签证书linux操作系统-电脑资料下面来给大家介绍关于linux中openssl生成证书和自签证书的例子,整个过程都讲述的非常详细有兴趣的朋友可进入参考,。

1.首先要生成服务器端的私钥(key文件):代码如下复制代码openssl genrsa -des3 -out server.key 1024运行时会提示输入密码,此密码用于加密key文件(参数des3便是指加密算法,当然也可以选用其他你认为安全的算法.),以后每当需读取此文件(通过openssl提供的命令或API)都需输入口令.如果觉得不方便,也可以去除这个口令,但一定要采取其他的保护措施!去除key文件口令的命令:代码如下复制代码openssl rsa -in server.key -out server.key2.openssl req -new -key server.key -out server.csr -config f生成Certificate Signing Request(CSR),生成的csr文件交给CA签名后形成服务端自己的证书.屏幕上将有提示,依照其指示一步一步输入要求的个人信息即可.3.对客户端也作同样的命令生成key及csr文件:代码如下复制代码openssl genrsa -des3 -out client.key 1024openssl req -new -key client.key -out client.csr -config f4.CSR文件必须有CA的签名才可形成证书.可将此文件发送到verisign等地方由它验证,要交一大笔钱,何不自己做CA呢.代码如下复制代码openssl req -new -x509 -keyout ca.key -out ca.crt -config f5.用生成的CA的证书为刚才生成的server.csr,client.csr文件签名:代码如下复制代码openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config fopenssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -config f现在我们所需的全部文件便生成了.另:client使用的文件有:ca.crt,client.crt,client.keyserver使用的文件有:ca.crt,server.crt,server.key.crt文件和.key可以合到一个文件里面,本人把2个文件合成了一个.pem文件(直接拷贝过去就行了)以下步骤非必须代码如下复制代码[root@station23 CA]# mkdir ./newcerts[root@station23 CA]# touch ./{serial,index.txt}[root@station23 CA]# echo "00" > serial如果忘记以上操作,CA在签证时会出现如下错误,解决方法如下:代码如下复制代码[root@station23 test]# openssl ca -in my.csr -out ldap.crtUsing configuration from /etc/pki/tls/fI am unable to access the /etc/pki/CA/newcerts directory/etc/pki/CA/newcerts: No such file or directory[root@station23 test]# mkdir /etc/pki/CA/newcerts[root@station23 test]# openssl ca -in my.csr -out ldap.crtUsing configuration from /etc/pki/tls/f/etc/pki/CA/index.txt: No such file or directoryunable to open '/etc/pki/CA/index.txt'23016:error:02001002:system library:fopen:No such file or directory:bss_file.c:352:fopen('/etc/pki/CA/index.txt','r') 23016:error:20074002:BIO routines:FILE_CTRL:systemlib:bss_file.c:354:[root@station23 test]# touch /etc/pki/CA/index.txt[root@station23 test]# openssl ca -in my.csr -out ldap.crtUsing configuration from /etc/pki/tls/f/etc/pki/CA/serial: No such file or directoryerror while loading serial number23031:error:02001002:system library:fopen:No such file or directory:bss_file.c:352:fopen('/etc/pki/CA/serial','r')23031:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:354:[root@station23 test]# touch /etc/pki/CA/serial[root@station23 test]# echo 00 > /etc/pki/CA/serial。

openssl+keytool+tomcat自签名证书

openssl+keytool+tomcat自签名证书

利用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地址,否则部署之后会提示证书地址不匹配的错误剩余的部分必须和根证书填写一致。

JDK自带工具keytool生成ssl证书

JDK自带工具keytool生成ssl证书

JDK自带工具keytool生成ssl证书前言:因为公司项目客户要求使用HTTPS的方式来保证数据的安全,所以木有办法研究了下怎么生成ssl证书来使用https以保证数据安全。

百度了不少资料,看到JAVA的JDK自带生成SSL证书的工具:keytool,外加看了同事的心得体会,自己总结了一下具体的使用方法和使用过程中发现的问题及解决办法。

1:什么是HTTPS?HTTPS其实是有两部分组成: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/tomcat.keystore(指定生成证书的位置和证书名称)-storepass 123456(获取keystore信息的密码)方便复制版:keytool -genkey -alias tomcat -keypass 123456 -keyalg RSA -keysize 1024 -validity 365-keystore D:/keys/tomcat.keystore -storepass 123456图例:回车执行后如下图:点击回车即可在D:/keys/文件夹内生成名为:tomcat.keystore的文件。

生成证书命令keytool

生成证书命令keytool

生成证书命令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包进行发布者的身份认证。

使用JDK自带的keytool工具生成证书

使用JDK自带的keytool工具生成证书

使⽤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。

如何使用Keytool工具生成证书Keystore和证书签名请求文件-

如何使用Keytool工具生成证书Keystore和证书签名请求文件-

如何使用Keytool工具生成证书Keystore和证书签名请求文件?您的组织单位名称是什么?请输入单位名称,如: Beijing eTsec Technology Co.,Ltd.您的组织名称是什么?请输入部门名称,如: IT Dept您所在的城市或区域名称是什么?输入城市名称,如:Beijing您所在的州或省份名称是什么?输入省份名称,如:Beijing该单位的两字母国家代码是什么?中国请输入CNCN=.cn, OU= Beijing eTsec, O=IT, L= Beijing, ST= Beijing, C=CN 正确吗?输入 Y输入的主密码(如果和 keystore 密码相同,按回车):按回车确保记住您所输入的密码,注意生成CSR时,在第2部分中会使用它。

二、生成证书签名请求(CSR)1. keytool -certreq -keyalg RSA -alias -file certreq.csr -keystore重要:! 创建您的CSR和安装您的证书,您使用它来创建自签名的密钥存储库时,请使用相同的别名。

例如:C:\>keytool -certreq -keyalg RSA -alias myalias -file certreq.txt -keystore c:\.mykeystore输入keystore密码:2. 打开生成CSR文件certreq.txt 。

这个CSR文件显示如下:-----BEGIN NEW CERTIFICATE REQUEST----- MIIBujCCASMCAQAwejELMAkGA1UEBhMCQ0ExEDAOBgNVBAgTB09udGFyaW8xDzANBgNVB AcTBk90dGF3YTEQMA4GA1UEChMHRW50cnVzdDETMBEGA1UECxMKRW50cnVzdCBDUzEhMB8GA1UEA xMYd3d35w6T+q/f+wIDAQABoAAwDQYJKoZIhvcNAQEEBQADgYEAF+0hqAqXumz/vGrzGVhKHlnxd 7HW3ezSGIbIUcOy1YdDc/1ZCqRpu3utYIZ6welK++l+QjlbL6p5RJJETkkLKXjb/WVFajNuPl7Yo b9pbwA7JBrCCKbFj+kzDNbGhCR1RgFA9vQj5vob41Vj+k+TQchliuTLL9rFXNDHrtgTMtA=-----END NEW CERTIFICATE REQUEST-----文章来源:/service/guide/guide-ssl-141.html文章来源于:/article-26459-1.html。

Java使用keytool创建CA证书的操作

Java使用keytool创建CA证书的操作

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删除前先查看有⼀个密钥,删除后再查看就没有了,表⽰删除成功。

https学习笔记三----OpenSSL生成rootCA及签发证书

https学习笔记三----OpenSSL生成rootCA及签发证书

https学习笔记三----OpenSSL⽣成rootCA及签发证书⼀、openssl 简介⼆、安装openssl(linux CentOS7 32位)如果使⽤的是unix操作系统,可能安装系统的时候,这个库就已经有且存在了。

但是在使⽤前,需要注意下当前openssl的库的版本。

openssl versionOpenSSL 1.0.114 Mar 2012因为版本1.0.1是⼀个很重要的风⽔岭版本。

因为1.0.1是第⼀个⽀持TLS1.1和1.2的版本。

⽀持新的协议。

操作系统的选择也很重要,⽐如Ubuntu 12.04 LTS,客户端不⽀持SSL2。

这⾥安装以CentOS7系统为例:B、将下载的压缩包放在根⽬录下,解压缩,进⼊解压缩⽂件(得到openssl-openssl-1.0.0⽂件夹)cd openssl-1.0.0C、编译前配置openssl,执⾏命令:./config --prefix=/usr/local/openssl,其中 ( --prefix )参数为欲安装之⽬录,也就是安装后的档案会出现在该⽬录下。

D、编译openssl,执⾏命令: make install⼩插曲:安装openssl报错1、问题描述:安装完成,查看版本信息的时候报错了,缺少⼀个库⽂件libssl.so.1.1。

[root@b6e4cbd27773 /usr/local/openssl/bin]# openssl versionopenssl: error while loading shared libraries: libssl.so.1.1: cannot open sharedobject file: No such file or directory2、解决⽅法:有依赖没装libssl。

在/etc/ld.so.conf⽂件中写⼊openssl库⽂件的搜索路径,使⽤修改后的conf⽣效即可:echo "/usr/local/lib64" >> /etc/ld.so.confldconfig -v三、使⽤openssl⽣成RSA密钥对使⽤openssl的私钥产⽣公钥前,需要了解以下⼏点:1、key算法:openssl ⽀持⽣成RSA,DSA,ECDSA的密钥对,但是RSA是⽬前使⽤最普遍的。

使用JAVA keytool工具生成服务器配置SSL使用的密钥存储文件

使用JAVA keytool工具生成服务器配置SSL使用的密钥存储文件

使用JA V A keytool工具生成服务器配置SSL使用的密钥存储文件1.生成密钥存储文件和密钥对密钥存储文件: keystore文件是密钥存储文件,即后缀为jks的文件,密钥存储文件是存储密钥的容器,用于存储密钥,密钥存储文件在产生的时候可以选择是否产生密钥对,并将密钥对存入密钥存储文件中keytool -genkey -alias server -keyalg RSA -keysize 1024 -keystore keystore.jks-genkey[产生密钥对]-alias[密钥对别名]-keyalg[密钥算法参数]-keysize[密钥位数]-keystore[密钥存储文件路径]2.通过密钥存储文件(使用密钥对)产生SSL证书请求文件(csr文件)keytool -certreq -alias server -sigalg MD5withRSA -file server.csr -keypass password -keystore keystore.jks -storepass password-certreq[产生待签名证书]-alias[证书别名]-sigalg[证书算法参数]-file[产生文件输出路径]-keypass[密钥保护密码]-keystore[存储文件路径]-storepass[存储密码]3.将SSL证书请求文件发给CA进行签名,生成服务器证书(cer证书)CA:证书管理机构,所谓CA(Certificate Authority)认证,是指采用PKI(Public Key Infrastructure)公开密钥基础架构技术,专门提供网络身份认证服务,负责签发和管理数字证书,且具有权威性和公正性的第三方信任机构,它的作用就像我们现实生活中颁发证件的公司,如护照办理机构。

目前国内的CA认证中心主要分为区域性CA认证中心和行业性CA认证中心4.获取生成服务器证书的CA的根证书并导入密钥存储文件联系CA,获取CA的根证书,将根证书导入密钥存储文件keytool –import –v –trustcacerts -storepass password -alias my-ca-root -file intermediate.cer -keystore keystore.jks-import[导入命令]-v -trustcacerts[导入信任证书]-storepass[存储密码]-alias[证书别名]-file[证书文件路径]-keystore[导入文件路径]5.将服务器证书导入密钥存储文件Keytool –import –v –trustcacerts -storepass password -alias server –file server.cer -keystore keystore.jks6.将导入了CA根证书和服务器证书的密钥存储文件配置到启用ssl的服务器上7.查看密钥存储文件keytool -list -keystore keystore.jks。

使用keytool生成证书

使用keytool生成证书

使⽤keytool⽣成证书keytool 简介keytool 是java ⽤于管理密钥和证书的⼯具,其功能包括:创建并管理密钥创建并管理证书作为CA 为证书授权导⼊导出证书主要格式keytool 采⽤ keystore ⽂件来存储密钥及证书,其中可包括私钥、信任证书;keystore ⽂件主要使⽤ JKS格式(也可⽀持其他格式),带密钥存储;其中私钥的存储也有独⽴的密码;⼀、⽣成私钥和证书keytool -genkeypair -alias serverkey -keystore server.keystore按提⽰输⼊keystore 存储密码、私钥密码、个⼈信息,之后会⽣成 server.keystore⽂件若不想输⼊参数,可提供参数:keytool -genkeypair -alias serverkey -keypass 111111 -storepass 111111 \-dname "C=CN,ST=GD,L=SZ,O=vihoo,OU=dev,CN=" \-keyalg RSA -keysize 2048 -validity 3650 -keystore server.keystore参数说明storepass keystore ⽂件存储密码keypass 私钥加解密密码alias 实体别名(包括证书私钥)dname 证书个⼈信息keyalt 采⽤公钥算法,默认是DSAkeysize 密钥长度(DSA算法对应的默认算法是sha1withDSA,不⽀持2048长度,此时需指定RSA) validity 有效期keystore 指定keystore⽂件⼆、查看keystore详情查看详情命令keytool -list -keystore -storepass 111111 server.keystore输出结果Keystore type: JKSKeystore provider: SUNYour keystore contains 1 entryserverkey, Sep 25, 2016, PrivateKeyEntry,Certificate fingerprint (SHA1): 65:75:C9:08:A0:83:21:A1:D7:8D:DA:CD:3D:FB:C2:E0:50:96:29:62加上-v选项可查看更详细信息Keystore type: JKSKeystore provider: SUNYour keystore contains 1 entryAlias name: serverkeyCreation date: Jul 22, 2017Entry type: PrivateKeyEntryCertificate chain length: 1Certificate[1]:Owner: C=CN, ST=GD, L=SZ, O=vihoo, OU=dev, CN=Issuer: C=CN, ST=GD, L=SZ, O=vihoo, OU=dev, CN=Serial number: 5c5eb42Valid from: Sat Jul 2210:45:45 CST 2017until: Tue Jul 2010:45:45 CST 2027Certificate fingerprints:MD5: 27:ED:70:EF:4C:E3:7F:ED:6A:83:67:32:6D:10:24:38SHA1: 79:08:97:6E:62:EE:0F:E6:81:56:66:43:9C:9D:A4:11:EF:CC:28:0CSHA256: 3B:AC:56:8E:60:C2:C8:07:61:19:C7:4A:D3:AF:1F:60:77:24:94:7C:87:6E:C8:E7:17:14:E4:7A:34:0A:CD:8FSignature algorithm name: SHA256withRSAVersion: 3Extensions:#1: ObjectId: 2.5.29.14 Criticality=falseSubjectKeyIdentifier [KeyIdentifier [0000: B4 10 A9 26 5D 6C 4C 46 B4 69 ED 31 2B 20 D1 F4 ...&]lLF.i.1+ ..0010: 58 3C 8F 94 X<..]]三、证书导⼊导出导出证书keytool -exportcert -keystore server.keystore -file server.cer -alias serverkey -storepass 111111参数说明exportcert 表⽰导出证书alias 指⽰别名file 指⽰导出⽂件storepass 指⽰keystore密钥此时导出的证书为DER编码格式,使⽤openssl 可以输出openssl x509 -in server.cer -inform der -noout -text加上 -rfc选项,可输出PEM编码格式的证书keytool -exportcert -keystore server.keystore -rfc -file server.cer -alias serverkey -storepass 111111输出格式如:-----BEGIN CERTIFICATE-----MIIDUTCCAjmgAwIBAgIEBcXrQjANBgkqhkiG9w0BAQsFADBZMRIwEAYDVQQDEwl2...-----END CERTIFICATE-----导⼊证书⼀般为导⼊信任证书(SSL客户端使⽤)keytool -importcert -keystore client_trust.keystore -file server.cer -alias client_trust_server -storepass 111111 -noprompt 参数说明importcert 表⽰导⼊信任证书file 指⽰导⼊证书,⽀持pem/der格式keystore 指⽰⽬标keystore⽂件storepass 指⽰新的keystore密钥alias 指⽰trust证书在keystore中的别名noprompt 指⽰不弹出提⽰导⼊后的证书为 trustedCertEntry 实体类型,⽽私钥证书为 PrivateKeyEntry四、查看证书打印证书keytool -printcert -file server.cer输出Owner: CN=ZZ, OU=DEV, O=, L=GZ, ST=GD, C=CNIssuer: CN=ZZ, OU=DEV, O=, L=GZ, ST=GD, C=CNSerial number: 797f3140Valid from: Sun Sep 2516:43:55 CST 2016until: Sat Dec 2416:43:55 CST 2016Certificate fingerprints:MD5: FB:7D:29:4C:A9:F3:07:0E:CC:74:0D:9B:D4:D6:4D:91SHA1: 65:75:C9:08:A0:83:21:A1:D7:8D:DA:CD:3D:FB:C2:E0:50:96:29:62SHA256: E9:8B:A5:43:5F:40:FA:C5:64:3B:0A:11:1D:BE:D1:07:3C:A1:E2:50:88:71:A7:5C:EC:43:22:98:1B:AA:B6:EB Signature algorithm name: SHA1withDSAVersion: 3Extensions:#1: ObjectId: 2.5.29.14 Criticality=falseSubjectKeyIdentifier [KeyIdentifier [0000: 0E C3 62 D3 75 3A 3C B7 D9 C4 BD 8E 63 E7 6C EC ..b.u:<.....c.l.0010: AF 8A 2972 ..)r]]五、转换格式jks格式转 pkcs12keytool -importkeystore -srckeystore server.keystore -destkeystore server.p12 -srcalias serverkey -destalias serverkey \-srcstoretype jks -deststoretype pkcs12 -srcstorepass 111111 -deststorepass 111111 -noprompt参数说明importkeystore 指⽰导⼊导出keystore⽂件,可⽤于同类型或不同类型的导⼊导出srckeystore 指⽰源keystore⽂件srcalias 指⽰源实体别名srcstoretype 指⽰源store类型(jks/pkcs12..)srcstorepass 指⽰源store密码noprompt 不弹出提⽰pkcs12 转jks格式与此同理六、场景⽰例1. 制作Java SSL 双向证书storepass=111111keypass=111111server_dname="C=CN,ST=GD,L=SZ,O=vihoo,OU=dev,CN="client_dname="C=CN,ST=GD,L=SZ,O=vihoo,OU=dev,CN="echo"generate server keystore"keytool -genkeypair -alias serverkey -keypass $keypass -storepass $storepass \-dname $server_dname \-keyalg RSA -keysize 2048 -validity 3650 -keystore server.keystoreecho"generate client keystore"keytool -genkeypair -alias clientkey -keypass $keypass -storepass $storepass \-dname $client_dname \-keyalg RSA -keysize 2048 -validity 3650 -keystore client.keystoreecho"export server certificate"keytool -exportcert -keystore server.keystore -file server.cer -alias serverkey -storepass $storepassecho"export client certificate"keytool -exportcert -keystore client.keystore -file client.cer -alias clientkey -storepass $storepassecho"add server cert to client trust keystore"keytool -importcert -keystore client_trust.keystore -file server.cer -alias client_trust_server \-storepass $storepass -nopromptecho"add client cert to server trust keystore"keytool -importcert -keystore server_trust.keystore -file client.cer -alias server_trust_client \-storepass $storepass -noprompt2. Java 证书与 nginx 证书互转Java通常使⽤JKS作为证书存储格式,⽽Nginx往往采⽤PEM证书格式,如何实现互转?Nginx 证书转 JKSA pem证书和私钥合成p12openssl pkcs12 -export -in server.crt -inkey server.key -passin pass:111111 -password pass:111111 \-name server -out server.p12注意定义-name 选项,这将作为keystore识别实体的参数B p12 证书转jks 证书keytool -importkeystore -srckeystore server.p12 -destkeystore server.keystore \-srcstoretype pkcs12 -deststoretype jks -srcalias server -destalias server \-deststorepass 111111 -srcstorepass 111111如果p12 ⽂件中未指定实体名称,使⽤keytool转换时则不需提供srcalias/destalias参数,⽽输出的keystore实体名称默认为1 JKS 证书转 Nginx证书A jks 证书转p12keytool -importkeystore -srckeystore server.keystore -destkeystore server.p12 \-srcstoretype jks -deststoretype pkcs12 -srcalias server -destalias server \-deststorepass 111111 -srcstorepass 111111B p12 证书提取pem证书和私钥openssl pkcs12 -in server.p12 -clcerts -nokeys -password pass:111111 -out server.crtopenssl pkcs12 -in server.p12 -nocerts -password pass:111111 -passout pass:111111 -out server.key 其中得到的私钥⽂件为PKCS#8 加密格式,证书和密钥均为PEM⽂件编码。

PHP通过OpenSSL生成证书、密钥并且加密解密数据,以及公钥,私钥和数字签名的理解

PHP通过OpenSSL生成证书、密钥并且加密解密数据,以及公钥,私钥和数字签名的理解

PHP通过OpenSSL⽣成证书、密钥并且加密解密数据,以及公钥,私钥和数字签名的理解⼀、公钥加密假设⼀下,我找了两个数字,⼀个是1,⼀个是2。

我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉⼤家,1是我的公钥。

我有⼀个⽂件,不能让别⼈看,我就⽤1加密了。

别⼈找到了这个⽂件,但是他不知道2就是解密的私钥啊,所以他解不开,只有我可以⽤数字2,就是我的私钥,来解密。

这样我就可以保护数据了。

我的好朋友x⽤我的公钥1加密了字符a,加密后成了b,放在⽹上。

别⼈偷到了这个⽂件,但是别⼈解不开,因为别⼈不知道2就是我的私钥,只有我才能解密,解密后就得到a。

这样,我们就可以传送加密的数据了。

⼆、私钥签名如果我⽤私钥加密⼀段数据(当然只有我可以⽤私钥加密,因为只有我知道2是我的私钥),结果所有的⼈都看到我的内容了,因为他们都知道我的公钥是1,那么这种加密有什么⽤处呢?但是我的好朋友x说有⼈冒充我给他发信。

怎么办呢?我把我要发的信,内容是c,⽤我的私钥2,加密,加密后的内容是d,发给x,再告诉他解密看是不是c。

他⽤我的公钥1解密,发现果然是c。

这个时候,他会想到,能够⽤我的公钥解密的数据,必然是⽤我的私钥加的密。

只有我知道我得私钥,因此他就可以确认确实是我发的东西。

这样我们就能确认发送⽅⾝份了。

这个过程叫做数字签名。

当然具体的过程要稍微复杂⼀些。

⽤私钥来加密数据,⽤途就是数字签名。

总结:公钥和私钥是成对的,它们互相解密。

公钥加密,私钥解密。

私钥数字签名,公钥验证准备⼯作找到php.ini 去掉openssl.dll前⾯的';'。

找到f的位置,我的在D:\xampp\apache\conf。

配置apache以⽀持SSL:打开apache的配置⽂件conf/httpd.confLoadModule ssl_module modules/mod_ssl.so、Include conf/extra/httpd-ssl.conf三、⽰例代码1$config = array(2 "private_key_bits" => 1024, //字节数 512 1024 2048 4096 等3 "private_key_type" => OPENSSL_KEYTYPE_RSA, //加密类型4 "config" => "D:/phpStudy/PHPTutorial/Apache/conf/f"5 );67$privkeypass = '123456789'; //私钥密码8$numberofdays = 365; //有效时长9$cerpath = "./test.cer"; //⽣成证书路径10$pfxpath = "./test.pfx"; //密钥⽂件路径1112$dn = array(13 "countryName" => "UK", //所在国家14 "stateOrProvinceName" => "Somerset", //所在省份15 "localityName" => "Glastonbury", //所在城市16 "organizationName" => "The Brain Room Limited", //注册⼈姓名17 "organizationalUnitName" => "PHP Documentation Team", //组织名称18 "commonName" => "Wez Furlong", //公共名称19 "emailAddress" => "wez@" //邮箱20 );2122// ⽣成公钥私钥资源23$res = openssl_pkey_new($config);2425// 导出私钥 $priKey26 openssl_pkey_export($res, $priKey,null,$config);2728// 导出公钥 $pubKey29$pubKey = openssl_pkey_get_details($res);30$pubKey = $pubKey["key"];31//print_r($priKey); 私钥32//print_r($pubKey); 公钥3334//直接测试私钥公钥35echo '-------------------公私钥加解密-START---------------------','<br>';36$data = '测试公私钥加解密成功!';37// 公钥加密38 openssl_public_encrypt($data, $encrypted, $pubKey);39// 私钥解密40 openssl_private_decrypt($encrypted, $decrypted, $priKey);4142echo '公钥加密:',base64_encode($encrypted),'私钥解密:','<br>',$decrypted,'<br>';43echo '-------------------公私钥加解密-END---------------------','<br>';4445//⽣成⽂件46$csr = openssl_csr_new($dn, $priKey,$config); //基于$dn⽣成新的 CSR (证书签名请求)47$sscert = openssl_csr_sign($csr, null, $priKey, 365,$config);//根据配置⾃⼰对证书进⾏签名48 openssl_x509_export($sscert, $csrkey); //将公钥证书存储到⼀个变量 $csrkey,由 PEM 编码格式命名。

利用openssl工具生成根证书及颁发子证书

利用openssl工具生成根证书及颁发子证书

利用openssl工具生成根证书及颁发子证书一 ) 首先创建CA根证书1) 生成RSA private key 给CA (3 DES 加密, PEM 格式):$ openssl genrsa -des3 -out rootca.key 10242) 产生一个X509结构,PEM格式的自签名证书(当然也可以由CA机构签名)$ openssl req -new -x509 -days 365 -key rootca.key -out rootca.crt3) 查看该根证书的详细内容$ openssl x509 -noout -text -in rootca.crt4) 验证证书有效性$ openssl verify -CAfile rootca.crt rootca.crt第一个为根证书,第二个为需要验证的子证书,由于是自签名,相当于自己给自己颁发的证书。

二 ) 用根证书颁发子证书1) 生成一个3DES 加密,PEM格式的RSA private KEY .$ openssl genrsa -des3 -out user.key 10242) 产生证书签名请求文件(PEM格式)$ openssl req -new -key user.key -out user.csr3) 使用CA根证书签名A 生成配置文件如下ca.config :[ ca ]default_ca=CA_own[ CA_own ]dir=C:/openssl/bincerts=C:/openssl/binnew_certs_dir=C:/openssl/bin //生成子证书的目录database=C:/openssl/bin/index.txt //生成子证书后会更新内容到此文件serial=C:/openssl/bin/serial.txt //子证书的序列号从此文件读取certificate=C:/openssl/bin/rootca.crt //根证书private_key=C:/openssl/bin/rootca.key //根证书的私钥default_days=365default_crl_days=30default_md=md5preserve=nopolicy=policy_anything[ policy_anything ]countryName=optionalstateOrProvinceName=optionallocalityName=optionalorganizationName=optional organizationalUnitName=optional commonName=suppliedemailAddress=optionalB 执行如下命令来签名openssl ca -config ca.config -out user.crt -infiles user.csr4) 验证证书有效性openssl verify -CAfile rootca.crt user.crt用rootca.crt的公钥验证user.crt的签名是否合法。

使用openssl生成证书

使用openssl生成证书

使用OpenSSL生成CA证书和签发用户证书李志平在这里我们使用OpenSSL自带的CA.pl来创建CA证书,使用它来签发用户证书,这个文件放在/usr/ssl/misc/CA.pl(我们假设把OpenSSL安装在/usr下)。

1.创建文件夹ca,存放要生成的CA证书和用户证书[root@localhost ~]# mkdir ca[root@localhost ~]# cd ca[root@localhost ca]#2.将/usr/ssl/misc/CA.pl和/usr/ssl/f拷贝到当前目录ca中[root@localhost ca]# cp /usr/ssl/misc/CA.pl ./[root@localhost ca]# cp /usr/ssl/f ./3.创建CA证书。

执行./CA.pl –newca需要填写如下:(红字部分是需要填写的,其中“按回车键”表示直接按回车键,有输入内容的,输入内容后再按回车键)[root@localhost ca]#./CA.pl -newcaCA certificate filename (or enter to create)(按回车键)Making CA certificate ...Generating a 1024 bit RSA private key...........++++++.............++++++writing new private key to './demoCA/private/cakey.pem'Enter PEM pass phrase:(输入密码,比如:1234)Verifying - Enter PEM pass phrase:(确认密码:1234)-----You are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [AU]:CNState or Province Name (full name) [Some-State]:BJLocality Name (eg, city) []:BJOrganization Name (eg, company) [Internet Widgits Pty Ltd]:IBM Organizational Unit Name (eg, section) []:IBMCommon Name (eg, YOUR name) []:benEmail Address []:ben@Please enter the following 'extra' attributesto be sent with your certificate requestA challenge password []:(按回车键)An optional company name []:(按回车键)Using configuration from /usr/ssl/fEnter pass phrase for ./demoCA/private/cakey.pem:(输入刚才的密码:1234)Check that the request matches the signatureSignature okCertificate Details:Serial Number:f9:53:35:b7:23:ff:c0:04ValidityNot Before: Jun 23 13:50:44 2010 GMTNot After : Jun 22 13:50:44 2013 GMTSubject:countryName = CNstateOrProvinceName = BJorganizationName = IBMorganizationalUnitName = IBMcommonName = benemailAddress = ben@X509v3 extensions:X509v3 Subject Key Identifier:DD:F6:B8:17:6F:91:F6:33:BB:FB:8B:85:71:A4:70:47:E7:03:A5:0F X509v3 Authority Key Identifier:keyid:DD:F6:B8:17:6F:91:F6:33:BB:FB:8B:85:71:A4:70:47:E7:03:A5:0FX509v3 Basic Constraints:CA:TRUECertificate is to be certified until Jun 22 13:50:44 2013 GMT (1095 days)Write out database with 1 new entriesData Base Updated[root@localhost ca]#至此,公共证书已经创建。

用Keytool和OpenSSL生成和签发数字证书

用Keytool和OpenSSL生成和签发数字证书

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 -key demoCA\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 -sigalgMD5withRSA -file server\server.csr -keypass 123456 -keystoreserver\server_keystore -storepass changeit4.3.2.3 用CA私钥进行签名openssl x509 -req -in server\server.csr -out server\server-cert.pem -CA demoCA\ca-cert.pem -CAkey demoCA\ca-key.pem -CAserialdemoCA/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 -keystoreserver\server_keystore%JDK_HOME%\bin\keytool -import -v -alias tomcat_server -fileserver\server-cert.pem -storepass 123456 -keystore server_keystore4.3.2.6 查看server端证书keytool -list -keystore %JDK_HOME%\jre\lib\security\cacertskeytool -list -keystore server\server_keystore4.3.3 修改server.xml使Tomcat支持SSL首先找到以下内容,去掉对其的注释。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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 -key demoCA\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 -sigalgMD5withRSA -file server\server.csr -keypass 123456 -keystoreserver\server_keystore -storepass changeit4.3.2.3 用CA私钥进行签名openssl x509 -req -in server\server.csr -out server\server-cert.pem -CA demoCA\ca-cert.pem -CAkey demoCA\ca-key.pem -CAserialdemoCA/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 -keystoreserver\server_keystore%JDK_HOME%\bin\keytool -import -v -alias tomcat_server -fileserver\server-cert.pem -storepass 123456 -keystore server_keystore4.3.2.6 查看server端证书keytool -list -keystore %JDK_HOME%\jre\lib\security\cacertskeytool -list -keystore server\server_keystore4.3.3 修改server.xml使Tomcat支持SSL首先找到以下内容,去掉对其的注释。

然后参照红色部分修改。

如果配置Tomcat不验证客户身份,可以设置clientAuth="false"。

<Connector className="org.apache.catalina.connector.http.HttpConnector" port="8443" minProcessors="5" maxProcessors="75"enableLookups="true"acceptCount="10" debug="0" scheme="https" secure="true"><Factory className=".SSLServerSocketFactory" clientAuth="true" protocol="TLS"keystoreFile="%TCAT_HOME%/conf/server_keystore"keystorePass="changeit"/>然后把文件server\server_keystore复制到目录%TCAT_HOME%\conf\下。

4.4 在IE中安装个人证书4.4.1 建立工作目录mkdir client4.4.2 生成client私钥并用CA私钥签名4.4.2.1 生成client私钥openssl genrsa -out client\client-key.pem 10244.4.2.2 生成待签名证书openssl req -new -out client\client-req.csr -key client\client-key.pem4.4.2.3 用CA私钥进行签名openssl x509 -req -in client\client-req.csr -out client\client.crt -signkeyclient\client-key.pem-CA ca\ca-cert.pem -CAkey ca\ca-key.pem -CAcreateserial -days 3654.4.2.4 生成client端的个人证书因为JSSE1.0.2没有完全实现了对PKCS#12格式文件的操作(只能读取,不能输出),所以在这里需要用openssl制作client端的个人证书(包含私钥)。

openssl pkcs12 -export -clcerts -in client\client.crt -inkeyclient\client-key.pem -out client\client.p124.4.2.5 安装信任的根证书#把ca\ca-key.pem改名为ca\ca-key.cer,在client端的IE中使用"工具' Internet选项' 内容' 证书' 导入"把我们生成的CA根证书导入,使其成为用户信任的CA。

运行这条命令CA才能被导入fireFox的服务器证书列表中:/usr/local/ssl/ca# openssl pkcs12 -export -clcerts -in ca-cert.pem -inkey ca-key.pem -out ca.p124.4.3 安装个人证书把client.p12导入到client端的IE中作为个人证书,导入过程同4.4.2.5。

4.5 用IE浏览器使用SSL协议访问Tomcat4.5.1 启动Tomcat 4.x执行%TCAT_HOME%\bin\startup.bat启动Tomcat 4.x4.5.2 用IE访问Tomcat 4.x在IE浏览器的地址栏中输入https://localhost:8443,如果前面的操作都正确的话,应该可以看到Tomcat的欢迎页面。

同时状态栏上的小锁处于闭合状态,表示您已经成功地与服务器建立了要求客户端验证的SSL 安全连接。

/duanzhimin528/archive/2010/06/22/324182.html编码(也用于扩展名)•.DER = 扩展名DER用于二进制DER编码的证书。

这些证书也可以用或者作为扩展名。

比较合适的说法是“我有一个DER编码的证书”,而不是“我有一个DER证书”。

•.PEM = 扩展名PEM用于ASCII(Base64)编码的各种X.509 v3 证书。

文件开始由一行"—–BEGIN …“开始。

常用的扩展名•. = 扩展名用于证书。

证书可以是DER编码,也可以是PEM编码。

扩展名和几乎是同义词。

这种情况在各种unix/linux系统中很常见。

• = 证书的微软型式。

可以用微软的工具把文件转换为文件(和必须是相同编码的,DER或者PEM)。

扩展名为的文件可以被IE识别并作为命令调用微软的cryptoAPI(具体点就是rudll32.exe cryptext.dll,CyrptExtOpenCER),进而弹出一个对话框来导入并/或查看证书内容。

•.KEY = 扩展名KEY用于PCSK#8的公钥和私钥。

这些公钥和私钥可以是DER编码或者PEM编码。

文件和文件只有在使用相同编码的时候才可以安全地相互替代。

证书导入Der/Cer证书导入:要从某个文件中导入某个证书,使用keytool工具的-import命令:keytool -import -file mycert.der -keystore mykeystore.jks如果在 -keystore 选项中指定了一个并不存在的密钥仓库,则该密钥仓库将被创建。

如果不指定 -keystore 选项,则缺省密钥仓库将是宿主目录中名为 .keystore 的文件。

如果该文件并不存在,则它将被创建。

创建密钥仓库时会要求输入访问口令,以后需要使用此口令来访问。

可使用-list 命令来查看密钥仓库里的内容:keytool -list -rfc -keystore mykeystore.jksP12格式证书导入:keytool无法直接导入PKCS12文件。

第一种方法是使用IE将pfx证书导入,再导出为cert格式文件。

使用上面介绍的方法将其导入到密钥仓库中。

这样的话仓库里面只包含了证书信息,没有私钥内容。

第二种方法是将pfx文件导入到IE浏览器中,再导出为pfx文件。

新生成的pfx不能被导入到keystore中,报错:keytool错误:ng.Exception: 所输入的不是一个 X.509 认证。

相关文档
最新文档