[原]SSL 開發簡述(Delphi)

來源:互聯網
上載者:User
一、            簡介

現在網上有關SSL的資料較多的是基於VC開發,Delphi的SSL開發資源很少。

本文主要使用OpenSSL為基礎,講述SSL的有關開發流程。OpenSSL功能非常豐富,具體可以去她的官方網看看。可惜沒有中文說明。

OpenSSL:http://www.openssl.org/

一.1、           SSL協議是什麼

SSL 是一個縮寫,代表的是 Secure Sockets Layer。它是支援在 Internet 上進行安全通訊的標準,並且將資料密碼術整合到了協議之中。資料在離開您的電腦之前就已經被加密,然後只有到達它預定的目標後才被解密。認證和密碼學演算法支援了這一切的運轉,使用 OpenSSL,您將有機會切身體會它們。

理論上,如果加密的資料在到達目標之前被截取或竊聽,那些資料是不可能被破解的。不過,由於電腦的變化一年比一年快,而且密碼翻譯方法有了新的發展,因此,SSL 中使用的加密協議被破解的可能性也在增大。

可以將 SSL 和安全連線用於 Internet 上任何類型的協議,不管是 HTTP、POP3,還是 FTP。還可以用 SSL 來保護 Telnet 會話。雖然可以用 SSL 保護任何串連,但是不必對每一類串連都使用 SSL。如果串連傳輸敏感資訊,則應使用 SSL。

一.2、           什麼是 OpenSSL?

OpenSSL 不僅僅是 SSL。它可以實現訊息摘要、檔案的加密和解密、數位憑證、數位簽章和隨機數字。關於 OpenSSL 庫的內容非常多,遠不是一篇文章可以容納的。

OpenSSL 不只是 API,它還是一個命令列工具。命令列工具可以完成與 API 同樣的工作,而且更進一步,可以測試 SSL 伺服器和客戶機。它還讓開發人員對 OpenSSL 的能力有一個認識。

二、            CA概念描述

CA是認證的簽發機構,它是PKI的核心。CA是負責簽發認證、認證認證、管理已頒發認證的機關。它要制定政策和具體步驟來驗證、識別使用者身份,並對使用者認證進行簽名,以確保認證持有人的身份和公開金鑰的擁有權。

CA 也擁有一個認證(內含公開金鑰)和私密金鑰。網上的公眾使用者通過驗證 CA 的簽字從而信任 CA ,任何人都可以得到 CA 的認證(含公開金鑰),用以驗證它所簽發的認證。

如果使用者想得到一份屬於自己的認證,他應先向 CA 提出申請。在 CA 判明申請者的身份後,便為他分配一個公開金鑰,並且 CA 將該公開金鑰與申請者的身份資訊綁在一起,並為之簽字後,便形成認證發給申請者。

如果一個使用者想鑒別另一個認證的真偽,他就用 CA 的公開金鑰對那個認證上的簽字進行驗證,一旦驗證通過,該認證就被認為是有效。

二.1、           認證

認證實際是由認證簽證機關(CA)簽發的對使用者的公開金鑰的認證。

認證的內容包括:電子簽證機關的資訊、公開金鑰使用者資訊、公開金鑰、權威機構的簽字和有效期間等等。目前,認證的格式和驗證方法普遍遵循X。509 國際標準。

如何在電子文檔上實現簽名的目的呢?我們可以使用數位簽章。RSA公開金鑰體制可實現對數字資訊的數位簽章,方法如下:

資訊寄件者用其私密金鑰對從所傳報文中提取出的特徵資料(或稱數位指紋)進行RSA演算法操作,以保證發信人無法抵賴曾發過該資訊(即不可抵賴性),同時也確保資訊報文在傳遞過程中未被篡改(即完整性)。當資訊接收者收到報文後,就可以用寄件者的公開金鑰對數位簽章進行驗證。

在數位簽章中有重要作用的數位指紋是通過一類特殊的散列函數(HASH函數) 產生的。對這些HASH函數的特殊要求是:

1.接受的輸入報文資料沒有長度限制;

2.對任何輸入報文資料產生固定長度的摘要(數位指紋)輸出;

3.從報文能方便地算出摘要;

4.難以對指定的摘要產生一個報文,而由該報文可以算出該指定的摘要;

5.難以產生兩個不同的報文具有相同的摘要。

驗證:

收方在收到資訊後用如下的步驟驗證您的簽名:

1.使用自己的私密金鑰將資訊轉為明文;

2.使用發信方的公開金鑰從數位簽章部分得到原摘要;

3.收方對您所發送的源資訊進行hash運算,也產生一個摘要;

4.收方比較兩個摘要,如果兩者相同,則可以證明資訊簽名者的身份。

如果兩摘要內容不符,會說明什麼原因呢?

可能對摘要進行簽名所用的私密金鑰不是簽名者的私密金鑰,這就表明資訊的簽名者不可信;也可能收到的資訊根本就不是簽名者發送的資訊,資訊在傳輸過程中已經遭到破壞或篡改。

二.2、           數位憑證

數位憑證為實現雙方安全通訊提供了電子認證。在網際網路、公司內部網或外部網中,使用數位憑證實現身份識別和電子資訊加密。數位憑證中含有金鑰組(公開金鑰和私密金鑰)所有者的識別資訊,通過驗證識別資訊的真偽實現對認證持有人身份的認證。

二.3、           使用數位憑證能做什麼?

數位憑證在使用者公開金鑰後附加了使用者資訊及CA的簽名。公開金鑰是金鑰組的一部分,另一部分是私密金鑰。公開金鑰公之於眾,誰都可以使用。私密金鑰只有自己知道。由公開金鑰加密的資訊只能由與之相對應的私密金鑰解密。為確保只有某個人才能閱讀自己的信件,寄件者要用收件者的公開金鑰加密信件;收件者便可用自己的私密金鑰解密信件。同樣,為證實寄件者的身份,寄件者要用自己的私密金鑰對信件進行簽名;收件者可使用寄件者的公開金鑰對簽名進行驗證,以確認寄件者的身份。

線上交易中您可使用數位憑證驗證對方身份。用數位憑證加密資訊,可以確保只有接收者才能解密、閱讀原文,資訊在傳遞過程中的保密性和完整性。有了數位憑證網上安全才得以實現,電子郵件、線上交易和信用卡購物的安全才能得到保證。

二.4、           認證、數位憑證和PKI解決的幾個問題

l         保密性 - 只有收件者才能閱讀資訊。

l         認證性 - 確認資訊寄件者的身份。

l         完整性 - 資訊在傳遞過程中不會被篡改。

l         不可抵賴性 - 寄件者不能否認已發送的資訊。

三、            搭建SSL工作流程

(搭建OpenSSL)

(根憑證擷取方法圖)

四、            開發四.1、           編譯OpenSSL四.1.1、    搭建準備工作

1、 OpenSSL原始碼,可以直接到官網下載最新代碼。

2、 標準C編譯器(可以用VC,這裡使用的是VC),編譯動態庫。

3、 Perl5編譯環境,OpenSSL編譯需要Perl環境。官網有的下。

四.1.2、    編譯動態庫

OpenSSL原始碼庫路徑: c:"opensslsource

1、 進入VC命令列編譯環境

2、 進入OpenSSL原始碼目錄: cd c:"opensslsource

3、 執行configure: perl Configure VC-WIN32 --prefix=c:/openssl

4、 建立Makefile檔案: ms"do_ms

5、 編譯動態庫:nmake –f ms"ntdll.mak

6、 測試動態庫:nmake –f ms"ntdll.mak test

7、 安裝動態庫:nmake –f ms"ntdll.mak install

8、 清除零時檔案,以後便於重新編譯: nmake –f ms"ntdll.mak clean

說明:要產生VC的靜態庫只要編譯 ms"nt.mak 的make檔案。

四.2、           產生認證

由於OpenSSL的命令繁多,這裡不詳細說明。具體可以看:BBS水木清華站(FriNov1020:24:102000) fordesign@21cn.com翻譯的內容。已經整理成文檔放在目錄中。

四.2.1、    產生伺服器端的私密金鑰(key檔案)

openssl genrsa -des3 -out server。key 1024

運行時會提示輸入密碼,此密碼用於加密key檔案(參數des3便是指密碼編譯演算法,當然也可以選用其他你認為安全的演算法。),以後每當需讀取此檔案(通過openssl提供的命令或API)都需輸入口令。如果覺得不方便,也可以去除這個口令,但一定要採取其他的保護措施!

去除key檔案口令的命令:

openssl rsa -in server.key -out server.key

四.2.2、    產生認證請求

openssl req -new -key server.key -out server.csr -config openssl.cnf

產生Certificate Signing Request(CSR),產生的csr檔案交給CA簽名後形成服務端自己的認證。螢幕上將有提示,依照其指示一步一步輸入要求的個人資訊即可。

四.2.3、    產生客戶key及csr檔案

openssl genrsa -des3 -out client.key 1024

openssl req -new -key client.key -out client.csr -config openssl.cnf

四.2.4、    CA認證簽證

CSR檔案必須有CA的簽名才可形成認證,可將此檔案發送到verisign等地方由它驗證。CA驗證需要服務費,做測試使用可以自己產生。

openssl req -new -x509 -keyout ca.key -out ca.crt -config openssl.cnf

四.2.5、    產生簽證檔案

用產生的CA的認證為剛才產生的server。csr,client。csr檔案簽名:

Openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf

Openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -config openssl.cnf

四.2.6、    合成pem檔案

Pem檔案是 X.509 PAM 編碼(Base64)檔案,是個文字檔。可以使用x.509命令進行合成,或直接拷貝粘貼。

上面產生的server檔案和client檔案合并成2個pem檔案。

server使用的檔案有:ca.crt,server.crt,server.key

client使用的檔案有:ca.crt,client.crt,client.key

把 .crt檔案和.key檔案合并到同一個檔案.pem檔案。

四.3、           Delphi接入

上面產生OpenSSL動態庫我們現行可以直接載入使用。另外Indy組件封裝了OpenSSL的功能模組,可以引用uIdSSLOpenSSLHeaders.pas單元文進行開發。

直接載入動態庫開發比較煩瑣,所以我們直接適用Indy提供的單元開發。Indy單元檔案實現的版本比較老,因此新DLL載入會發生錯誤。在網上找到一個支援 0.9.7i OpenSSL較新動態庫的Indy單元檔案。

具體的開發應用可以看Source中的代碼。

四.3.1、    伺服器端調用流程四.3.2、    客戶段調用流程

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.