RSA加密、解密,簽名和驗簽的原理
簡介:RSA加密是一種非對稱加密。可以在不直接傳遞密鑰的情況下,完成解密。這能夠確保信息的安全性,避免了直接傳遞密鑰所造成的被破解的風險。是由一對密鑰來進行加解密的過程,分別稱為公鑰和私鑰。兩者之間有數學相關,該加密算法的原理就是對一極大整數做因數分解的困難性來保證安全性。通常個人保存私鑰,公鑰是公開的(可能同時多人持有)。
注: linux環境下執行命令,或者Windows安裝openssl
1.使用openssl生成pkcs8格式秘鑰
私鑰生成命令:
openssl genrsa -out private_pkcs1.pem 2048
openssl pkcs8 -in private_pkcs1.pem -out private_pkcs8.pem -topk8 -nocrypt
公鑰生成命令:
openssl rsa -in private_pkcs1.pem -pubout -out public.pem
使用時可直接提取文件里面的字符串秘鑰,或者直接讀取對應的秘鑰文件。
通過已有的pfx證書文件提取公私鑰命令:
openssl pkcs12 -in certificate_p12.pfx -out private_pkcs8.pem -nodes -nocerts openssl rsa -in private_pkcs8.pem -pubout -out public.pem
2.生成pfx文件
1、生成key,openssl.key為key的名字隨意起,1024為密鑰長度
openssl genrsa -out openssl.key 1024
2、生成cer證書(openssl.key為之前生成的key的名字,openssl.cer為生成的證書名字,3650為證書過期天數,CN的參數***.website是的你主機名或者IP地址(這里一定要寫對,不然以后訪問的話,瀏覽器會提示有風險)。
openssl req -new -x509 -key openssl.key -out openssl.cer -days 3650 -subj /CN=***.website
3、生成需要的pfx私鑰文件(會讓你輸入密碼,使用私鑰時候使用的(千萬不能忘記))
openssl pkcs12 -export -out openssl.pfx -inkey openssl.key -in openssl.cer
4、生成crt證書(由於手機需要crt證書,所以需要的話還要生成crt)
openssl req -new -x509 -key openssl.key -out openssl.crt -days 3650
3.不同證書文件格式der、cer、pfx、pem區別
參考博客地址:https://blog.csdn.net/hqy1719239337/article/details/88896074
.*DER*:用二進制DER編碼的證書;
.PEM:用ASCLL(BASE64)編碼的證書;
.CER:存放公鑰,沒有私鑰;
.PFX:存放公鑰和私鑰
(pem 后綴的證書都是base64編碼;der 后綴的證書都是二進制格式;crt .cer 后綴的文件都是證書文件(編碼方式不一定,有可能是.pem,也有可能是.der);.pfx 主要用於windows平台,瀏覽器可以使用,也是包含證書和私鑰,獲取私鑰需要密碼才可以)
X509文件擴展名(x509 這種證書只有公鑰,不包含私鑰。)
4.轉換方式
可以使用OpenSSL命令行工具在不同證書格式之間的轉換
PEM to DER
openssl x509 -outform der -in certificate.pem -out certificate.der
PEM to PFX
openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
DER to PEM
openssl x509 -inform der -in certificate.cer -out certificate.pem
PFX to PEM
openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes