2020_1课程设计—基于BC的证书格式转换工具的设计与实现—Week1

2020_1课程设计—基于BC的证书格式转换工具的设计与实现—Week1

目录

  • 2020_1课程设计—基于BC的证书格式转换工具的设计与实现—Week1

    • 任务要求
    • Week1 任务安排
    • 实践过程
      • 学习证书格式的相关知识
      • 学习OpenSSL的使用方法
      • 安装OpenSSL
      • 使用OpenSSL查看证书,并实现证书格式转换
        • 创建根证书CA
        • 颁发证书
        • 证书格式转换
    • 遇到问题
    • 参考链接

任务要求

  • 清楚.pem .pfx /.keystore .crt .cer .der 这些格式的文件用openssl如何产生
  • 使用OpenSSL命令行查看证书,并实现证书格式转换
  • 清楚哪些格式可以互相转换,并使用BouncyCastle编程实现

Week1 任务安排

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

实践过程

学习证书格式的相关知识

1、 数字证书常见标准

  • 符合PKI ITU-T X509标准,传统标准(.DER .PEM .CER .CRT)

    • 基本的证书格式,只包含公钥。
    • x509证书由用户公共密钥和用户标识符组成。
    • 此外还包括版本号、证书序列号、CA标识符、签名算法标识、签发者名称、证书有效期等信息。
  • 符合PKCS#7 加密消息语法标准(.P7B .P7C .SPC .P7R)
    • PKCS#7一般把证书分成两个文件,一个公钥、一个私钥,有PEM和DER两种编码方式。- - PEM比较多见,是纯文本的,一般用于分发公钥,看到的是一串可见的字符串,通常以.crt,.cer,.key为文件后缀。
    • DER是二进制编码。
    • PKCS#7一般主要用来做数字信封。
  • 符合PKCS#12 个人信息交换标准(.pfx *.p12)
    • 一种文件打包格式,为存储和发布用户和服务器私钥、公钥和证书指定了一个可移植的格式,是一种二进制格式,通常以.pfx或.p12为文件后缀名。
    • 使用OpenSSL的pkcs12命令可以创建、解析和读取这些文件。
    • P12是把证书压成一个文件,xxx.pfx 。主要是考虑分发证书,私钥是要绝对保密的,不能随便以文本方式散播。所以P7格式不适合分发。.pfx中可以加密码保护,所以相对安全些。
  • X509是数字证书的基本规范,而P7和P12则是两个实现规范,P7用于数字信封,P12则是带有私钥的证书实现规范。
  • 实际上PKCS#7、PKCS#10、PKCS#12都是PKCS系列标准的一部分。相互之间并不是替代的关系,而是对不同使用场景的定义。

2、 证书编码格式

  • PEM

    • BASE64编码
    • 查看内容,以——-BEGIN XXXX ——开头,以——END XXXX——结尾。
    • 查看PEM格式证书的信息:openssl x509 -in certificate.pem -text -noout
    • Apache和*NIX服务器偏向于使用这种编码格式。
  • DER
    • 二进制格式编码,不可读。
    • 查看DER格式证书的信息:openssl x509 -in certificate.der -inform der -text -noout
    • Java和Windows服务器偏向于使用这种编码格式。

