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


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com