Tôi đang cố gắng triển khai Chef API client trong Go, nhưng đã cố gắng tạo chữ ký RSA tiêu đề yêu cầu chính xác. Theo số documentation:Mã hóa tin nhắn bằng khóa riêng RSA (như trong RSA_private_encrypt của OpenSSL)
Tiêu đề chuẩn được ký bằng khóa riêng được máy khách sử dụng từ đó yêu cầu được gửi và cũng được mã hóa bằng Base64.
Cuộc gọi ruby sau để OpenSSL::PKey::RSA.private_encrypt()
có thể được tìm thấy trong mixlib-authentication
gem code, nó sử dụng OpenSSL bindings, private_encrypt()
phương pháp gọi RSA_private_encrypt
openssl function.
Thật không may, tôi không thể tìm thấy hàm phù hợp trong thư viện chuẩn của Go; crypto/rsa
trông rất gần, nhưng nó chỉ thực hiện các phương pháp mã hóa thông thường: mã hóa bằng khóa công khai, ký băm với khóa riêng. OpenSSL của RSA_private_encrypt
ngược lại: nó mã hóa (nhỏ) tin nhắn với khóa riêng (giống như tạo chữ ký từ băm thông báo).
này "ký" cũng có thể đạt được bằng lệnh này:
openssl rsautl -sign -inkey path/to/private/key.pem \
-in file/to/encrypt -out encrypted/output
Có bất kỳ thư viện Go mẹ đẻ để đạt được kết quả tương tự như OpenSSL của RSA_private_encrypt
, hoặc là cách duy nhất là sử dụng CGO để gọi chức năng này từ Thư viện OpenSSL? Có lẽ tôi đang thiếu một cái gì đó. Ý tưởng của tôi đã được thực hiện các khách hàng mà không có bất kỳ phụ thuộc không đi.
Tôi là người mới tham gia Go, vì vậy tôi không chắc mình có thể đi sâu vào các nguồn mô-đun crypto/rsa
hay không.
Tìm thấy các similar question, nhưng the answer sử dụng SignPKCS1v15
rõ ràng là sai (function encrypts message's hash, not the message itself này).
Đó Chef tài liệu API là thê thảm không rõ ràng, nhưng tôi nghĩ rằng bạn có nghĩa vụ phải đăng ký các tiêu đề, có nghĩa SignPKCS1v15 có lẽ là những gì bạn muốn. –
@GregS, thật đáng tiếc, đây không phải là trường hợp, tôi đã kiểm tra lại với [source mixlib-authentication] (https://github.com/opscode/mixlib-authentication/blob/master/lib/mixlib/authentication/signedheaderauth. rb # L94). – artyom
Tôi nghĩ bạn có thể đúng. Tôi nghi ngờ nó đang sử dụng PKCS1 v15 * block loại 1 * padding, nhưng điều đó thực sự không giúp bạn. Lấy làm tiếc. –