當前位置:編程學習大全網 - 編程語言 - openssl生成的ssl證書和付費的有什麽區別?

openssl生成的ssl證書和付費的有什麽區別?

openssl生成的ssl證書和付費的有什麽區別?本文描述了基於SSL的socket通信程序開發中與證書、簽名和認證相關的步驟。在我們的場景中,套接字服務器是用java語言編寫的,客戶端是用C語言編寫的。使用了壹個叫做matrixssl的C語言庫。制作自己的CA簽名並不等同於“自簽名”。在自簽名的情況下,RSA只有壹對公鑰和私鑰,公鑰證書是用私鑰簽名的。我們的場景是,我們制作自己的CA,並擁有CA的公鑰和私鑰對。socket的服務器也有壹對公鑰和私鑰。用CA的私鑰簽署socket服務器的公鑰證書。

OpenSSL gen RSA-out ca . key 1024

(我們這裏不用des3加密。可以添加壹個-des3參數加密,詳情請參考man genrsa)

OpenSSL req-new-x509-days 36500-key ca . key-out ca . CRT

(這壹步需要在提示處輸入很多信息,包括國家代碼、省份、城市、公司名稱等。)

生成服務器端私鑰:

OpenSSL gen RSA-out server . key 1024

在服務器端生成req文件(這壹步生成的req文件包含公鑰證書,加上身份信息,如國家、省、公司等。提交給ca,讓ca簽名):

OpenSSL req-新密鑰服務器

用CA的私鑰對服務器的req文件進行簽名,得到服務器的證書:

OpenSSL x509-req-days 3650-in server . CSR-CA CA . CRT-CAkey CA . key-cacreate serial-out server . CRT

(註意:如果第壹次使用openssl,報告找不到某些相關文件,可能需要先執行兩個命令:touch /etc/pki/CA/index.txt和echo ' 01 ' >/etc/PKI/CA/serial)

上面得到的server.crt就是服務器的證書文件。(有很多軟件需要不同的證書存儲格式,可能需要各種轉換。比如PEM,P12等。,我們還需要在我們的場景中進行壹點點轉換,這將在下面描述。剛開始做這個的同學可能會覺得證書和格式很混亂。這時候妳能做的就是靜下心來,耐心了解TLS,RSA等的原理。,多看看openssl的man文檔。

我不知道把ca.crt稱為ca的證書文件是否合適,但是可以肯定的是,客戶端可以通過使用ca.crt來驗證服務器的身份,服務器在SSL/TLS握手過程中會頒發自己的證書,這個證書是CA簽名的。ca在簽名時使用自己的私鑰,而ca.crt包含CA的公鑰,可以用來檢查這個簽名,確認是否是自己簽名的。

服務器需要使用的文件有:服務器私鑰和服務器證書。

客戶端需要使用的文件是:ca文件(CA證書,用於驗證服務器頒發的證書)。

我們的服務器使用java,使用p12(PKCS12)格式的證書。Openssl可用於格式轉換:

OpenSSL pkcs 12-export-clcerts-in server . CRT-in key server . key-out server . p 12

可以看到輸出server.p12應該包含server.key和server.crt的內容。

我們的C語言客戶端直接使用CA文件:ca.crt .

我們還用java寫了客戶端,java使用CA文件格式為jks。那麽可能需要壹個轉換,這裏用到了java的bin目錄下的keytool:

keytool-import cert-alias CA-file CA . CRT-keystore CA . jks

轉換需要密碼。這樣,ca.crt就轉換成了ca.jks格式。

下面附上socket服務器和java客戶端的部分代碼。c的就不貼了,用matrixssl。

Java服務器(mina)代碼片段:

string file = "/file/path/server . p 12 ";

string key type = " pkcs 12 ";char[] password = "passwd "。toCharArray();

KeyStore ks = KeyStore . getinstance(key type);

ks.load(新文件輸入流(文件),密碼);

KeyManagerFactory kmf = KeyManagerFactory . getinstance(

key manager factory . get default algorithm());

kmf.init(ks,密碼);

SSL context CTX = SSL context . getinstance(" TLS ");

CTX . init(kmf . getkey manager()、null、null);

SslFilter sslFilter =新SSL filter(CTX);只要把這個過濾器加到米娜的aeptor上。

aeptor.getFilterChain()。addLast("ssl ",new SSL filter(createsl context()));

Java客戶端(mina)代碼片段:truststringfile = "/data/tmp/ca . jks ";

String keyType = " jkschar[] password = "123456 "。toCharArray();

KeyStore ks = KeyStore . getinstance(key type);

ks.load(新文件輸入流(文件),密碼);

信任管理工廠tmf =信任管理工廠

。getInstance(trustmanagerfactory . getdefaultalgorithm());

tmf . init(ks);

SSL context SSL context = SSL context . getinstance(" TLS ");

sslContext.init(null,tmf.getTrustManagers(),null);

SslFilter sslFilter =新SSL filter(SSL context);

SSL filter . setuseclientmode(true);服務器是addLast,但這是addFirst。這個順序不會錯。

connector.getFilterChain()。addFirst("sslFilter ",SSL filter);

自己生成的ssl證書和購買的ssl證書有什麽區別?1.自生成的ssl證書是未經驗證的非法SSL證書。購買的SSL證書是WoSign CA等CA機構頒發的SSL證書,CA機構必須通過國際webtrust認證和電子發行法。

2.瀏覽器不信任自己生成的SSL證書,會阻止訪問;購買的SSL證書被瀏覽器信任,顯示綠色安全鎖;

3.自生成的SSL證書容易被偽造和假冒,容易被中間人攻擊,不安全。購買的SSL證書更加安全可信。

例如:

自生成的SSL證書,就像自制的身份證壹樣,沒有任何人認可,沒有機構的認可,無法通過。

購買的SSL證書,就像公安局頒發的身份證壹樣,全球認可,購物、刷卡、住宿都順利通過。如果妳違反紀律,公安局可以找到妳的身份證吊銷或標記。

  • 上一篇:數學對於編程有多重要
  • 下一篇:雕刻機沒對刀塊怎麽對刀
  • copyright 2024編程學習大全網