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——准备工作
安装
- 在相应网站下载OpenSSL安装包

配置环境变量
- 在系统环境变量的Path路径中添加自己的OpenSSL安装的路径,如E:\BaiduNetdiskDownload\OpenSSL\OpenSSL-Win64\bin

- 在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编程阶段通过函数的调用实现,可以更加深入地了解证书的格式结构
 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号