2020_1课程设计—基于BC的证书格式转换工具的设计与实现—第一周进展

本周任务

  • 收集相关资料,学习证书格式的相关知识
  • 收集相关资料,学习OpenSSL的使用方法
  • 安装OpenSSL
  • 使用OpenSSL命令行查看证书,并实现证书格式转换

完成情况

收集相关资料,学习证书格式的相关知识

  • 不同平台,不同设备需要的证书格式不同,例如Windows服务器使用.pfx文件,Apache服务器使用.crt、.cer文件
  • 虽然证书的格式不同,但证书的本身不发生改变,只是存储方式发生了改变

PEM Format

  • 最常用的证书格式(密钥格式)
  • 用于Apache平台
  • ASCII文件使用Base64编码
  • 文件中包含 “—–BEGIN CERTIFICATE—–” 和 “—–END CERTIFICATE—–” 字符串
  • 只包含公钥
  • 可使用openssl x509 -in cert.pem -noout -text查看PEM证书内容
  • 常用扩展名 .pem, .crt, .cer, .key

DER Format

  • ASCII PEM 格式证书的二进制版本
  • 用于java平台
  • 查看DER格式证书的信息openssl x509 -in cert.der -inform der -text -noout
  • 扩展名 .der

P7B Format

  • 用于Windows OS, Java Tomcat平台
  • Base64 编码
  • 包含 “—–BEGIN PKCS—–” & “—–END PKCS7—–”
  • 不含私钥,可以包含证书链
  • 扩展名 .p7b, .p7c

PFX Format

  • 用于Windows平台
  • 二进制文件
  • 用于存储服务器证书,公钥和私钥都包含,而且加密
  • 扩展名 .pfx, .p12

Keystore Format

  • 用于Android平台
  • 对APP进行签名
  • 扩展名 .keystore

收集相关资料,学习OpenSSL的使用方法

  • OpenSSL 是一个开源项目,其组成主要包括一下三个组件:

    • openssl:多用途的命令行工具
    • libcrypto:加密算法库
    • libssl:加密模块应用库,实现了ssl及tls
  • openssl可以实现:

    • 密钥证书管理
    • 对称加密
    • 非对称加密

1、对称加密

  • 对称加密需要使用的标准命令为 enc ,用法如下:
openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64]
       [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md]
       [-p] [-P] [-bufsize number] [-nopad] [-debug] [-none] [-engine id]
  • in filename:指定要加密的文件存放路径

  • out filename:指定加密后的文件存放路径

  • salt:自动插入一个随机数作为文件内容加密,默认选项

  • e:可以指明一种加密算法,若不指的话将使用默认加密算法

  • d:解密,解密时也可以指定算法,若不指定则使用默认算法,但一定要与加密时的算法一致

  • a/-base64:使用-base64位编码格式

2、单向加密

  • 单向加密需要使用的标准命令为 dgst ,用法如下:
openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1] [-c] [-d] [-hex] [-binary]
       [-out filename] [-sign filename] [-keyform arg] [-passin arg] [-verify filename] [-prverify
       filename] [-signature filename] [-hmac key] [file...]
  • [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1] :指定一种加密算法

  • out filename:将加密的内容保存到指定文件中

3、生成密码

  • 生成密码需要使用的标准命令为 passwd ,用法如下:
openssl passwd [-crypt] [-1] [-apr1] [-salt string] [-in file] [-stdin] [-noverify] [-quiet] [-table] {password}
常用选项有:
  • 1:使用md5加密算法

  • salt string:加入随机数,最多8位随机数

  • in file:对输入的文件内容进行加密

  • stdion:对标准输入的内容进行加密

4、生成随机数

  • 生成随机数需要用到的标准命令为 rand ,用法如下:
openssl rand [-out file] [-rand file(s)] [-base64] [-hex] num
  • out file:将生成的随机数保存至指定文件中

  • base64:使用base64 编码格式

  • hex:使用16进制编码格式

5、生成密钥对

  • 首先需要先使用 genrsa 标准命令生成私钥,然后再使用 rsa 标准命令从私钥中提取公钥。

  • genrsa 的用法如下:

openssl genrsa [-out filename] [-passout arg] [-des] [-des3] [-idea] [-f4] [-3] [-rand file(s)] [-engine id] [numbits]
  • out filename:将生成的私钥保存至指定的文件中

  • des|-des3|-idea:不同的加密算法

  • numbits:指定生成私钥的大小,默认是2048

  • ras 的用法如下:

