소포의 서명을 확인하려고 합니다.FreeBSD 패키지 웹사이트
wget http://pkg.freebsd.org/FreeBSD:11:amd64/latest/digests.txz
tar xf digests.txz
이것은 세 개의 파일을 제공합니다: digests
, digests.pub
digests.sig
나는 digests.sig
공개 키로서 파일의 서명이라고 가정합니다. 하지만 확인하려고 합니다.digests
digests.pub
openssl dgst -verify digests.pub -signature digests.sig digests
그리고 메시지를 받았다
Verification Failure
나에게 뭔가 문제가 있는 것 같아요. 내가 무엇을 놓치고 있는지 말해 줄 수 있는 사람이 있나요?
편집: 소스 코드 검색을 바탕으로생각하다중요한 기능을 찾을 수 있습니다여기, rsa_verify_cert_cb
openssl 라이브러리에서 호출됩니다. RSA_verify
하지만 여기에 무엇을 넣을지, openssl
명령줄 도구를 사용하여 함수를 호출할 수 있는지는 알 수 없습니다.
답변1
FreeBSD 패키지를 수동으로 검증하는 "방법"이 인터넷에 없기 때문에 이것이 제가 아는 것입니다.
비결은 출력의 옥텟 문자열이 openssl rsautl
실제로는문자열의 해시 값, 즉 SHA256 해시 값파일의.
예를 들어 current 를 다운로드하고 http://pkg.freebsd.org/FreeBSD:12:amd64/latest/digests.txz
압축을 푼 후 다음을 수행합니다.
방법 1(한 줄에 사용 openssl dgst
)
여기서 중요한 것은 tr -d '\n'
표준 입력에서 개행 문자를 제거하여 문자열 입력에 포함되지 않도록 하는 것입니다 openssl dgst
.
sha256 -q digests | tr -d '\n' | openssl dgst -verify digests.pub -signature digests.sig
명령은 Verified OK
.
방법 2(수동으로 생성된 해시와 .sig 파일의 옥텟 문자열을 시각적으로 비교)
OpenSSL 유틸리티를 사용하여 Digests.sig의 콘텐츠를 덤프합니다.
openssl rsautl -pubin -inkey digests.pub -verify -in digests.sig -asn1parse 0:d=0 hl=2 l= 49 cons: SEQUENCE 2:d=1 hl=2 l= 13 cons: SEQUENCE 4:d=2 hl=2 l= 9 prim: OBJECT :sha256 15:d=2 hl=2 l= 0 prim: NULL 17:d=1 hl=2 l= 32 prim: OCTET STRING 0000 - ac c6 ac be cd 5e 61 63-62 82 62 4b ba 77 37 6e .....^acb.bK.w7n 0010 - 0b fa ea ef 6e 10 21 01-62 64 06 2f d0 f1 60 22 ....n.!.bd./..`"
여기서는 포함된 개체가 SHA256 해시이고 해당 값이 임을 확인할 수 있습니다
acc6acbecd5e61636282624bba77376e0bfaeaef6e1021016264062fd0f16022
.이제 파일의 SHA256을 계산합니다
digests
.sha256 -q digests 8db18c93bea414fd8a281f5f3795b2ca4be51479c18b225ff87b8aa957ec2c5d
- 마지막으로
echo
명령을 사용하여 문자열의 SHA256을 계산하고 이를 반환된 값과 비교합니다openssl rsautl
.echo -n 8db18c93bea414fd8a281f5f3795b2ca4be51479c18b225ff87b8aa957ec2c5d | sha256 acc6acbecd5e61636282624bba77376e0bfaeaef6e1021016264062fd0f16022
3단계의 값이 1단계의 값과 어떻게 일치하는지 확인하여 파일이 digests
유효합니다.
답변2
이 메시지는 공개 키가 다운로드한 파일과 일치하지 않음을 나타냅니다. dgst 맨페이지에 따르면-verify filename "filename"의 공개 키를 사용하여 서명을 확인합니다. 출력은 "확인 성공" 또는 "확인 실패"입니다.가장 가능성이 높은 원인은 다운로드 프로세스 중에 파일이 손상되었기 때문입니다. 다시 다운로드해 보았는데 여전히 검사에 실패하면 다운로드 링크가 끊어진 것입니다(그러나 freebsd 사이트에서 가져온 것이므로 다운로드 오류일 뿐이라고 생각합니다. 그럼에도 불구하고 새 링크를 확인하겠습니다. 안전을 위해 하나를 다운로드하세요. 인터넷 연결이 느리거나 불안정한 경우 올바르게 다운로드하려면 몇 번의 시도가 필요할 수 있습니다. 명령에 대한 정보를 확인해야 하는 경우 항상 맨페이지(man)를 확인하는 것이 좋습니다.