將密碼傳遞給 OpenSSL 的更安全方法是什麼?

將密碼傳遞給 OpenSSL 的更安全方法是什麼?

對於 OpenSSL,bash 中有兩種使用環境變數作為密碼的方法:
pass:"${var}"env:var

我想知道哪種方法提供了最大的安全性,因為手冊頁使得它看起來ps可以在作為 傳遞時讀取密碼pass:"${var}",並且也可以使用env:var.

OpenSSL 手冊頁的相關部分:

傳遞短語參數

有幾個命令接受密碼參數,通常分別使用 -passin 和 -passout 作為輸入和輸出密碼。這些允許從各種來源獲取密碼。這兩個選項都採用單一參數,其格式如下所述。如果沒有給予密碼參數且需要密碼,則系統會提示使用者輸入密碼:通常會在關閉回顯的情況下從目前終端讀取該密碼。

密碼:密碼

實際密碼是密碼。由於密碼對實用程式(如 Unix 下的「ps」)可見,因此僅應在安全性不重要的情況下使用此形式。

環境:變數

從環境變數var取得密碼。由於其他進程的環境在某些平台上是可見的(例如某些 Unix 作業系統下的 ps),因此應謹慎使用此選項。

答案1

手冊頁對此事非常明確,您應該使用環境:變數方法。

手冊頁是正確的,所有命令列參數都可以透過 ps 看到全部用戶在系統上。

alice$ openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:16384 -aes-128-cbc -pass pass:123456
evil$ ps aux|grep openssl                                                                                                                               
alice      17594  115  0.0  17108  4424 pts/6    R+   11:02   0:03 openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:16384 -aes-128-cbc -pass pass:123456

如果您使用環境變量,其他使用者(root 除外)將只能看到該變數的名稱,而看不到其內容。

alice$ OPENSSLPW=123456
alice$ openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:16384 -aes-128-cbc -pass env:OPENSSLPW
evil$ ps aux|grep openssl                                                                                                                               
alice      17713  115  0.0  17108  4424 pts/6    R+   11:02   0:03 openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:16384 -aes-128-cbc -pass env:OPENSSLPW

相關內容