openssl rsa [-inform PEM|NET|DER] [-outform PEM|NET|DER] [-in filename] [-passin arg] [-out filename] [-passout arg]
       [-sgckey] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-check] [-pubin] [-pubout] [-engine id]
  • in filename:指明私钥文件

  • out filename:指明将提取出的公钥保存至指定文件中

  • pubout:根据私钥提取出公钥

6.证书操作(后文重点介绍)

安装OpenSSL——准备工作

安装

配置环境变量

  • 在系统环境变量的Path路径中添加自己的OpenSSL安装的路径,如E:BaiduNetdiskDownloadOpenSSLOpenSSL-Win64in

  • 在cmd输入openssl,出现以下界面表示成功

工作目录

  • 打开OpenSSL配置文件openssl.cfg,找到配置[CA_default]
  • 更改其变量dir为CA工作目录

  • 在工作目录中构建子目录,用于存放证书、密钥等

  • 然后构建相关文件

使用OpenSSL命令行查看证书、公私钥

OpenSSL生成证书

  • 构建随机数:openssl rand -out private/.rand 1000
    • rand:随机数命令
    • -out:输出文件路径,这里将随机数文件输出到private目录下
    • 参数1000用来产生伪随机字节数

  • 构建根证书密钥:openssl genrsa -aes256 -out private/ca.key.pem 2048

    • genrsa:产生RSA密钥命令
    • -aes256:使用AES算法(256位密钥)对产生的私钥加密。可选算法包括DES、DESede、IDEA和AES
    • -out:输出路径,这里指private/ca.key.pem
    • 参数2048指RSA密钥长度位数,默认长度为512位
  • 注:OpenSSL通常使用PEM格式保存私钥(公钥)

  • 生成根证书签发申请:openssl req -new -key private/ca.key.pem -out private/ca.csr -subj "/C=CN/ST=BJ/L=BJ/O=zlex/OU=zlex/CN=*.zlex.org"
    • req:产生证书签发申请命令
    • -new:表示新请求
    • -key:私钥,这里为private/ca.key.pem文件
    • -out:输出路径,这里为private/ca.csr文件
    • -subj:指定用户信息,这里使用泛域名“*.zlex.org”作为用户名
    • 需要输入根证书密码

  • 签发根证书:openssl x509 -req -days 10000 -sha1 -extensions v3_ca -signkey private/ca.key.pem -in private/ca.csr -out certs/ca.cer
    • x509:签发X.509格式证书命令
    • -req:证书输入请求
    • -days:有效天数,这里为10000天
    • -sha1:证书摘要算法
    • -extensions:按OpenSSL配置文件v3_ca项添加扩展
    • -signkey:自签名密钥,这里为private/ca.key.pem
    • -in:输入文件,这里为private/ca.csr
    • -out:输出文件,这里为certs/ca.csr

OpenSSL查看证书内容

  • 查看PEM格式证书内容:openssl x509 -in cert.pem -noout -text

  • 还可双击文件打开证书查看其内容

OpenSSL查看公私钥

  • 公私钥通常以PEM文件存储
  • 还可使用PFX证书生成PEM公私钥文件
    • 提取密钥对:openssl pkcs12 -in private.pfx -nocerts -nodes -out private.key
    • 提取公钥:openssl rsa -in private.key -out pfx_pri.pem
    • 提取私钥:openssl rsa -in private.key -pubout -out pfx_pub.pem

  • 还可使用PEM证书获取公钥:openssl x509 -in public.cer -pubkey -noout > public.pem

OpenSSL命令行实现证书格式转换

PEM——>其他

  • PEM——>DER:openssl x509 -outform der -in certificate.pem -out certificate.der

  • PEM——>P7B:openssl crl2pkcs7 -nocrl -certfile certificate.cer -out certificate.p7b -certfile CAcert.cer

  • PEM——>PFX:openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CAcert.crt

  • PEM——>keystore:keytool -import -file ca.cer -keystore ca.keystore

其他——>PEM

  • DER——>PEM:openssl x509 -inform der -in certificate.cer -out certificate.pem

  • P7B——>PEM:openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer

  • PFX——>PEM:openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes

转换结果

遇到的问题与解决过程

问题一:证书格式的转换只能围绕PEM进行,即只能实现PEM与其他格式证书的转换,并以PEM为中心实现所有格式的转换。而且无法实现keystore——>PEM的转换

待解决,考虑BC编程阶段实现

问题二:虽然对证书格式的大的框架有了一定的了解,但对证书内部的细节部分的理解还不到位

待解决,这一部分资料也有限,希望在BC编程阶段通过函数的调用实现,可以更加深入地了解证书的格式结构

原文地址:https://www.cnblogs.com/wyf20175217/p/12694841.html