3、 各种后缀含义:文件的内容和后缀没有必然的关系,但是一般使用这些后缀来表示这是什么文件。

  • CERDER

    • 一般指使用DER格式的证书,二进制格式存放
    • 只含有证书信息,不包含私钥
  • CRT :二进制格式,也可以是文本格式,一般均为文本格式,功能与.der.cer证书文件相同。
  • PFXP12:证书文件,可以是PEM格式。
    • 公钥加密标准 #12 (PKCS#12) 可包含所有私钥、公钥和证书
    • 其以二进制格式存储,也称为 PFX 文件
    • 通常可以将Apache/OpenSSL使用的“KEY文件 + CRT文件”格式合并转换为标准的PFX文件,你可以将PFX文件格式导入到微软IIS 5/6、微软ISA、微软Exchange Server等软件
    • 一般有密码保护,转换时需要输入PFX文件的加密密码。
  • KEY:通常用来存放一个公钥或者私钥。
    • 查看KEY的办法:openssl rsa -in mykey.key -text -noout
    • 如果是DER格式的话,同理应该:openssl rsa -in mykey.key -text -noout -inform der,这是使用RSA算法生成的key这么查看,DSA算法生成的使用dsa参数
  • PEM – Openssl使用 PEM(Privacy Enhanced Mail)格式来存放各种信息,它是 openssl 默认采用的信息存放方式。Openssl 中的 PEM 文件一般包含如下信息:
    • 内容类型:表明本文件存放的是什么信息内容,它的形式为——-BEGIN XXXX ——,与结尾的——END XXXX——对应。
    • 头信息:表明数据是如果被处理后存放,openssl 中用的最多的是加密信息,比如加密算法以及初始化向量iv。
    • 信息体:为 BASE64 编码的数据。可以包括所有私钥(RSA 和 DSA)、公钥(RSA 和 DSA)和 (x509) 证书。它存储用 Base64 编码的 DER 格式数据,用 ascii 报头包围,因此适合系统之间的文本模式传输。

使用PEM格式存储的证书:

—–BEGIN CERTIFICATE—–

MIICJjCCAdCgAwIBAgIBITANBgkqhkiG9w0BAQQFADCBqTELMAkGA1UEBhMCVVMx

………

1p8h5vkHVbMu1frD1UgGnPlOO/K7Ig/KrsU=

—–END CERTIFICATE—–

使用PEM格式存储的私钥:

—–BEGIN RSA PRIVATE KEY—–

MIICJjCCAdCgAwIBAgIBITANBgkqhkiG9w0BAQQFADCBqTELMAkGA1UEBhMCVVMx

………

1p8h5vkHVbMu1frD1UgGnPlOO/K7Ig/KrsU=

—–END RSA PRIVATE KEY—–

使用PEM格式存储的证书请求文件:

—–BEGIN CERTIFICATE REQUEST—–

MIICJjCCAdCgAwIBAgIBITANBgkqhkiG9w0BAQQFADCBqTELMAkGA1UEBhMCVVMx

………

1p8h5vkHVbMu1frD1UgGnPlOO/K7Ig/KrsU=

—–END CERTIFICATE REQUEST—–

学习OpenSSL的使用方法

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

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

2、 openssl可以实现:秘钥证书管理、对称加密和非对称加密 。

3、 对称加密:对称加密需要使用的标准命令为 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位编码格式

4、 单向加密:单向加密需要使用的标准命令为 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:将加密的内容保存到指定文件中

5、 生成密码:生成密码需要使用的标准命令为 passwd ,用法如下:

openssl passwd [-crypt] [-1] [-apr1] [-salt string] [-in file] [-stdin] [-noverify] [-quiet] [-table] {password}

  • 1:使用md5加密算法
  • salt string:加入随机数,最多8位随机数
  • in file:对输入的文件内容进行加密
  • stdion:对标准输入的内容进行加密

6、 生成随机数:生成随机数需要用到的标准命令为 rand ,用法如下:

openssl rand [-out file] [-rand file(s)] [-base64] [-hex] num

  • out file:将生成的随机数保存至指定文件中
  • base64:使用base64 编码格式
  • hex:使用16进制编码格式

7、 生成秘钥对:首先需要先使用 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
  • rsa 的用法如下:

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:根据私钥提取出公钥
  • 创建证书(我们下面再介绍叭)

安装OpenSSL

  • 我使用的Ubuntu版本是18.04
  • ubuntu18.04内置了1.1.0g版本的openssl

使用OpenSSL查看证书,并实现证书格式转换

创建根证书CA

1、 查看openssl的配置文件openssl.cnf的存放位置(即openssl的安装位置),如上图OPENSSLDIR

2、 查看openssl的配置文件openssl.cnf,因为配置文件中对证书的名称和存放位置等相关信息都做了定义

vim /usr/lib/ssl/openssl.cnf

3、 创建为根证书CA所需的目录及文件

