2011-11-25 55 views
0

我想實現的是能夠發送簽名電子郵件,以便用戶的電子郵件客戶端顯示可信的郵件(例如,在Thunderbird中,有時這樣的電子郵件標有封閉的信封圖標)。使用PHP發送簽名電子郵件

我發現這是應該發送簽名郵件一PHPMailer的圖書館,但我認爲這只是包裝的openssl_pkcs7_sign PHP函數。我不確定什麼是以及如何獲取和使用函數參數的密鑰和證書。有參數:$ signcert和$ privkey。據我所知,$ signcert應該是公開的已知證書,用於驗證郵件是否已正確簽名。 $ privkey加上證書,應該保密,並用於簽署電子郵件。我到目前爲止是否正確?

我的問題是如何獲得正確的證書。我認爲OpenSSL允許我生成自己的證書,但是這樣的證書足夠滿足我的需求嗎?如果是,我該如何正確生成它們?我的意思是可能有不同長度的證書和其他可能很重要的選項,我不知道。順便說一下,我注意到「https」自簽名證書在瀏覽器中導致警告。郵件也會發生同樣的事情嗎?在那種情況下,我應該從可信任的證書中心購買證書。你能給我一個我應該考慮的中心的建議嗎?

+1

只是一個供參考 - 安全的電子郵件沒有得到普遍支持,不像HTTPS。這是因爲大部分郵件系統都不會自動支持它(例如,Outlook仍未啓用它)。作爲替代方案,您可能會查找類似[Hushmail](http://www.hushmail。com /),它提供中介系統來實現這一貫。但是,請考慮如果您將任何郵件發送到只能由該服務器解密(而不是用戶的個人證書)的服務器,則它本質上是不安全的。 –

回答

1

這裏[1]它被暗示證書用於簽名的郵件必須由證書頒發機構(這樣的電子郵件客戶端將不給予任何警告)發行。有些頒發免費證書的機構名單可以在這裏找到:[2]。我選擇的那個人將證書直接安裝到網絡瀏覽器上。所以要做更多的事情,它應該被導出。流行的格式是* .p12,它可以存儲公鑰和私鑰。但似乎使用PHP函數openssl_pkcs7_sign()並將它的參數指向具有兩個證書的文件不起作用 - OpenSSL返回錯誤的錯誤error:0906D06C:PEM routines:PEM_read_bio:no start line。分離密鑰後(使用OpenSSL)簽名工作正常。

順便說一下,即使PHPMailer應該能夠唱電子郵件,它的當前版本不起作用。郵件正在簽名,存儲在一個臨時文件中,文件被刪除,然後文件的內容被髮送(所以郵件爲空)。

[1] - http://kb.mozillazine.org/Message_security

[2] - http://kb.mozillazine.org/Getting_an_SMIME_certificate

2

我認爲OpenSSL允許我生成自己的證書,但這些證書足夠滿足我的需求嗎?

我們不知道你的需求是什麼。

證書本身無用於簽名消息。價值在於證書本身(可驗證)由發件人和收件人都可接受的第三方進行驗證。這個第三方是認證機構(例如Thawte,Verisign等),儘管在一個組織內它可能足以提供你自己的CA. OpenSSL文檔詳細解釋瞭如何創建您自己的CA證書,您可以使用它來簽署其他證書。

你還有很長的學習之旅在你前面,你就可以實現任何代碼之前 - 你可以做的不如先從OpenSSL的HOWTO和X509 cerificates HOWTO。

+0

想知道,你知道任何有助於解釋不同隱窩技術(最好是可視化)的好書嗎?我一直在努力提高自己的理解力,我只是沒有找到我要找的東西。 –