web-dev-qa-db-ja.com

RSA公開鍵ファイルを確認する方法

シェルスクリプト内で、パブリックRSAファイルを確認します。私がやりたいのは、このファイルをチェックする方法を見つけることが本物の公開鍵ファイルであるということだけです。

ここで専門家にこの入力ファイルを検証する方法を尋ねて、これが通常のファイルではなく、本物の公開キーファイルであることを確認できますか。

今後、この公開鍵ファイルを使用して着信暗号化gzipファイルを検証しますが、現時点では範囲外です。

入力ファイルを検証して、通常のファイルではなく、本物のRSA公開キーファイルを確認するだけです。他のファイル(プライベートキーなど)は持っていないことに注意してください。

例:ファイルが‘public.pem’の場合、テキストを含むファイルやファイルが破損していないだけでなく、本物のRSA公開キーファイルであることを内部で確認したいだけです。ファイルのサイズがゼロでmd5でないことを既に確認しています。

私が見つけた他の可能なチェックチェックファイルはテキスト‘BEGIN PUBLIC KEY’および‘END PUBLIC KEY’を取得しましたGoogleでもこのコマンドを見つけました。opensslを使用してこれを行うより良い方法はありますか

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

ありがとう

10
csf

opensslを含む公開キー形式のパーサーを使用することも、形式がそれほど難しくないので自分でキーを解析することもできます。

解析が失敗すると、コマンドラインツールはゼロ以外の終了コードを設定します。

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

公開鍵を確認するだけです:

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
21
divanov

次のスクリプトは、OpenSSLでサポートされているすべてのPEM形式のキーと証明書で機能するはずです。一致する証明書と一致しない証明書を使用して、さまざまな有効および無効なECDSAおよびRSAキーでテストしました。

これをverify-cert-keyとして保存します。

#!/usr/bin/env bash
certFile="${1}"
keyFile="${2}"
certPubKey="$(openssl x509 -noout -pubkey -in "${certFile}")"
keyPubKey="$(openssl pkey -pubout -in "${keyFile}")"
if [[ "${certPubKey}" == "${keyPubKey}" ]]
then
  echo "PASS: key and cert match"
else
  echo "FAIL: key and cert DO NOT match"
fi

実行可能にする:

chmod +x verify-cert-key

証明書とキーで実行します:

./verify-cert-key server-crt.pem server-key.pem
2
Alain O'Dea