#根据配置文件信息,到CA根目录,若没有则自己创建
cd /etc/pki/CA

#创建配置文件信息中所需的目录及文件
mkdir -pv {certs,crl,newcerts,private}
touch {serial,index.txt}

4、 指明证书的开始编号

echo 01 >> serial

5、 生成根证书的私钥(注意:私钥的文件名与存放位置要与配置文件中的设置相匹配)

(umask 077; openssl genrsa -out private/cakey.pem 2048)

  • umask 077:设置权限可写可执行,但不可读
  • genrsa :产生rsa密钥命令
  • out: 输出路径,这里指private/ca.key.pem
  • 2048,指的是密钥的长度位数,默认长度为512位

6、 生成自签证书,即根证书CA,自签证书的存放位置也要与配置文件中的设置相匹配,生成证书时需要填写相应的信息。

openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out cacert.pem -days 365

  • new:表示生成一个新证书签署请求
  • x509:专用于CA生成自签证书,如果不是自签证书则不需要此项
  • key:用到的私钥文件
  • out:证书的保存路径
  • days:证书的有效期限,单位是day(天),默认是openssl.cnf的default_days

颁发证书

在需要证书的服务器上生成私钥,然后通过此私钥生成证书签署请求,最后将请求通过可靠的方式发送给根证书CA的主机。根证书CA服务器在拿到证书签署请求后,即可颁发那一服务器的证书。

1、 在需要证书的服务器上,生成证书签署请求

  • 生成私钥,该私钥的位置可随意定

    (umask 077; openssl genrsa -out test.key 2048)

  • 生成证书签署请求

    openssl req -new -key test.key -out test.csr -days 365

2、 在根证书服务器上,颁发证书

  • 颁发证书,即签名证书,生成crt文件
#我们创建一个req文件夹来接受服务器发送过来的文件(签署请求的csr文件、key文件等)
mkdir /etc/pki/CA/req
#颁发证书
openssl ca -in /etc/pki/CA/req/test.csr -out /etc/pki/CA/certs/test.crt -days 365

#查看证书信息
openssl x509 -in /etc/pki/CA/certs/test.crt -noout -serial -subject

证书格式转换

1、 格式转换为PFX格式的私钥

  • openssl pkcs12 -export -out test.pfx -inkey test.key -in test.crt
  • inkey的值test.key是需要证书服务器上生成的私钥key文件
  • 需要创建密码,读取该test.pfx文件的时候需要用到改密码

2、 格式转换为cer格式的公钥

openssl x509 -inform pem -in test.crt -outform der -out test.cer

#查看cer证书信息
openssl x509 -in test.cer -text -noout
#若报错unable to load certificate,则说明你打开的证书编码是der格式,需要用以下命令
openssl x509 -in test.cer -inform der -text -noout
  • inform pem,由于输入的test.crt文件是以pem编码的,故需要指定以pem编码来读取
  • outform der,输出的test.cer文件需要以der编码

遇到问题

Q:这是什么奇怪的我看不懂的问题,好像就是啥啥都打不开的样子,不能加载根CA的私钥

A:step1:openssl rand -writerand .rnd

step2:诶?好像刚刚查看了openssl.cnf的配置信息,里面有定义证书的存放位置,这和我刚刚保存的位置不太一样啊!

所以,vim /etc/pki/tls/openssl.cnf 编辑配置文件,修改../../CA/etc/pki/CA 就解决啦~

参考链接

证书格式转换

Linux openssl 生成证书的详解

原文地址:https://www.cnblogs.com/orii/p/12708211.html

时间: 04-15

2020_1课程设计—基于BC的证书格式转换工具的设计与实现—Week1的相关文章

常用的证书格式转换

1.从pfx格式的证书提取出密钥和证书set OPENSSL_CONF=openssl.cnfopenssl pkcs12 -in my.pfx -nodes -out server.pemopenssl rsa -in server.pem -out server.key openssl x509 -in server.pem -out server.crtPEM格式的证书与DER格式的证书的转换openssl x509 -in cert.pem -inform PEM -out cert.d

web字体格式及几种在线格式转换工具介绍

