Go でChef API クライアントを実装しようとしていますが、正しい要求ヘッダー RSA 署名を作成しようとして行き詰まりました。ドキュメントによると:
正規ヘッダーは、リクエストの送信元のクライアント マシンで使用される秘密鍵で署名され、Base64 を使用してエンコードされます。
次の ruby 呼び出しはgem コードOpenSSL::PKey::RSA.private_encrypt()
で見つけることができます。これはOpenSSL バインディングを使用し、メソッドはopenssl 関数を呼び出します。mixlib-authentication
private_encrypt()
RSA_private_encrypt
残念ながら、Go の標準ライブラリには一致する関数が見つかりません。crypto/rsa
よく似ていますが、公開鍵による暗号化、秘密鍵によるハッシュ署名など、従来の暗号化方法のみを実装しています。OpenSSLRSA_private_encrypt
は反対のことを行います。(小さな) メッセージを秘密鍵で暗号化します (メッセージ ハッシュから署名を作成するのと似ています)。
この「署名」は、次のコマンドでも実行できます。
openssl rsautl -sign -inkey path/to/private/key.pem \
-in file/to/encrypt -out encrypted/output
OpenSSL と同じ結果を達成するためのネイティブ Go ライブラリはありますかRSA_private_encrypt
、または Cgo を使用して OpenSSL ライブラリからこの関数を呼び出す唯一の方法はありますか? 多分私は何かが足りない。私の考えは、go以外の依存関係なしでクライアントを実装することでした。
私は Go の初心者なので、crypto/rsa
モジュール ソースに飛び込むことができるかどうかわかりません。
同様の質問が見つかりましたが、使用する答えSignPKCS1v15
は明らかに間違っています (この関数は、メッセージ自体ではなく、メッセージのハッシュを暗号化します)。