基于OpenSSL的PKI的PKI数字证书系统实现
本篇主要介绍了基于OpenSSL的PKI的PKI数字证书系统实现,利用OpenSSL建立一个CA中心的详细解决方案和建立的具体步骤。
1、PKI数字证书系统设计
PKI数字证书系统主要包括证书颁发机构CA、注册机构RA和公共查询数据库三个部分,基本框架如下:

2、OpenSSL对传输文件公钥加密私钥解密
OpenSSL RSA私钥生成:
$ openssl genrsa -out private.pem 2048
OpenSSL RSA公钥生成:
$ openssl rsa -in ./private.pem -pubout -out public.pem
创建file.txt为例,来加密file.txt内容 用公钥进行加密:
$openssl rsautl -encrypt -in file.txt -inkey public.pem -pubin -out message.en
用私钥进行解密:
$openssl rsautl -decrypt -in message.en -inkey private.pem -out message.txt
读取message.txt内容与file.txt进行对照即可验证
3、OpenSSL对传输文件私钥签名公钥验证
OpenSSL RSA私钥生成:$ openssl genrsa -out private.pem 2048
OpenSSL RSA公钥生成:$ openssl rsa -in ./private.pem -pubout -out public.pem
以file.txt为例,实现对文件私钥签名公钥验证
用私钥签名:
$openssl dgst -sign private.pem -md5 -out message.sign file.txt
用公钥验签:
$openssl dgst -verify public.pem -md5 -signature message.sign file.txt
终端显示Verified OK即验签成功
4、CA实现过程-总述
OpenSSL实现了安全套接层协议(SSL V2/V3)和传输层安全协议(TLS V1),并带有一个功能完整的、具有通用性的加密技术库。OpenSSL工具包分为三个部分:SSL函数库、Crypto函数库和命令行工具。通过使用OpenSSL构建CA认证中心。
5、CA实现过程-环境搭建
Windows平台下安装OpenSSL安装包开源平台: http://slproweb.com/products/Win32OpenSSL.html 可以选择Win64 OpenSSL v1.1.1g Light EXE/MSI版本,对于EXE版本,需要在电脑端配置后环境变量等,等安装配置好之后,在cmd终端输入:
$ openssl version 终端显示如OpenSSL 1.1.1g 等就已经安装完成
6、CA实现过程-生成数字证书-生成CA私钥以及自签名根证书
实现自建立CA,并用自建的CA对产生的数字证书进行签名。生成CA私钥以及自签名根证书具体过程如下:
(1).生成CA私钥ca-key.pem; 打开交互模式$ openssl 生成CA私钥:
OpenSSL> genrsa -out ca-key.pem 1024
(2).生成待签名证书ca-req.csr; 创建证书请求:
OpenSSL> req -new -out ca-req.csr -key ca-key.pem
(3).用CA私钥进行自签名,产生x509证书文件ca-cert.pem; 自签署证书:
OpenSSL> x509 -req -in ca-req.csr -out ca-cert.pem -signkey ca-key.pem -days 365
(4).生成CA证书:ca-cert.pfx
OpenSSL> pkcs12 -export -clcerts -in ca-cert.pem -inkey ca-key.pem -out ca-cert.pfx
在Windows端可以直接安装CA根证书
7、CA实现过程-生成数字证书-生成CA私钥以及自签名根证书

8、CA实现过程-生成数字证书-生成服务端证书
生成服务端证书具体过程如下:
(1).生成server私钥; 生成server私钥:
OpenSSL> genrsa -out server-key.pem 1024
(2).生成待签名证书; 创建证书请求:
OpenSSL> req -new -out server-req.csr -key server-key.pem
(3).用CA私钥进行签名,产生x509证书文件; 自签署证书:
OpenSSL> x509 -req -in server-req.csr -out server-cert.pem -signkey server-key.pem -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -days 365
( 一般情况在根CA电脑端执行)
(4).将生成的证书保存起来;
9、CA实现过程-生成数字证书-生成客户端证书
生成服务端证书具体过程与生成服务器证书类似:
(1).生成client私钥; 生成server私钥:
OpenSSL> genrsa -out client-key.pem 1024
(2).生成待签名证书; 创建证书请求:
OpenSSL> req -new -out client-req.csr -key client-key.pem
(3).用CA私钥进行签名,产生x509证书文件; 自签署证书:
OpenSSL> x509 -req -in client-req.csr -out client-cert.pem -signkey client-key.pem -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -days 365
( 一般情况在根CA电脑端执行)
(4).将生成的证书保存起来;
10、创建Https进行服务器证书测试
在终端执行: $ node index.js

在网站输入: https://localhost:8000/ 查询证书

