证书常用相关知识
CA证书使用的原因:
证书是在互联网对安全提出需求的情况下出现的,安全就需要对数据进行加密,加密分为对称加密和非对称加密。
对称加密详见(对称加密blog),非对称加密详见(非对称加密blog),本文只围绕非对称加密展开。
非对称加密设计公钥和私钥,
现就A向B传输数据使用非对称加密常用的做法:
A:拥有公钥apub,私钥appk
B:拥有公钥bpub,私钥bppk
A使用B的公钥bpub对内容加密,B使用B的私钥bppk进行解密,因此A发送的内容智能由B的私钥来解密,即使数据被截获后可防止被解密。
B为了保证接口的数据确实是A发送的密文,需要A用A的私钥对内容进行加密,即数字签名,B使用A的公钥对接收到的数据进行解密,因为A的私钥只有自己拥有,若B能够解密收到的数据说明确实是A发送的。这个过程中B有用到A的公钥,但B要校验该公钥是否真正是A的公钥,这时CA证书就出现了,CA为A颁发CA证书,证书中包含A的公钥和CA用自己的私钥签名的信息,由于CA是权威,B的信任证书库包含CA的公钥,于是B就信任CA证明A的证书是真实的。
通常做法是使用公钥对内容加密,使用私钥就行解密。
1. 证书使用说明
目标:
说明服务端证书的制作、申请、应用。
说明客户端信任证书的制作、应用。
3 说明客户端的证书制作、申请、颁发、应用。
1.1 服务端证书
1.1.1 制作秘钥对文件(证书库)
keytool -genkey -v –alias front-https-server -keyalg RSA -keysize 1024 -keypass Paic1234 -dname " CN=FRONT-STG, OU=Technology, O=SystemDevelopmentDepartment, L=ShenZhen, ST=GuangDong, C=China" -keystore store.jks -storepass Password1234 -validity 3650
说明:storepass、keypass通常使用相同值
例:生成的秘钥对文件为store.jks,该证书库包含公私钥。
1.1.2 制作证书请求文件CSR(Certificate Signing Request)
keytool -certreq -file p10.txt -keystore store.jks
例:生成的证书请求文件为p10.txt
1.1.3 通过EOA从CA申请证书
使用证书请求文件p10.txt,并通过签发机构获取新CA签发的cer证书。
处理人审批完后,可向处理人获取CA签发的cer证书。
例:CA签发的cer证书为STG.cer
1.1.4 将申请到的cer证书导入证书库
Windows下操作:
1.1.4.1 将证书转换为包含证书认证链的p7b格式的证书
该小节下面的步骤是在win10 OS下的具体操作,其他windows系统与之类似亦可参考。
双击cer证书文件进行安装
安装证书
继续下一步
继续下一步
点击完成
在网络和共享中心找到并进入Internet选项
进入internet选项后切换到内容选项卡
点击证书
选中导入的证书,点击导出
例:STG
点击下一步
选择P7B类型,并勾选包括证书路径中的所有证书,点击下一步
保存导出的P7B格式的证书
例:D:\Users\eplusing\Desktop\STG.p7b
1.1.4.2 将包含证书认证链的p7b格式的证书导入到证书库
keytool -import -file STG.p7b -keystore store.jks
例:store.jks
至此服务端证书store.jks制作完成
1.1.5 将jks格式的服务端证书转换为pem格式
keytool -importkeystore -srckeystore store.jks -srcstoretype JKS -destkeystore STG.p12 -deststoretype PKCS12
openssl pkcs12 -in STG.p12 -nodes -out STG.pem
1.1.6 制作客户端信任证书
keytool -import -file STG.cer -keystore stg-client-2022.jks
例:生成客户端信任证书stg-client-2022.jks提供给客户端,
1.2 客户端证书
1.制作证书申请文件
2.申请证书
3.获取申请到的证书
4.将申请到的证书导入证书库
keytool -import -file XIAODAI_003_STG.p7b -keystore XIAODAI_003_STG.jks
2. 证书使用简介
2.1 证书使用场景
JKS(JavaKeysotre)格式和PFX(PKCS12)格式,是最常见的SSL证书格式文件,可以包含完整的证书密钥对,证书链和信任证书信息。PFX常用于Windows IIS服务器,JKS常用于JAVA类的WEB服务器,如TOMCAT,WEBLOGIC,JBOSS,RESIGN,虽然近年来,这些服务器新的版本,都是可以同时支持PFX,JKS文件格式了,但是老的版本和免费版本,往往都只支持JKS格式,所以当我们在不同WEB平台切换的时候,可能需要转换现有的SSL证书格式。
JKS与PFX格式的证书常作为证书库进行使用。
2.2 常见证书类型
PKCS 全称是 Public-Key Cryptography Standards ,是由 RSA 实验室与其它安全系统开发商为促进公钥密码的发展而制订的一系列标准,PKCS 目前共发布过 15 个标准。 常用的有:
PKCS#7 Cryptographic Message Syntax Standard
PKCS#10 Certification Request Standard
PKCS#12 Personal Information Exchange Syntax Standard
X.509是常见通用的证书格式。所有的证书都符合为Public Key Infrastructure (PKI) 制定的 ITU-T X509 国际标准。
PKCS#7常用的后缀是: .P7B .P7C .SPC
PKCS#12常用的后缀有: .P12 .PFX
X.509 DER编码(ASCII)的后缀是: .DER .CER .CRT
X.509 PAM编码(Base64)的后缀是: .PEM .CER .CRT
.cer/.crt是用于存放证书,它是2进制形式存放的,不含私钥。
.pem跟crt/cer的区别是它以Ascii来表示。
pfx/p12用于存放个人证书/私钥,他通常包含保护密码,2进制方式存放。
p10是证书请求
p7r是CA对证书请求的回复,只用于导入
p7b以树状展示证书链(certificate chain),同时也支持单个证书,不含私钥。
3. 生成证书
3.1 生成jks证书
3.1.1 生成命令
keytool -genkey -v -alias httpserver -keyalg RSA -keysize 1024 -keypass Paic1234 -dname "cn=BIS_FRONT_SERVER_STG,ou=平安科技(深圳)有限公司,o=集团系统开发部,l=深圳,st=广东,c=CN" -keystore store.jks -storepass Paic1234 -validity 3650
3.1.2 参数说明
-genkeypair 表示要创建一个新的密钥
-dname 表示密钥的Distinguished Names, 表明了密钥的发行者身份
CN=commonName 注:生成证书时,CN要和服务器的域名相同,如果在本地测试,则使用localhost
OU=organizationUnit
O=organizationName
L=localityName
S=stateName
C=country
-keyalg 使用加密的算法,这里是RSA
-alias 和keystore关联的别名,这个alias通常不区分大小写
-keypass 私有密钥的密码,这里设置为 123456
-keystore 密钥保存在D:盘目录下的mykeystore文件中
-storepass 存取密码,这里设置为changeit,这个密码提供系统从mykeystore文件中将信息取出
-validity 该密钥的有效期为 180天 (默认为90天)
下面是各选项的缺省值。
-alias "mykey"
-keyalg "DSA"
-keysize 1024
-validity 90
-keystore 用户宿主目录中名为 .keystore 的文件
-file 读时为标准输入,写时为标准输出
cacerts证书文件(The cacerts Certificates File)
该证书文件存在于java.home\jre\lib\security目录下,是Java系统的CA证书仓库
3.2 生成证书申请文件CSR
Generates a Certificate Signing Request (CSR), using the PKCS#10 format.
3.2.1 执行命令
keytool -alias httpserver -certreq -file bis_front_client_p10.csr -keystore store.jks
3.2.2 参数声明
-alias 和keystore关联的别名
-certreq
-file p10.txt
-keystore store.jks
3.3 证书服务机构CA签发证书
证书服务机构会使用其拥有的根证书签发CSR文件对应的证书,如openssl x509 -req -days 730 -sha1 -extensions v3_req -CA root.crt -CAkey root.key -CAserial root.srl -CAcreateserial -in bis_front_client_p10.csr -out bis_front_client_p10.csr.crt
或自己制作一个根证书,亦即自己作CA,下面介绍使用自己制作CA根证书的过程
3.3.1 制作根证书
3.3.1.1 创建根证书密钥文件(自己做CA)root.key:
openssl genrsa -des3 -out root.key
3.3.1.2 创建根证书的申请文件root.csr:
openssl req -new -key root.key -out root.csr
3.3.1.3 创建一个自当前日期起为期十年的根证书root.crt:
openssl x509 -req -days 3650 -sha1 -extensions v3_ca -signkey root.key -in root.csr -out root.crt
3.3.2 CA根据CSR签发证书
创建自当前日期起有效期为期两年的服务器证书server.crt:
openssl x509 -req -days 730 -sha1 -extensions v3_req -CA root.crt -CAkey root.key -CAserial root.srl -CAcreateserial -in bis_front_client_p10.csr -out bis_front_client_p10.crt
3.4 生成cer证书
3.4.1 从jks导出cer
keytool -export -alias httpserver -keystore store.jks -file BIS_FRONT_SERVER_STG.cer -storepass Paic1234
这里导出的证书提供给对端,对端导入其证书库,则对端信任本端
3.4.2 参数说明
-alias 证书别名
-keystore 指定密钥库的名称(cacerts是jre中默认的证书库名字,也可以使用其它名字 )
-storepass 指定密钥库的密码
-keypass 指定别名条目的密码
-file 指定导出到文件的文件名
3.5 生成pem证书
3.6 生成rsa秘钥对
使用openssl
3.6.1 生成RSA私钥
genrsa -out rsa_private_key.pem 1024
3.6.2 生成RSA公钥(导出公钥)
rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
3.7 生成jks证书
keytool -genkey -v -keyalg RSA -keysize 1024 -dname "CN=TMS-CORE,OU=深圳有限公司,O=系统开发部,L=深圳,ST=广东,C=CN" -keystore D:\Users\eplusing\Desktop\temp\store.jks -storepass Password1234 -validity 3650
4. 证书应用
5. 证书格式转换
引用:
如何转换证书格式? - 数字证书管理服务 - 阿里云
5.1 cer转jks
5.2 cer格式转JKS
5.2.1 转换方式1
(keytool 为java JDK自带的,可以在bin目录下找到)
keytool -import -alias mycert -file D:\Users\caopengpeng762\Desktop\证书\EXV_BIS_FRONT_WLTBIS_VIPINTF_001_STG.cer -keystore D:\Users\caopengpeng762\Desktop\证书\mykeystore.jks (导入证书到keystore)
5.2.2 查看证书信息
校验jks证书密钥
keytool -list -v -keystore D:\Users\caopengpeng762\Desktop\证书\mykeystore.jks
5.3 cer信任证书转pfx
openssl x509 -in BIS_FRONT_PRD.cer -out BIS_FRONT_PRD.pfx
5.4 cer合成pfx
openssl pkcs12 -export -in test_server_16.crt -CAfile CFCA_TEST_OCA1.cer -CAfile CFCA_TEST_OCA1.cer -inkey test_server_16.key -out gdtmp.pfx
5.5 pem转pfx
5.5.1 转换方式1
openssl pkcs12 -export -in bis_front_sdb_stg.pem -out test.pfx
5.5.2 转换方式2
其中需要给PFX设置两次密码,密码要记住的,回头导入到项目需要输入
openssl pkcs12 -export -out your_pfx_certificate.pfx -inkey laozuo.key -in laozuo.crt
5.5.3 方式3
openssl pkcs12 -nodes -in cacerts.pfx -out cacerts.pem
5.5.4 方式4
openssl pkcs12 -in 81205154511001190.pfx -passin pass:vpos123 -nodes -out 81211174511000190.pem
5.6 pem 转 pkcs7(p7b)
openssl crl2pkcs7 -nocrl -certfile your_pem_certificate.crt -out your_pkcs7_certificate.p7b
5.7 pfx转pem
5.7.1 方式1
openssl pkcs12 -nodes -in your_pfx_certificate.pfx -out your_pem_certificates_and_key.pem
其中需要提示我们输入PFX证书的密码才可以转。
5.7.2 方式2(带密码)
openssl pkcs12 -nodes -in 81205154511001190.pfx -passin pass:vpos123 -out 81211174511000190.pem
5.7.3 方式3
pfx格式证书转换为pem格式命令:pkcs12 -in 99bill-rsa.pfx -passin pass:生成证书设置的密码 -nodes -out 99bill-rsa.pem
5.8 pkcs7(p7b)转pem
openssl pkcs7 -print_certs -in your_pkcs7_certificate.p7b -out your_pem_certificates.pem
5.9 pkcs7(p7b) 转 pfx
PKCS7不可以直接转换成PFX,我们需要通过上面的方法先将PKCS7转成PEM,然后PEM转PFX。
openssl pkcs7 -print_certs -in your_pkcs7_certificate.p7b -out your_pem_certificates.pem
openssl pkcs12 -export -out your_pfx_certificate.pfx -inkey your_private.key -in your_pem_certificate.crt
5.10 p8格式私钥转换为pem格式
openssl pkey -in prdMer.key.p8 -inform DER -out prdMer.key.p8.pem
5.11 查看pem格式的rsa私钥
openssl rsa -in 3895_pingan.private_key_prd.pem -noout -text
5.12 生成不含密码保护的私钥
genrsa -out private-rsa.key 1024
5.13 生成证书
req -new -x509 -key private-rsa.key -days 750 -out public-rsa.cer
5.14 生成PKCS12 格式Keystore
pkcs12 -export -name test-alias -in public-rsa.cer -inkey private-rsa.key -out 99bill-rsa.pfx
【Pfx转pem】
openssl rsa -in server.pem -out ser11.key
openssl pkcs12 -export -in ser111.cer -inkey ser11.key -out agent.p12
Openssl pkey -in privatekey.pem -out privatekey.der-passin pass:1234
#不需要密码
openssl pkcs12 -clcerts -nokeys -out cert.pem -in 开发.p12
openssl pkcs12 -nocerts -out key.pem -in 开发推送.p12
查看证书信息
openssl x509 -inform der -in pageo.cer -out pageo.pem
【查看证书的有效期和证书主题CN】openssl x509 -in 54321543215432191.pem -noout -text
openssl x509 -in 81211174511000190.pem -noout -text
X509转PFX:
openssl pkcs12 -export -inkey test.key -in test.cer -out test.pfx
PFX转X509:
openssl pkcs12 -in test.pfx -nodes -out test.pem
openssl rsa -in test..pem -out test.key
openssl x509 -in test..pem -out test.crt
6. 制作证书
6.1 生产证书申请CSR文件
keytool -genkey -keyalg RSA -keysize 1024 -keystore store.jks
keytool -certreq -file p10.txt -keystore store.jks
7. 自签名pem证书
- 生成证书库(包含公、私钥、证书):
keytool -genkey -v -keyalg RSA -keysize 1024 -dname "CN=TMS-CORE,OU=深圳有限公司,O=系统开发部,L=深圳,ST=广东,C=CN" -keystore D:\Users\eplusing\Desktop\temp\store.jks -storepass Password1234 -validity 3650
2.导出证书
keytool -export -keystore D:\Users\eplusing\Desktop\temp\store.jks -file D:\Users\eplusing\Desktop\temp\publickey.cer
3.查看证书库中的证书
keytool -list -rfc -keystore D:\Users\eplusing\Desktop\temp\store.jks -storepass Paic1234
4.jks转pfx证书库:
keytool -v -importkeystore -srckeystore D:\Users\eplusing\Desktop\temp\store.jks -srcstoretype jks -srcstorepass Paic1234 -destkeystore D:\Users\caopengpeng762\Desktop\temp\store.pfx -deststoretype pkcs12 -deststorepass Paic1234 -destkeypass Paic1234
5.从pfx导出私钥:
openssl pkcs12 -in store.pfx -nocerts -nodes -out private.key
版权归原作者 eplusing 所有, 如有侵权,请联系我们删除。