[英]How to use public key OpenPGP(GPG) without access to physical key ring in Java
設定:
問題:
我已經使用Bouncycastle成功地執行了加密和解密。 但是,這涉及嘗試從發布和secsec文件中讀取公鑰和私鑰。 為了安全起見,我寧願不讓Java應用程序直接訪問密鑰集文件。
我有什么選擇。 在Bouncycastle中,是否有任何選項可以執行此操作而無需讀取密鑰環或將密鑰導出到單獨的文件中 ?
注意:不需要使用Bouncy城堡。
您的Java應用程序可以使用執行該應用程序的用戶當前擁有的特權來調用gnupg。 幸運的是,gnupg支持大量命令行選項 ,這些選項可讓您提供所有必要的參數並讀取/收集回狀態和結果,例如-batch
, -options
或-status-fd
。 您可以使用Java的ProcessBuilder或更高級別的庫(例如Plexus Utils)從Java調用程序並讀取其結果。
另一方面,至少有一個基於Java的包裝器庫 ,可直接與GnuPG可執行文件通信。 盡管依賴於平台,但與為每個事務生成一個流程相比,這可能具有速度優勢。 並且可能會節省您大量的執行工作,以找出命令行選項。
請注意,以這種方式使用GnuPG會完全繞過BouncyCastle -您將自動執行對GnuPG的調用,有效地將其用作“庫”。
BouncyCastle需要直接訪問密鑰文件,包括公鑰和私鑰。
如果要阻止Java應用程序訪問密鑰文件,但仍將其用於加密和解密,則可以成功使用GnuPG 2.1,該協議將所有需要訪問私鑰環的操作分擔給gpg-agent
。 可能有效的設置如下所示:
gpg-agent
gpg-agent
套接字,但不能訪問私鑰文件 在Linux中,您可能考慮對套接字和密鑰環文件使用chroot
或適當的權限。 在Windows中,可能會有類似沙盒解決方案的東西。
類似於小巧的gpg-agent
,您可以編寫自己的守護程序來處理所有秘密密鑰操作,而不必同時公開密鑰(因此,您有一個小的守護程序,發生重大錯誤的可能性要低得多;而大型的,可能不安全且公開的主應用程序可以將加密/解密請求發送到“代理”應用程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.