基于OpenSSL的PKI的PKI数字证书系统实现的更多相关文章
- OpenSSL - 网络安全之数据加密和数字证书
功能应用: 消息摘要,给文件或数据生成消息摘要,消息摘要只能校验数据的完整性,如SHA.MD5 数据加密和解密:对数据进行加密解密,OpenSSL实现了所有加密算法 数字证书:可以通过命令行或代码生成 ...
- 基于SSL协议的双向认证 - 数字证书 [2]
1.1 数字证书 1.1.1 概念理解 一种文件的名称,例如一个机构或人的签名,能够证明这个机构或人的真实性.简而言之数字证书是一种网络上证明持有者身份的文件,同时还包括有公钥.证书是由国际 ...
- HTTPS加密通信原理及数字证书系统
https加密通信原理: 公钥私钥成对,公钥公之于众,私钥只有自己知道. 用公钥加密的信息只能由与之相对应的私钥解密. 甲给乙发送数据时,甲先用乙的公钥加密这段数据,再用自己的私钥对这段数据的特征数据 ...
- OpenSSL 与 SSL 数字证书概念贴
SSL/TLS 介绍见文章 SSL/TLS原理详解(http://seanlook.com/2015/01/07/tls-ssl). 如果你想快速自建CA然后签发数字证书,请移步 基于OpenSSL自 ...
- 基于OpenSSL自建CA和颁发SSL证书
关于SSL/TLS介绍见文章 SSL/TLS原理详解.关于证书授权中心CA以及数字证书等概念,请移步 OpenSSL 与 SSL 数字证书概念贴 . openssl是一个开源程序的套件.这个套件有三个 ...
- 对于PKI(公钥基础结构)及证书服务的通俗理解
对于PKI及证书服务的这些概念,相信初学者会有许多迷惑的地方,那是因为其中的某些关键概念没有理解清楚,我力争以通俗易懂的方式给初学者一些启示,也给以后自己忘了的时候一个参考:) ! 参考资料:http ...
- openssl - 数字证书的编程解析
原文链接: http://www.cangfengzhe.com/wangluoanquan/37.html 这篇文章主要介绍PKI公钥体系中非常核心元素——数字证书的编程解析.在SSL,SET等安全 ...
- 基于 OpenSSL 的 CA 建立及证书签发 【转】
建立 CA 建立 CA 目录结构 按照 OpenSSL 的默认配置建立 CA ,需要在文件系统中建立相应的目录结构.相关的配置内容一般位于 /usr/ssl/openssl.cnf 内,详情可参见 c ...
- 用Keytool和OpenSSL生成和签发数字证书
一)keytool生成私钥文件(.key)和签名请求文件(.csr),openssl签发数字证书 J2SDK在目录%JAVA_HOME%/bin提供了密钥库管理工具Keytool,用于管理密 ...
随机推荐
- dsu on tree ——附带buff的暴力解法
这篇博客只是简单叙述思想(因为ML太弱了),具体例题请转其他博客. dsu on tree,许多OI将其归于启发式合并,当然如果你能理解更好,这只是一个理解方式罢了. 思想简述 顾名思义,这个算法是处 ...
- Codeforces Round #697 (Div. 3) F. Unusual Matrix (思维,数学)
题意:给你一个矩阵\(a\)和\(b\),你可以对\(a\)的任意一行或任意一列的所有元素xor\(1\)任意次,问最终是否能够得到\(b\). 题解:由\(a\ xor\ b=c\),可得:\(a\ ...
- Codeforces Round #496 (Div. 3) D. Polycarp and Div 3 (数论)
题意:给你一个巨长无比的数,你可以将这个数划成任意多个部分,求这些部分中最多有多少个能被\(3\)整除. 题解:首先我们遍历累加每个位置的数字,如果某一位数或者累加和能被\(3\)整除(基础知识,不会 ...
- Power Strings POJ - 2406 后缀数组
Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc&quo ...
- 分块 && 例题 I Hate It HDU - 1754
分块算法: 分块就是对暴力方法的一种优化: _ 假设我们总共的序列长度为n,然后我们把它切成√n 块,然后把每一块里的东西当成一个整体来看,完整块:被 ...
- 三、Python基本数据类型
一.基本算术运算(获取的结果是值) 1 a1=10 2 a2=20#初始赋值 3 a3=a1+a2 #结果30 4 a4=a2-a1 #结果10 5 a5=a1*a2 #结果200 6 a6=a2/a ...
- VS Code 配置 Java IDE
背景 维护的项目在一个内网环境,只能通过跳转机的FTP上传文件.项目是Java spring boot开发,之前的维护人员使用sts(https://spring.io/tools),使用起来体验极差 ...
- JVM你了解?
1.谈谈你对JAVA的理解 平台无关性(一次编译,到处运行) GC(不必手动释放堆内存) 语言特性(泛型.lambda) 面向对象(继承,封装,多态) 类库 异常处理 2.平台无关性怎么实现
- 微服务架构学习Day01-SpringBoot入门
基本概念 SpringBoot的优点: 可以创建独立的Spring应用 SpringBoot嵌入Tomcat,Jetty和Unsertow, 不需要部署war文件 根据需要通过maven获取start ...
- OpenStack Train版-5.安装nova计算服务(控制节点)
nova计算服务需要在 控制节点 和 计算节点 都安装 控制节点主要安装 nova-api(nova主服务) nova-scheduler(nova调度服务) nova-conductor(n ...