2014-10-08 27 views
7

All'interno di uno script di shell voglio verificare il file RSA pubblico. Tutto quello che voglio fare è trovare un modo per verificare che questo file sia un vero file di chiave pubblica, nient'altro.Come controllare un file di chiavi RSA pubblico

Posso chiedere agli esperti qui quali sono i modi in cui posso verificare questo file di input per verificare che questo sia un vero file di chiave pubblica, non un file normale.

Utilizzerò questo file di chiave pubblica in futuro per convalidare un file gzip di crittografia in entrata, ma per ora non è più disponibile.

Tutto quello che voglio è convalidare il file di input per verificare il suo file di chiave pubblica RSA reale non un file ordinario. Si prega di notare che non ho altri file con me (ad esempio: chiave privata).

ad esempio: se il file è ‘public.pem’, voglio solo controllare che sia un vero file di chiave pubblica RSA, non solo un file con testi o file non sia corrotto. Sto già verificando che il file non sia di dimensioni zero e md5.

altri controlli possibili ho trovato file di controllo ha di testo ‘BEGIN PUBLIC KEY’ e ‘END PUBLIC KEY’ Trovato anche questo comando in google, c'è un modo migliore per fare questo usando OpenSSL

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

Grazie

+0

usando OpenSSL è probabilmente l'unico modo in cui si vuole fare Questo. il semplice controllo dei delimitatori di inizio/fine è inutile. Potrei mandarti un file con 'BEGIN PUBLIC KEY heeheeheethisisnotvalidrsa END PUBLIC KEY' e il tuo" verificatore "lo accetterebbe. –

+0

esattamente questo è il motivo per cui mi piacerebbe sapere un modo migliore per validare questo file rsa pubblico, si noti che questo è un file RSA pubblico di un server remoto. – csf

+1

usa questo per il debug di https://8gwifi.org/certsverify.jsp – anish

risposta

15

E 'possibile utilizzare qualsiasi parser di formato di chiave pubblica, incluso openssl o persino analizzare la chiave, in quanto il formato non è così difficile.

strumenti a linea di comando impostare un codice di uscita diverso da zero, durante l'analisi fallisce:

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 

solo per controllare qualsiasi chiave pubblica:

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

Supponendo che tu intenda keytool Java (JRE), che non può leggere una chiave pubblica. Un certificato sì, e un'app può quindi '.getPublicKey()' dal certificato, ma publickey direttamente no. OTOH un'app può leggere direttamente un pubkey generico (PKCS # 8) in DER, ma base64 meno facilmente senza un addon come BouncyCastle. Per inciso, su 'openssl' commandline' -inform PEM' è l'impostazione predefinita e può essere omessa, e le opzioni di output '-text -noout' possono essere omesse quando stai scartando comunque l'output; o con '-noout' e nessun'altra opzione di uscita che non è necessario scartare. –

+0

Sì, sembra che keytool non possa farlo. base64 è supportato sia dall'utility 'base64', per esempio, sia in Java dalla classe' javax.xml.bind.DataTypeConverter'. Mi piace essere esplicito riguardo ai formati e ad altre cose, non c'è molto guadagno neanche nel saltare il formato. Hai ragione che '-noout' e' -text' non hanno senso insieme, ma l'output deve ancora essere scartato, perché ci sono possibili messaggi di errore riportati anche con l'opzione '-noout'. – divanov

+0

Hai ragione Ho dimenticato javax.xml, che non era lì quando ho incontrato per la prima volta questo problema. Anche se in realtà hai bisogno sia di base64 sia della gestione BEGIN/END, che è qualche riga in più. '-noout -text' ha senso * insieme * (per emettere la visualizzazione leggibile dall'uomo senza il cert codificato) e così fa combinazioni simili come' -noout -subject -enddate'; semplicemente non fanno alcuna differenza quando lo stdout viene scartato.Hai anche ragione a scartare i messaggi di errore; Sono così abituato a loro che a malapena noto, ma altri lo faranno. –