2014-10-08 23 views
7

Bên trong tập lệnh trình bao, tôi muốn xác minh tệp RSA công khai. Tất cả những gì tôi muốn làm là tìm cách kiểm tra tệp này là tệp khóa công khai chính hãng, không có gì khác.Cách kiểm tra tệp khóa công cộng RSA

Tôi có thể hỏi chuyên gia ở đây những cách tôi có thể xác minh tệp đầu vào này để kiểm tra đây là tệp khóa công khai chính hãng chứ không phải tệp thông thường.

Tôi sẽ sử dụng tệp khóa công cộng này trong tương lai để xác thực tệp gzip mã hóa đến nhưng hiện đã nằm ngoài phạm vi.

Tất cả những gì tôi muốn là xác thực tệp đầu vào để kiểm tra tệp khóa công cộng RSA chính hãng của nó không phải là tệp thông thường. Xin lưu ý rằng tôi không có bất kỳ tệp nào khác với tôi (ví dụ: khóa cá nhân).

ví dụ: nếu tệp là ‘public.pem’ Tôi chỉ muốn kiểm tra bên trong rằng đó là tệp khóa công khai RSA chính hãng không chỉ là tệp có văn bản hoặc tệp không bị hỏng. Tôi đã kiểm tra tệp đó có kích thước bằng không và md5.

kiểm tra có thể khác tôi thấy tập tin kiểm tra nhận được tin nhắn ‘BEGIN PUBLIC KEY’‘END PUBLIC KEY’ Cũng tìm thấy lệnh này trong google, Có cách nào tốt hơn để làm điều này sử dụng openssl

‘openssl rsa -noout -text -inform PEM -in pubkey.pem -pubin’ 

Cảm ơn

+0

sử dụng openssl có lẽ là cách duy nhất bạn muốn làm điều này. chỉ cần kiểm tra các dấu phân cách bắt đầu/kết thúc là vô nghĩa. Tôi có thể gửi cho bạn một tệp với 'BEGIN PUBLIC KEY heeheeheethisisnotvalidrsa END PUBLIC KEY' và "người xác minh" của bạn sẽ chấp nhận nó. –

+0

chính xác đó là lý do tại sao tôi muốn biết cách tốt hơn để xác thực tệp rsa công khai này, xin lưu ý rằng đây là tệp RSA công khai của máy chủ từ xa. – csf

+1

sử dụng cái này để gỡ lỗi https://8gwifi.org/certsverify.jsp – anish

Trả lời

15

Có thể sử dụng bất kỳ trình phân tích cú pháp định dạng khóa công khai nào, bao gồm cả openssl hoặc thậm chí phân tích cú pháp khóa cho chính bạn vì định dạng này không khó.

công cụ dòng lệnh thiết lập một mã khác không xuất cảnh, khi phân tích thất bại:

openssl rsa -inform PEM -pubin -in pubkey.pem -noout &> /dev/null 
if [ $? != 0 ] ; then 
    echo "this was definitely not a RSA public key in PEM format" 
    exit 1 
fi 

Chỉ cần để kiểm tra bất kỳ khóa công khai:

openssl pkey -inform PEM -pubin -in pubkey.pem -noout &> /dev/null 
if [ $? != 0 ] ; then 
    echo "this was definitely not a public key in PEM format" 
    exit 1 
fi 
+0

Giả sử bạn có nghĩa là công cụ khóa Java (JRE), không thể đọc khóa công khai. Một certficate có, và một ứng dụng sau đó có thể '.getPublicKey()' từ cert, nhưng publickey trực tiếp không. OTOH một ứng dụng có thể trực tiếp đọc một pubkey chung (PKCS # 8) trong DER, nhưng base64 ít dễ dàng hơn mà không có một addon như BouncyCastle. Ngoài ra, trên dòng lệnh 'openssl'' -inform PEM' là mặc định và có thể bỏ qua, và các tùy chọn đầu ra '-text -noout' có thể được bỏ qua khi bạn bỏ qua đầu ra; hoặc với '-noout' và không có tùy chọn đầu ra nào khác mà bạn không cần phải loại bỏ. –

+0

Vâng, có vẻ như keytool không thể làm điều đó. base64 được hỗ trợ cả bởi tiện ích 'base64', ví dụ, và trong Java bởi lớp' javax.xml.bind.DataTypeConverter'. Tôi muốn được rõ ràng về các định dạng và những thứ khác, không có nhiều lợi ích trong bỏ qua định dạng không. Bạn đúng rằng '-noout' và' -text' không có ý nghĩa với nhau, nhưng đầu ra vẫn phải loại bỏ, bởi vì có thể có các thông báo lỗi được báo cáo ngay cả với tùy chọn '-noout'. – divanov

+0

Bạn nói đúng Tôi đã quên về javax.xml, không có ở đó khi lần đầu tiên tôi gặp sự cố này. Mặc dù bạn thực sự cần cả base64 và xử lý BEGIN/END, đây là một vài dòng nữa. '-noout -text' có ý nghĩa * cùng nhau * (để hiển thị màn hình có thể đọc được mà không có mã hóa được mã hóa) và do đó kết hợp tương tự như' -noout -subject -enddate'; họ chỉ không thực hiện bất kỳ sự khác biệt khi stdout được loại bỏ.Bạn cũng đúng về việc loại bỏ các thông báo lỗi; Tôi rất quen với họ Tôi hầu như không nhận thấy, nhưng những người khác sẽ. –

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