스크립트에서 명령이 실패합니까?

스크립트에서 명령이 실패합니까?

OpenSSL 명령을 스크립트하려고 합니다 ec. 이 스크립트는 다른 라이브러리에서 생성된 키 컬렉션의 유효성을 검사하는 데 사용됩니다. 질문 뒤에 스크립트가 아래에 표시됩니다.

다음은 터미널에서 작동합니다.

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를 재부팅한 이후에는 문제가 재현되지 않습니다. 따라서 이 경우의 대답은 재부팅인 것 같습니다. 한숨을 쉬다...

문제를 재현할 수 없으므로 질문을 종료하겠습니다.

관련 정보