北京电子科技学院
《信息安全工程技术应用》课程设计报告
基于OpenSSL的证书格式转换工具设计与实现
小组成员姓名:20175119郑楚琪
指导教师:娄家鹏
提交时间:2020年5月4日
一、 个人分工:
1、 学习证书格式区别,证书格式转换方式,opensll命令行。
2、 学会使用openssl生成数字证书的方式。编程完成后每个人都需要掌握了解代码。
3、 负责码云项目管理,负责收集证书格式及转换方面的资料。
二、 学习成果:
1、常见数字证书格式:
1)、 pem:Privacy Enhanced Mail,一般为文本格式,以-----BEGIN...开头,以-----END...结尾。中间的内容是 BASE64 编码。这种格式可以保存证书和私钥,有时我们也把PEM 格式的私钥的后缀改为.key以区别证书与私钥。
BEGIN CERTIFICATE指证书,BEGIN RSA PRIVATE KEY为私钥。
2)、der:用二进制der编码方法储存的证书,二进制格式,只有证书信息,没有私钥。
3)、crt:有可能用der,也有可能用pem编码
4)、jks:Java Key Storage,JAVA的专属格式,利用keytool可以进行格式转换。一般用于 Tomcat 服务器。
5)、PFX 或 P12公钥加密标准 #12 (PKCS#12) 可包含所有私钥、公钥和证书。其以二进制格式存储,也称为 PFX 文件。通常可以将Apache/OpenSSL使用的“KEY文件 + CRT文件”格式合并转换为标准的PFX文件。转换时需要输入PFX文件的加密密码。
2、代码:
#include <cstdio>
#include <iostream>
#include <openssl/pem.h>
#include <openssl/x509.h>
bool MakePemSSL(const char* cerFilePath, const char* savePemFilePath) {
int ret = 0;
X509 *x509 = NULL;
FILE *cerFile = NULL, *pemFile = NULL;
cerFile = fopen(cerFilePath, "rb");
if (cerFile == NULL) {
fprintf(stderr, "MakeLocalPemSSL fopen cerFilePath err \n");
goto free_all;
}
pemFile = fopen(savePemFilePath, "w+");
if (pemFile == NULL) {
fprintf(stderr, "MakeLocalPemSSL fopen savePemFilePath err \n");
goto free_all;
}
x509 = d2i_X509_fp(cerFile, NULL);
if (x509 == NULL) {
fprintf(stderr, "MakeLocalPemSSL failed to parse to X509 from cerFile \n");
goto free_all;
}
PEM_write_X509(pemFile, x509);
ret = PEM_write_X509(pemFile, x509);
if (ret != 1) {
fprintf(stderr, "MakeLocalPemSSL failed to PEM_write_X509 \n");
goto free_all;
}
free_all:
if (cerFile) fclose(cerFile);
if (pemFile) fclose(pemFile);
return (ret == 1);
}
int main(){
FILE *cerFile = NULL, *pemFile = NULL;
char cerNAME[100],pemNAME[100];
printf("请输入要转换的证书路径\n");
scanf("%s",cerNAME);
printf("请输入要保存的文件路径\n");
scanf("%s",pemNAME);
MakePemSSL(cerNAME, pemNAME);
}
3、openssl查看证书命令:
der:openssl x509 -in certificate.der -inform der -text -noout
pem:openssl x509 -in certificate.pem -text -noout
pfx:openssl pkcs12 -in for-iis.pfx
4、openssl转化格式命令:
- der转化为pem
- openssl x509 -in cert.crt -inform der -outform pem -out cert.pem
- pem转化为der
- openssl x509 -in cert.pem -outform der -out cert.der
- pfx转化为pem
- openssl pkcs12 -in for-iis.pfx -out for-iis.pem -nodes
5、openssl生成证书:
生成rsa私钥:openssl genrsa -out rsa_private.key 2048
生成rsa公钥:openssl rsa -in rsa_private.key -pubout -out rsa_public.key
三、 个人感想:
这次实验由于我个人能力的不足,做起来有些吃力,但是在老师和其他两位同学的帮助下,终于可以运行成功openssl命令行,但是对其原理的理解还不是很透彻,希望在以后具体内容的实践中逐步深入了解,可以做到熟练运行。