I希望您能够在Go中实现Chef API客户端,但是在尝试创建正确的请求头RSA签名时遇到了困难。根据文档:
抱歉,我在 Go 的标准库中没有找到匹配的函数;
此“签名”也可使用此命令实现:
下面的ruby调用规范标头使用客户端机器使用的私钥进行签名,并且还使用Base64进行编码。
OpenSSL :: PKey :: RSA.private_encrypt()
可以在mixlib-authentication gem code
中找到,它使用OpenSSL绑定,private_encrypt()
方法调用RSA_private_encrypt
openssl function。抱歉,我在 Go 的标准库中没有找到匹配的函数;
crypto/rsa
看起来很接近,但它仅实现传统的加密方法:使用 公钥 进行加密,使用 私钥 进行哈希签名。 OpenSSL 的 RSA_private_encrypt
则相反:它使用私钥(类似于从消息哈希创建签名)对 (小) 消息进行加密。此“签名”也可使用此命令实现:
openssl rsautl -sign -inkey path/to/private/key.pem \
-in file/to/encrypt -out encrypted/output
是否有任何本地Go库可以实现与OpenSSL的RSA_private_encrypt相同的结果,或者唯一的方法是使用Cgo从OpenSSL库中调用此函数?也许我遗漏了什么。我的想法是在不依赖非Go的情况下实现客户端。
作为Go新手,我不确定能否深入了解crypto/rsa模块源代码。
发现了相似的问题,但是回答使用SignPKCS1v15
显然是错误的(这个函数加密消息的哈希值而不是消息本身)。