RSA加密原理与秘钥、公钥生成
RSA加密(非对称加密)
RSA公开密钥密码体制。所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。(不可逆向运算的加密方法)
它通常是先生成一对RSA 密钥,其中之一是保密密钥(私钥),由用户保存;另一个为公开密钥(公钥),可对外公开,甚至可在网络服务器中注册。为提高保密强度,RSA密钥至少为500位长,一般推荐使用1024位。
RSA进行的都是大数计算,使得RSA最快的情况也比DES慢上好几倍,无论是软件还是硬件实现。速度一直是RSA的缺陷。一般来说只用于少量数据加密。RSA的速度比对应同样安全级别的对称密码算法要慢1000倍左右。
PHP端(操作方法):
生成证书前先检查 /etc/pki/CA 是否有 index.txt 和 serial 文件
以下是创建的方法
touch index.txt 排序数据库,用来跟踪已经颁发的证书。我们把它命名为index.txt,文件内容为空
touch serial
echo 01 > serial 用来跟踪最后一次颁发的证书的序列号,我们把它命名为serial,初始化为01
在linux下创建一个文件夹MyCA 在MyCA下创建两个文件夹用来保存
certs 用来保存我们的CA颁发的所有的证书的副本
private用来保存CA证书的私钥匙
mkdir 命令来创建文件夹
一·构建根证书
1.随机数文件
构建根证书前,需要构建随机数文件(.rand),完整命令如
openssl rand -out private/.rand 1000 随机数文件
2,构建根证书私钥
openssl genrsa -aes256 -out private/ca.key.pem 2048 ca.key.pem(CA证书.密钥)私钥
3,生成根证书签发申请 ca.csr 证书签发申请文件
openssl req -new -key private/ca.key.pem -out private/ca.csr
也可以在命令后面 拼接 -subj "/C=国家/ST=位置/L=位置/O=公司名/OU=单位/CN=绑定网址" 快捷创建 注意输入英文双引号。
得到根证书签发申请文件后,我们可以将其发生给CA机构签发,当然我们也可以自行签发根证书。
4,签发根证书(自行签发根证书) ca.cer 自行签发根证书
openssl x509 -req -days 3650 -sha1 -extensions v3_ca -signkey private/ca.key.pem -in private/ca.csr -out certs/ca.cer
5,根证书转化 PKCS#12编码格式 适用于JAVA语言直接使用 ca.p12 转化(根证书)ca.cer
openssl pkcs12 -export -cacerts -inkey private/ca.key.pem -in certs/ca.cer -out certs/ca.p12
6,查看刚刚转化ca.p12密钥库信息
keytool -list -keystore certs/ca.p12 -storetype pkcs12 -v -storepass 证书密码
我们已经构建了根证书(ca.cer),我们可以使用根证书签发服务器证书和客户证书。
二·构建服务器证书
1.服务器证书的构建与根证书构建相似,首先需要构建私钥。
openssl genrsa -aes256 -out private/server.key.pem 2048 server.key.pem 服务器私钥
2.生成服务器证书签发申请 server.csr 证书签发申请文件
openssl req -new -key private/server.key.pem -out private/server.csr
也可以在命令后面 拼接 -subj "/C=国家/ST=位置/L=位置/O=公司名/OU=单位/CN=绑定网址" 快捷创建 注意输入英文双引号。
3.签发服务器证书(签发X.509格式证书命令)
openssl x509 -req -days 3650 -sha1 -extensions v3_req -CA certs/ca.cer -CAkey private/ca.key.pem -CAserial ca.srl - CAcreateserial -in private/server.csr -out certs/server.cer 服务器证书
4.服务器证书转换
这里我们同样需要将OpenSSL产生的数子证书转化为PKCS#12编码格式 server.p12 转化(根证书)server.cer
openssl pkcs12 -export -clcerts -inkey private/server.key.pem -in certs/server.cer -out certs/server.p12
我们已经构建了服务器证书(server.cer),并可使用该证书构建基于单向认证网络
三·构建客户证书
1.客户证书的构建与服务器证书构建基本一致,首先需要构建私钥。
openssl genrsa -aes256 -out private/client.key.pem 2048 client.key.pem 客户私钥
2.生成客户证书签发申请 client.csr 客户证书签发申请
openssl req -new -key private/client.key.pem -out private/client.csr
也可以在命令后面 拼接 -subj "/C=国家/ST=位置/L=位置/O=公司名/OU=单位/CN=客户名" 快捷创建 注意输入英文双引号。
3.签发客户证书 client.cer 客户证书
openssl ca -days 3650 -in private/client.csr -out certs/client.cer -cert certs/ca.cer -keyfile private/ca.key.pem
4.客户证书转换
这里我们同样需要将OpenSSL产生的数子证书转化为PKCS#12编码格式 client.p12 转化(客户证书)client.cer
openssl pkcs12 -export -clcerts -inkey private/client.key.pem -in certs/client.cer -out certs/client.p12
至此,我们完成了双向认证的所需的全部证书
数字证书是公钥的载体
而密钥库可以包含公钥、私钥信息
密钥库指 .p12 和 .cer 文件
openssl rsa -in server.key.pem -pubout -out server.public.key.pem 根据私钥导出公钥
http://blog.csdn.net/tracyjk/article/details/11973975
http://blog.csdn.net/boss666666/article/details/10284649
RSA加密原理与秘钥、公钥生成的更多相关文章
- RSA加密原理使用方式签名验证
RSA加密原理使用方式签名验证 加密是网络传输中非常重要的一环,它保证了信息的安全性,让他人无法通过抓包来获取通讯的信息也无法通过伪造信息而实现对系统的入侵.其中最为常用的信息传递加密方式就是RS ...
- https的秘钥公钥以及之间的会话流程
一 共享秘钥 1.1 概念 共享秘钥和我们生活中同一把锁的钥匙概念类似,对同一把锁来说,加锁时使用什么钥匙,解锁也必须使用同样的钥匙. 1.2 共享秘钥在HTTP传输中的缺点 以共享密钥方式加密时 ...
- HTTPS 之共享秘钥 公钥 及 私钥
HTTPS 之共享秘钥 公钥 及 私钥一 共享秘钥1.1 概念共享秘钥和我们生活中同一把锁的钥匙概念类似,对同一把锁来说,加锁时使用什么钥匙,解锁也必须使用同样的钥匙. 1.2 共享秘钥在HTTP传输 ...
- RSA加密通信小结(三)--生成加解密所需的SSL命令与流程
在iOS中使用RSA加密解密,需要用到.der和.p12后缀格式的文件,其中.der格式的文件存放的是公钥(Public key)用于加密,.p12格式的文件存放的是私钥(Private key)用于 ...
- SSH公/私秘钥的生成及使用
如果使用GitHub比较多的朋友,对SSH Key肯定也不陌生,当我们SSH进行代码的pull&push时,往往需要我们配置SSH Key. 如果Linux用的多朋友,肯定对SSH Key都很 ...
- git 秘钥的生成
在命令查看自己的秘钥还是公钥 cat .ssh/id_rsa.pub/cat .ssh/id_rsa
- 利用RSACryptoServiceProvider进行RSA加密解密
前言: 本文只介绍How to use,对于加密算法的研究不予讨论. 关于私钥的存储,微软给的建议是使用windows自带的秘钥容器,相见文档. 为了直观看到私钥和公钥,本文直接将其存入XML文件中. ...
- RSA加密、解密、公钥私钥生成
有时项目中需要用到一些加密和解密工具,这里之前整理了一个demo,记录一下,方便查询 package com.test; import java.security.KeyFactory; import ...
- 数字签名中公钥和私钥是什么?对称加密与非对称加密,以及RSA的原理
http://baijiahao.baidu.com/s?id=1581684919791448393&wfr=spider&for=pc https://blog.csdn.net/ ...
随机推荐
- PHP 大文件上传进度条实现
核心原理: 该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开 ...
- BZOJ 5129: [Lydsy1712月赛]树上传送 点分树+Dijkstra
Description http://www.lydsy.com/JudgeOnline/upload/201712/prob12.pdf Input Output 暑假集训的时候点分树做的比较少,所 ...
- noi 1700 + 1756 八皇后问题 x
1700:八皇后问题 总时间限制: 10000ms 内存限制: 65536kB 描述 在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方. 输入 无输入. 输出 按给定顺序和格式输出 ...
- RedisTemplate访问Redis数据结构(三)——Hash
HashOperations提供一系列方法操作hash.首先初始化spring工厂获得redisTemplate和opsForHash private RedisTemplate<String, ...
- [BZOJ3236]:[Ahoi2013]作业(莫队+分块)
题目传送门 题目描述 此时已是凌晨两点,刚刚做了$Codeforces$的小$A$掏出了英语试卷.英语作业其实不算多,一个小时刚好可以做完.然后是一个小时可与做完的数学作业,接下来是分别都是一个小时可 ...
- uniapp开发
问题1:去掉导航条 给一个单独的页面隐藏顶部的 导航栏 可以在pages.json里 单独的路由style下面配置 "app-plus": {"titleNView&q ...
- HDU6715 算术(莫比乌斯反演)
HDU6715 算术 莫比乌斯反演的变形. 对 \(\mu(lcm(i,j))\) 变换,易得 \(\mu(lcm(i,j)) = \mu(i)\cdot\mu(j)\cdot \mu(gcd(i,j ...
- linux设置开机启动程序?
/etc/rc.d/init.d 是 /etc/init.d的目标链接. 如果/etc/rc.d下面没有 rc.local脚本文件, 则需要 手动创建: 而 /etc/bashrc 是在登陆bash ...
- JS在页面输出九九乘法表
<!--小练习,练习使用循环实现一个九九乘法表 第一步,最低要求:在Console中按行输出 n * m = t 然后,尝试在网页中,使用table来实现一个九九乘法表 --> <! ...
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_08 转换流_4_OutputStreamWriter介绍&代码实现
父类是Write 需要抛出异常 声明为它的父类IO异常也是可以的 不指定 默认就是utf-8格式的 两个汉字 6个字节 GBK格式 打开文件的位置用文本打开