2012-10-08 34 views
15

Tôi có chứng chỉ C.pfx đã được giao cho tôi để làm việc với OpenSSL. Chứng chỉ C.pfx có đường dẫn Chứng nhận sau: C-> B-> AOpenSSL: không thể lấy chứng chỉ của tổ chức phát hành địa phương

Tôi đã chuyển đổi C.pfx thành PEM bằng lệnh sau: openssl pkcs12 -in C.pfx -out C.pem -nodes - - HOẠT ĐỘNG OK

Tôi đã mở chứng chỉ C.pem trong trình chỉnh sửa tệp và thấy rằng nó có cả hai phần PRAATE KEY và CERTIFICATE RSA.

Tôi cũng thấy cả chứng chỉ A và B được cài đặt trong kho lưu trữ Chứng nhận hành vi xác thực Roor đáng tin cậy trong Windows XP.

Mục đích là để ký tên, mã hóa, giải mã và xác minh một tập tin thử nghiệm sử dụng OpenSSL cho Windows phiên bản 1.0.1c (nó hiện là phiên bản mới nhất)

tôi sử dụng các lệnh sau:

--Để SIGN--

openssl smime -sign -signer C.pem -in test.txt -out test.tmp -- WORKS OK 

--Để ENCRYPT--

openssl smime -encrypt -in test.tmp -out test.enc C.pem  -- WORKS OK 

--Để giải mã -

openssl smime -decrypt -in test.enc -recip C.pem -inkey C.pem -out test1.tmp -- WORKS OK 

--Để VERIFY--

openssl smime -verify -in test1.tmp -CAfile "C.pem" -out notes1.txt -- FAILS 

tôi đã sử dụng MMC console để xuất khẩu B và A chứng chỉ CER tập tin và sau đó chuyển đổi chúng để PEM sử dụng OpenSSL. Sau đó tôi đã cố gắng sau 2:

openssl smime -verify -in test1.tmp -CAfile "A.pem" -out notes1.txt -- FAILS 

openssl smime -verify -in test1.tmp -CAfile "B.pem" -out notes1.txt -- FAILS 

Cả 3 nỗ lực để xác minh thất bại với các lỗi sau:

Verification failure 
3672:error:21075075:PKCS7 routines:PKCS7_verify:certificate verify error:.\crypt 
o\pkcs7\pk7_smime.c:342:Verify error:unable to get local issuer certificate 

Tôi đang làm gì sai?

Trả lời

18

Khi bạn sử dụng openssl smime verify các nỗ lực mở để xác minh rằng chứng chỉ được sử dụng đáng tin cậy bằng cách kiểm tra chữ ký của nó (đó là chữ ký trong chứng chỉ chứ không phải chữ ký trong thư đã ký mà bạn đã yêu cầu xác minh). Để làm điều đó, nó phải có một bản sao của chứng chỉ cho khóa của CA đã cấp chứng chỉ.

Thông số -CAfile được sử dụng để chuyển tên của tệp chứa chứng chỉ CA đó, KHÔNG phải chứng chỉ của khóa được sử dụng để ký thư. Bạn sẽ chỉ định chứng nhận của khóa được sử dụng để ký thông báo với thông số -certfile ... nhưng trong trường hợp của bạn, chứng chỉ sẽ ở trong tệp test.tmp (bạn có thể chặn bằng cách chỉ định -nocerts khi bạn ký thư).

Để ngăn chặn việc kiểm tra chứng chỉ khóa khi xác minh thư bạn có thể cung cấp thông số -noverify cho lệnh xác minh (mặc dù openssl smime verify -noverify trông hơi lạ).

+0

+1 cho 'openssl smime -verify -noverify' chỉ là những gì tôi cần! – PassKit

+2

@PassKit Mặc dù lệnh có vẻ tự mâu thuẫn nhất. –

Các vấn đề liên quan