スクリプトでコマンドが失敗しますか?

スクリプトでコマンドが失敗しますか?

OpenSSLecコマンドのスクリプトを作成しようとしています。このスクリプトは、別のライブラリによって生成されたキーのコレクションを検証するために使用されます。このスクリプトは、質問の後に以下に示されています。

ターミナルからは次のように動作します。

openssl ec -in ec-enc-priv-xxx.pem -passin pass:test -text -noout

ターミナルからは次のように動作します。

openssl ec -in ec-enc-priv-xxx.pem -passin pass:test -text -noout >/dev/null

ただし、最後のスクリプトを実行すると、パスワードの入力を求められます。

$ ./pem-verify.sh 
read RSA key
read RSA key
read RSA key
read DSA key
read DSA key
read DSA key
read EC key
read EC key
Enter PEM pass phrase:

同じコードは、スクリプト内の RSA キーと DSA キーに対して機能します。問題は、暗号化された EC 秘密キーにのみ発生します。

これを回避する方法はありますか?


#! /bin/sh

# Script to verify the test keys written by pem-test.cpp

#################
# RSA keys

# The RSA command returns 0 on success

openssl rsa -in rsa-pub-xxx.pem -pubin -text -noout >/dev/null
RET=$?
if [ $RET -ne 0 ];then
  echo "Failed to read RSA public key"
fi

openssl rsa -in rsa-priv-xxx.pem -text -noout >/dev/null
RET=$?
if [ $RET -ne 0 ];then
  echo "Failed to read RSA private key"
fi

openssl rsa -in rsa-enc-priv-xxx.pem -passin pass:test -text -noout >/dev/null
RET=$?
if [ $RET -ne 0 ];then
  echo "Failed to read encrypted RSA private key"
fi

#################
# DSA keys

# The DSA command is broken. It returns 1 when using '-noout' option
#  instead of 0. A patch was submitted to RT.

openssl dsa -in dsa-pub-xxx.pem -pubin -text -noout >/dev/null

openssl dsa -in dsa-priv-xxx.pem -text -noout >/dev/null

openssl dsa -in dsa-enc-priv-xxx.pem -passin pass:test -text -noout >/dev/null

#################
# EC keys

# The EC command returns 0 on success

openssl ec -in ec-pub-xxx.pem -pubin -text -noout >/dev/null
RET=$?
if [ $RET -ne 0 ];then
  echo "Failed to read EC public key"
fi

openssl ec -in ec-priv-xxx.pem -text -noout >/dev/null
RET=$?
if [ $RET -ne 0 ];then
  echo "Failed to read EC private key"
fi

openssl ec -in ec-enc-priv-xxx.pem -passin pass:test -text -noout >/dev/null
RET=$?
if [ $RET -ne 0 ];then
  echo "Failed to read encrypted EC private key"
fi

答え1

こういった種類の回答は大嫌いですが、MacBook Pro を再起動してからは問題を再現できません。したがって、この場合の答えは再起動のようです。ため息...

問題が再現できないため、質問をクローズします。

関連情報