RSA加密原理与秘钥、公钥生成

余生颓废 提交于 2020-01-08 01:46:01

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!