2014-10-08 64 views
7

在shell腳本中我想驗證公共RSA文件。 我想要做的是找到一種方法來檢查這個文件是一個真正的公鑰文件,沒有別的。如何檢查公共RSA密鑰文件

我可以問問這裏的專家有什麼方法可以驗證這個輸入文件來檢查這是一個真正的公鑰文件,而不是一個普通的文件。

我將在未來使用此公鑰文件來驗證傳入的加密gzip文件,但現在已超出範圍。

所有我想驗證輸入文件來檢查其真正的RSA公鑰文件不是一個普通的文件。請注意,我沒有任何其他文件與我(例如:私鑰)。

例如:如果文件是‘public.pem’我只想檢查它是一個真正的RSA公鑰文件,而不僅僅是一個文本文件或文件沒有損壞。 我已經檢查該文件不是零大小和md5。

其他可能的檢查,我發現 檢查文件得到了文本‘BEGIN PUBLIC KEY’‘END PUBLIC KEY’ 在谷歌也發現了這個命令,是否有更好的方法來做到這一點使用OpenSSL的

‘openssl rsa -noout -text -inform PEM -in pubkey.pem -pubin’ 

感謝

+0

openssl rsa -inform PEM -pubin -in pubkey.pem -noout &> /dev/null if [ $? != 0 ] ; then echo "this was definitely not a RSA public key in PEM format" exit 1 fi 

只是爲了檢查任何公鑰這個。簡單地檢查開始/結束分隔符是毫無意義的。我可以用'BEGIN PUBLIC KEY heeheeheethisisnotvalidrsa END PUBLIC KEY'給你一個文件,你的「驗證者」會接受。 – 2014-10-08 14:31:23

+0

這就是爲什麼我想知道一個更好的方法來評估這個公共rsa文件,請注意這是一個遠程服務器的公共RSA文件。 – csf 2014-10-08 14:35:17

+1

使用這個調試https://8gwifi.org/certsverify.jsp – anish 2018-01-20 05:23:48

回答

15

這是可能的使用任何公共密鑰格式解析器,包括openssl甚至自己解析密鑰,因爲格式不是那麼困難。

命令行工具設定一個非零退出代碼,解析失敗時:使用OpenSSL的可能是你想要做的唯一途徑

openssl pkey -inform PEM -pubin -in pubkey.pem -noout &> /dev/null 
if [ $? != 0 ] ; then 
    echo "this was definitely not a public key in PEM format" 
    exit 1 
fi 
+0

假設你的意思是Java(JRE)keytool,它不能讀取公鑰。認證是,然後應用程序可以從cert獲得'.getPublicKey()',但publickey直接不可以。 OTOH應用程序可以直接讀取DER中的通用(PKCS#8)公鑰,但base64不需要像BouncyCastle那樣的插件。另外,在'openssl'命令行中'-inform PEM'是默認的,可以省略,輸出選項'-text -noout'在放棄輸出時可以省略;或者使用'-noout'並且沒有其他的輸出選項不需要丟棄。 – 2014-10-09 22:06:10

+0

是的,它看起來像keytool不能這樣做。 base64受'base64'工具支持,例如'javax.xml.bind.DataTypeConverter'類支持Java。我喜歡對格式和其他內容進行明確的說明,在跳過格式方面也沒有太多的收穫。你是正確的,'-noout'和'-text'沒有任何意義,但輸出仍然不得不放棄,因爲即使使用'-noout'選項也可能報告錯誤消息。 – divanov 2014-10-14 10:47:39

+0

你是對的我忘記了javax.xml,當我第一次遇到這個問題時,javax.xml不在那裏。雖然你實際上需要base64和BEGIN/END處理,這是幾行。 '-noout -text'確實有意義*一起*(輸出不帶編碼證書的人類可讀顯示器),以及類似的組合,例如'-noout -subject -enddate';當stdout被丟棄時,他們沒有任何區別。關於丟棄錯誤信息也是正確的。我很習慣他們,我幾乎沒有注意到,但其他人會。 – 2014-10-15 08:51:34