本篇主要介绍了基于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数字证书系统实现的更多相关文章

  1. OpenSSL - 网络安全之数据加密和数字证书

    功能应用: 消息摘要,给文件或数据生成消息摘要,消息摘要只能校验数据的完整性,如SHA.MD5 数据加密和解密:对数据进行加密解密,OpenSSL实现了所有加密算法 数字证书:可以通过命令行或代码生成 ...

  2. 基于SSL协议的双向认证 - 数字证书 [2]

    1.1    数字证书 1.1.1   概念理解 一种文件的名称,例如一个机构或人的签名,能够证明这个机构或人的真实性.简而言之数字证书是一种网络上证明持有者身份的文件,同时还包括有公钥.证书是由国际 ...

  3. HTTPS加密通信原理及数字证书系统

    https加密通信原理: 公钥私钥成对,公钥公之于众,私钥只有自己知道. 用公钥加密的信息只能由与之相对应的私钥解密. 甲给乙发送数据时,甲先用乙的公钥加密这段数据,再用自己的私钥对这段数据的特征数据 ...

  4. OpenSSL 与 SSL 数字证书概念贴

    SSL/TLS 介绍见文章 SSL/TLS原理详解(http://seanlook.com/2015/01/07/tls-ssl). 如果你想快速自建CA然后签发数字证书,请移步 基于OpenSSL自 ...

  5. 基于OpenSSL自建CA和颁发SSL证书

    关于SSL/TLS介绍见文章 SSL/TLS原理详解.关于证书授权中心CA以及数字证书等概念,请移步 OpenSSL 与 SSL 数字证书概念贴 . openssl是一个开源程序的套件.这个套件有三个 ...

  6. 对于PKI(公钥基础结构)及证书服务的通俗理解

    对于PKI及证书服务的这些概念,相信初学者会有许多迷惑的地方,那是因为其中的某些关键概念没有理解清楚,我力争以通俗易懂的方式给初学者一些启示,也给以后自己忘了的时候一个参考:) ! 参考资料:http ...

  7. openssl - 数字证书的编程解析

    原文链接: http://www.cangfengzhe.com/wangluoanquan/37.html 这篇文章主要介绍PKI公钥体系中非常核心元素——数字证书的编程解析.在SSL,SET等安全 ...

  8. 基于 OpenSSL 的 CA 建立及证书签发 【转】

    建立 CA 建立 CA 目录结构 按照 OpenSSL 的默认配置建立 CA ,需要在文件系统中建立相应的目录结构.相关的配置内容一般位于 /usr/ssl/openssl.cnf 内,详情可参见 c ...

  9. 用Keytool和OpenSSL生成和签发数字证书

    一)keytool生成私钥文件(.key)和签名请求文件(.csr),openssl签发数字证书      J2SDK在目录%JAVA_HOME%/bin提供了密钥库管理工具Keytool,用于管理密 ...

随机推荐

  1. C语言实现--静态链表的操作

    1,我们研究数据结构的操作,第一要弄懂它的结构体表示(也就是结构体特点).第二要清楚它的初始化和撤销过程.对于静态链表首先分析它的特点:一是采用静态存储方式,二是没有指针.静态链表就是不用指针来表示链 ...

  2. Codeforces Round #646 (Div. 2) A. Odd Selection(数学)

    题目链接:https://codeforces.com/contest/1363/problem/A 题意 判断是否能从 $n$ 个数中选 $x$ 个数加起来和为奇数. 题解 首先 $n$ 个数中至少 ...

  3. 哈希算法解决:HDU1686 && POJ2774 && POJ3261

    HDU1686 题意: 找A串在B串中的出现次数(可重叠),可用KMP做,这里只提供哈希算法做的方法 题解: 先得到A串的hash值,然后在B中枚举起点,长度为lena的子串,检验hash值是否相同就 ...

  4. GCD HDU - 1695 容斥原理(复杂度低的版本)

    题意: 让你从区间[a,b]里面找一个数x,在区间[c,d]里面找一个数y.题目上已经设定a=b=1了.问你能找到多少对GCD(x,y)=k.x=5,y=7和y=5,x=7是同一对 题解: 弄了半天才 ...

  5. Shell 元字符 & 变量

    Shell 介绍 ## 什么是程序 程序就是一组数据和代码逻辑集合的文件 ## 什么是进程 进程是程序的运行过程,也可以说是操作系统干活的过程,因为是操作系统负责控制硬件来运行应用程序 ps:进程与进 ...

  6. 鸟哥的linux私房菜——第六章学习(Linux文件与目录管理)

    ******************第六章学习****************** 1.[文件与目录管理] 在所有目录下面都会存在的两个目录,分别是 "." 与 "..& ...

  7. cin的用法

    int val=0; cin>>val; 上述程序先定义了一个整型数据val,通过cin读取数据放在val中,如果输入的整型数据,则读取成功,返回的是>>左侧的对象,也就是is ...

  8. HDU 4336 Card Collector(状压 + 概率DP 期望)题解

    题意:每包干脆面可能开出卡或者什么都没有,一共n种卡,每种卡每包爆率pi,问收齐n种卡的期望 思路:期望求解公式为:$E(x) = \sum_{i=1}^{k}pi * xi + (1 - \sum_ ...

  9. github gist 无法访问

    转自这里 以管理员身份在hosts文件: Windows: C:\Windows\System32\drivers\etc Ubuntu: /etc/hosts 添加: 192.30.253.118 ...

  10. TypeScript callback Object params

    TypeScript callback Object params 回调函数 对象 参数 const func = (options = {}) => { // do somthing retu ...