
OpenSSL의 서명 프로세스에서 .tsr 응답이 있습니다. openssl ts -reply
공장.
openssl ts -reply -in b1.tsr -text
Using configuration from g:/progs/openssl/ssl/openssl.cnf
Status info:
Status: Granted.
Status description: unspecified
Failure info: unspecified
TST info:
Version: 1
Policy OID: 1.3.6.1.4.1.6449.2.1.1
Hash Algorithm: sha256
Message data:
0000 - 10 20 96 d8 03 ec ed 6e-03 56 3d d6 d6 a7 14 50 . .....n.V=....P
0010 - b0 a7 53 a9 34 4e b9 57-f7 e2 83 13 5e 0d df e0 ..S.4N.W....^...
Serial number: 0xA7ADC6135D0A39500F7C3B0C41578D8C2CB62B87
Time stamp: Jun 22 10:59:44 2019 GMT
Accuracy: unspecified
Ordering: no
Nonce: 0xD4154ECA4E9A0D06
TSA: DirName:/C=GB/ST=Greater Manchester/L=Salford/O=Sectigo Limited/CN=Sectigo RSA Time Stamping Signer #1
Extensions:
openssl ts -verify
실패합니다.
openssl ts -verify -sha256 -digest "102096d803eced6e03563dd6d6a71450b0a753a9344eb957f7e283135e0ddfe0" -in b1.tsr -CAfile comodo.pem
Verification: FAILED
11928:error:2F06D064:time stamp routines:TS_VERIFY_CERT:certificate verify error:.\crypto\ts\ts_rsp_verify.c:264:Verify error:unable to get local issuer certificate
로컬 발급자 인증서에 대한 내용은 무엇입니까? "ts" 명령에서는 -noverify를 사용할 수 없습니다.
답변1
확인을 위해 openssl에 대한 전체 인증서 체인을 구축하려면 루트 인증서(스위치를 사용하여 지정한 인증서 -CAfile
)뿐만 아니라 TSResponse에 서명하는 데 사용된 인증서도 필요합니다.
맨 페이지에서 ts
:
-untrusted cert_file.pem
Set of additional untrusted certificates in PEM format which may be needed when building the certificate chain for the TSA's signing certificate. This
file must contain the TSA signing certificate and all intermediate CA certificates unless the response includes them. (Optional)
답변2
"로컬 발급자 인증서를 얻을 수 없습니다"라는 확인 오류는 OpenSSL이 로컬 신뢰 저장소에서 전체 체인의 루트(또는 앵커) 또는 루트/앵커일 수도 있고 아닐 수도 있는 불완전한 체인의 다음 링크를 찾을 수 없음을 의미합니다. .
배경으로 인증서 기반 검증을 얼마나 이해했는지 표시하지 않았으므로 ts -verify
기본적으로 네 부분으로 구성됩니다.
토큰 본문의 서명을 확인하여 (청구된) 서명자의 인증서에 있는 공개 키를 사용하고 RFC3161에 의해 부과된 일부 다른 제약 조건이 충족되는지 확인합니다(SignerInfo는 하나만 있어야 하며 ESSCertId를 포함하는 signedAttrs를 사용해야 함). 서명자의 인증서가 타임스탬프 응답에 포함되는지 여부는 RFC3161 요청의 플래그로 제어됩니다. 포함되지 않은 경우 검증자/신뢰자는 이를 이미 가지고 있거나 다른 방법으로 획득해야 합니다.
일반적으로 신뢰 저장소에 존재하여 로컬에서 신뢰할 수 있는 것으로 정의된 루트 또는 앵커 인증서라고 하는 CA 인증서로 표시되는 하나 이상의 신뢰할 수 있는 CA에 요청된 서명자의 인증서를 연결하는 체인(경로라고도 함)을 구축합니다. RFC3161 응답5월체인 인증서를 포함하지만 필수는 아닙니다. 그렇지 않다면 검증자/신뢰자는 이미 그것을 가지고 있거나 다른 수단으로 얻어야 합니다.
각 인증서의 서명이 다음 상위 인증서(즉, 상위 인증서)의 공개 키 아래에서 확인되는지, 각 인증서가 서명 시간을 기준으로 유효한지(유효하고 만료되지 않았는지), 그리고 각 인증서의 다른 여러 필드가 다음과 같은지 확인하여 체인을 검증합니다. 체인에서의 사용에 적합합니다. 자세한 내용은RFC5280 초 6. 확인~해야 한다체인의 각 인증서가 (서명 시점을 기준으로) 취소되지 않았는지 확인하는 것을 포함하지만 OpenSSL은 기본적으로 이 부분을 수행하지 않습니다. 해지 확인의 여러 변형을 수행할 수 있는 옵션이 여러 가지 있지만 여러분은 그 중 어떤 것도 사용하지 않았습니다.
마지막으로 인증서(체인)가 여기의 목적, 즉 타임스탬프에 적합한지 확인하세요. SSL/TLS 및 S/MIME과 같은 다른 인증서 사용 사례의 경우 일반적으로 인증서가 신뢰할 수 있는 CA의 권한 하에 합법적으로 발급되었는지뿐 아니라 발급되었는지도 확인해야 합니다.에게특정 엔터티(신뢰할 수 있는 식별이 가능한 웹사이트, 메일 서버 또는 사람). 그러나 타임스탬프에 대해서는 일반적으로 신경 쓰지 않습니다.어느TSA가 토큰을 발행했습니다.일부유효한 TSA가 수행했으므로 이 마지막 검사에서는 인증서/체인의 ExtendedKeyUsage에 timeStamping이 포함되어 있는지(표준화된 OID가 허용되는지)만 확인합니다.
종합적으로(그리고 함께만) 이것들은 우리가 가지고 있는 데이터가 실제로 유효한 TSA에서 발행한 타임스탬프 토큰이고 의도적이든 실수로든 위조되거나 변경되지 않았으므로 신뢰할 수 있음을 입증합니다.
OpenSSL 명령줄의 경우 루트/앵커는 지정된 -CAfile
및/또는 다음으로 구성된 사용된 신뢰 저장소에 있어야 합니다.-CApath
또는 기본 CAfile 및/또는 CApath(존재하는 경우)(두 경우 모두 PEM 형식)로 구성됩니다. (비록 매뉴얼 페이지는 명확하지 않지만) 응답 메시지에 없는 다른 체인 인증서는 반드시어느 하나신뢰 저장소 또는 제공된 파일 -untrusted
(단일 파일이어야 하지만 PEM 형식의 여러 인증서를 포함할 수 있음)에 있어야 합니다. 기본적으로 루트 인증서만(역사적으로는 루트만) 체인/경로 앵커로 허용되지만 -partial_chain
1.0.2 이후 옵션을 사용하면 신뢰 저장소의 루트가 아닌 앵커가 허용됩니다.
디스플레이 ts -reply -text
에는 CMS 수준, 특히 어떤 인증서가 제공되는지 표시되지 않습니다. 모든 것을 볼 수 있지만 asn1parse -inform der [-i]
직접 해독해야 합니다. 보다 편리하게 다음과 같이 서명된 토큰이라고도 하는 CMS SignedData 부분을 추출할 수 있습니다.내 대답은 여기그런 다음 다음과 같이 인증서를 검사합니다.
openssl ts -reply -in respfile -token_out -out tokenfile
openssl pkcs7 -inform der -in tokenfile -print_certs
# if desired/necessary, feed any or each of the PEM cert block(s)
# to openssl x509 -text -noout to get full details
저는 이 TSA에 대한 경험이 없지만 잘 알려진 공개 TSA의 인증서와 체인이 공개적으로 기록되어야 한다는 원칙에 따라 해당 주제가 있는 유일한 기록된 인증서는 crt.sh(Comodo-now에서도 실행됨)에 알려져 있습니다. -섹티고)는https://crt.sh/?id=1437463789알려진 부모가 하나 있는 것Sectigo RSA Time Stamping CA
https://crt.sh/?id=1437089092발급자는 누구입니까 USERTrust RSA Certification Authority
? CA에는 4개의 인증서(잠재적 상위)가 나열되어 있습니다.https://crt.sh/?caid=1167-- 그 중 하나는 타임스탬프가 Microsoft Authenticode 코드 서명용인 경우에만 일반적으로 사용되는 Microsoft 공동 서명이며, 다른 세 개는 모두 일반적인 사용에 적합하지만 Comodo라는 이름의 유일한 항목은 매우 최근 버전입니다(3개월 전에 발행됨). . FWIW id=1437089092의 AIA는 다음을 가리킵니다.http://crt.usertrust.com/USERTrustRSAAddTrustCA.crtAddTrust 루트의 인증서를 제공합니다.https://crt.sh/?id=4860286가장 오래된 것입니다(2000년에 발행되었으며 1년 이내에 만료됨).
메시지의 인증서를 사용하여 사용하려는 루트 또는 앵커에 필요한 추가 체인 및 앵커 인증서를 결정하고 와 -CAfile
함께 사용할 수 있는 다른 파일 또는 다른 파일 에 제공된 인증서와 비교하십시오 -untrusted
.