• 证书常用相关知识


    证书常用相关知识

    TOC \o "1-3" \h \z \u 1.     证书使用简介.... PAGEREF _Toc22737197 \h 3

    1.1      证书使用场景.... PAGEREF _Toc22737198 \h 3

    1.2      常见证书类型.... PAGEREF _Toc22737199 \h 3

    2.     证书格式转换.... PAGEREF _Toc22737200 \h 3

    2.1      cer转jks. PAGEREF _Toc22737201 \h 3

    2.2      cer格式转JKS. PAGEREF _Toc22737202 \h 3

    2.2.1      转换方式1. PAGEREF _Toc22737203 \h 3

    2.2.2      查看证书信息.... PAGEREF _Toc22737204 \h 3

    2.3      cer信任证书转pfx. PAGEREF _Toc22737205 \h 3

    2.4      pem转pfx. PAGEREF _Toc22737206 \h 3

    2.4.1      转换方式1. PAGEREF _Toc22737207 \h 3

    2.4.2      转换方式2. PAGEREF _Toc22737208 \h 3

    2.4.3      方式3. PAGEREF _Toc22737209 \h 3

    2.4.4      方式4. PAGEREF _Toc22737210 \h 3

    2.5      pfx转pem... PAGEREF _Toc22737211 \h 4

    2.5.1      方式1. PAGEREF _Toc22737212 \h 4

    2.5.2      方式2. PAGEREF _Toc22737213 \h 4

    2.6      pem 转 pkcs7(p7b) PAGEREF _Toc22737214 \h 4

    2.7      pkcs7(p7b)转pem... PAGEREF _Toc22737215 \h 4

    2.8      pkcs7(p7b) 转 pfx. PAGEREF _Toc22737216 \h 4

    2.9      p8格式私钥转换为pem格式... PAGEREF _Toc22737217 \h 4

    2.10       查看pem格式的rsa私钥.... PAGEREF _Toc22737218 \h 4

    2.11       生成不含密码保护的私钥... PAGEREF _Toc22737219 \h 4

    2.12       生成证书.... PAGEREF _Toc22737220 \h 4

    2.13       生成PKCS12 格式Keystore. PAGEREF _Toc22737221 \h 5

    2.14       应用配置文件变更.... PAGEREF _Toc22737222 \h 5

    3.     其他.... PAGEREF _Toc22737223 \h 6

    3.1      其他.... PAGEREF _Toc22737224 \h 6

    3.1.1      其他.... PAGEREF _Toc22737225 \h 6

    1.       证书使用说明

    目标:

    1. 说明服务端证书的制作、申请、应用。

    2. 说明客户端信任证书的制作、应用。

    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 Paic1234 -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证书为FRONT_STG.cer

    1.1.4            将申请到的cer证书导入证书库

    Windows下操作:

    1.1.4.1         将证书转换为包含证书认证链的p7b格式的证书

    该小节下面的步骤是在win10 OS下的具体操作,其他windows系统与之类似亦可参考。

    1.         双击cer证书文件进行安装

    2.         安装证书

    3.         继续下一步

    4.         继续下一步

    5.         点击完成

    6.         在网络和共享中心找到并进入Internet选项

    7.         进入internet选项后切换到内容选项卡

    8.         点击证书

    9.         选中导入的证书,点击导出

    例:FRONT-STG

    10.     点击下一步

    11.     选择P7B类型,并勾选包括证书路径中的所有证书,点击下一步

    12.     保存导出的P7B格式的证书

    例:D:\Users\caopengpeng762\Desktop\FRONT_STG.p7b

    1.1.4.2         将包含证书认证链的p7b格式的证书导入到证书库

    keytool -import -file FRONT_STG.p7b -keystore store.jks

    例:store.jks

    至此服务端证书store.jks制作完成

    1.1.5            将jks格式的服务端证书转换为pem格式

    1.        

    keytool -importkeystore -srckeystore store.jks -srcstoretype JKS -destkeystore FRONT-STG.p12 -deststoretype PKCS12 

    2.        

    openssl pkcs12 -in FRONT-STG.p12 -nodes -out FRONT-STG.pem

    1.1.6            制作客户端信任证书

    keytool -import -file FRONT_STG.cer -keystore stg-sdb-2018.jks

    例:生成客户端信任证书stg-sdb-2018.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证书

    3.8   生成jks证书

    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文件

    1.  keytool -genkey -keyalg RSA -keysize 1024 -keystore store.jks

    2.  keytool -certreq -file p10.txt -keystore store.jks

    6.1.1            其他

    6.1.1.1         其他

    6.1.1.2         其他

    7.       自签名pem证书

    1. 生成证书库(包含公、私钥、证书):

    keytool -genkey -v -keyalg RSA -keysize 1024 -dname "CN=PATMS-CORE,OU=平安科技(深圳)有限公司,O=集团系统开发部,L=深圳,ST=广东,C=CN" -keystore D:\Users\caopengpeng762\Desktop\temp\store.jks -storepass Paic1234 -validity 3650

    2.导出证书

    keytool -export -keystore D:\Users\caopengpeng762\Desktop\temp\store.jks -file D:\Users\caopengpeng762\Desktop\temp\publickey.cer

    3.查看证书库中的证书

    keytool -list -rfc -keystore D:\Users\caopengpeng762\Desktop\temp\store.jks -storepass Paic1234

    4.jks转pfx证书库:

    keytool -v -importkeystore -srckeystore D:\Users\caopengpeng762\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

    8.       Pfx证书常用操作

    ========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

    9.      

  • 相关阅读:
    网络编程TCP/UDP
    Spring Boot简介
    rabbitmq概述和六种工作模式
    Hbase记录
    详解FreeRTOS:FreeRTOS任务删除过程源码分析(进阶篇—2)
    Pgsql 一个表中的字段like另一个表中的字段
    includes用法
    OpenCV防抖实践及代码解析笔记
    【Spring Boot】响应JSON实现原理
    Kubernetes基础概念及架构和组件
  • 原文地址:https://blog.csdn.net/cpp1781089410/article/details/125421183