原文地址:http://blog.csdn.net/xiaolongtotop/article/details/8316554 目前,文字信息仍是网站最主要的内容,随着CSS3技术的不断成熟,Web字体逐渐成为话题,这项让未来Web更加丰富多彩的技术拥有多种实现方案,其中之一是通过@font-face属性在网页中嵌入自定义字体,主流的浏览器都支持这项技术,本文介绍主要的几种Web字体格式及字体格式转换. Web字体格式介绍 TrueType (.ttf) Windows和Mac系统最常用的字体格

【 优秀的视频播放和格式转换工具】Leawo Prof. Media for Mac

[简介] Leawo Prof. Media 是一款Mac上集成了多种视频相关功能于一体的软件,具有视频播放.视频格式转换.在线视频下载.光盘镜像制作.电子相册制作.视频特效编辑等功能,很强大的一款多功能视频处理软件! Leawo Prof Media Mac版是一款macOS平台的全功能视频音频格式转换工具,Prof Media for Mac可以帮助我们在mac电脑上非常方便地进行视频格式转换.音频格式转换等. Leawo Prof Media Mac版支持超过180多种的视频格式转换,Le

Window下 Qt 编译MySQL驱动(居然用到了动态库格式转换工具)

一步步在Window下开发Qt 今天开始安装MySQL,看了些关于MySQL安装的博文,方法大致相同,但是遇到的细节问题各有不同,或者没有讲全面,下面来说说个人的安装过程及遇到的问题. 1.首先下载,MySQL官网下载地址:http://www.mysql.com/downloads/installer/ 2.安装时,会提示安装.netFramework4环境,这里提供一个下载链接:http://dldx.csdn.net/fd.PHP?i=537939463366842&s=17682a852

iSkysoft iMedia Converter Deluxe Mac如何制作视频?视频格式转换工具制作动图的方法

使用iSkysoft iMedia Converter Deluxe Mac如何制作视频?使用视频格式转换工具,你可以轻松进行动图或视频的制作,也可以把你喜欢的视频的某一段提取出来,制作成你自己风格的视频,功能强大,使用简单,下面Mac down 小编就为大家介绍一下视频格式转换工具制作动图的方法,希望能够对你有所帮助. https://www.macdown.com 首先下载iSkysoft iMedia Converter Deluxe Mac视频格式转换工具. 来本站Mac down.co

(备忘)openssl的证书格式转换

PKCS 全称是Public-KeyCryptography Standards ,是由 RSA 实验室与其它安全系统开发商为促进公钥密码的发展而制订的一系列标准,PKCS 目前共发布过15 个标准. 常用的有:PKCS#7 Cryptographic Message Syntax StandardPKCS#10 Certification Request StandardPKCS#12 Personal Information Exchange Syntax StandardX.509是常见通

openssl的证书格式转换

证书转换 PKCS 全称是 Public-Key Cryptography Standards ,是由 RSA 实验室与其它安全系统开发商为促进公钥密码的发展而制订的一系列标准,PKCS 目前共发布过 15 个标准. 常用的有:PKCS#7 Cryptographic Message Syntax StandardPKCS#10 Certification Request StandardPKCS#12 Personal Information Exchange Syntax StandardX

Cer Crt Pem Pfx 证书格式转换

1.从pfx格式的证书提取出密钥和证书set OPENSSL_CONF=openssl.cnfopenssl pkcs12 -in my.pfx -nodes -out server.pemopenssl rsa -in server.pem -out server.key openssl x509 -in server.pem -out server.crtPEM格式的证书与DER格式的证书的转换openssl x509 -in cert.pem -inform PEM -out cert.d

FFmpeg(10)-基于FFmpeg进行像素格式转换(sws_getCachedContext(), sws_scale())

一.包含头文件和库文件 像素格式的相关函数包含在 libswscale.so 库中,CMakeLists需要做下列改动: # swscale add_library(swscale SHARED IMPORTED) set_target_properties(swscale PROPERTIES IMPORTED_LOCATION ${FF}/libswscale.so) target_link_libraries target_link_libraries( # Specifies the t