Ich versuche Chef API client in Go zu implementieren, aber stecken, versuchen, korrekte Anfrage Header RSA-Signatur zu erstellen. Nach documentation:Verschlüsseln Nachricht mit RSA privaten Schlüssel (wie in OpenSSL RSA_private_encrypt)
ist ein kanonischer Header mit dem privaten Schlüssel signiert von der Client-Maschine verwendet, von dem die Anfrage gesendet wird, und ist auch mit Base64 codiert.
Der folgende Rubin Aufruf OpenSSL::PKey::RSA.private_encrypt()
in mixlib-authentication
gem code gefunden werden, verwendet es OpenSSL bindings, private_encrypt()
Methode RSA_private_encrypt
openssl function nennt.
Leider kann ich keine passende Funktion in Gos Standardbibliothek finden; crypto/rsa
sieht in der Nähe, aber es implementiert nur konventionelle Verschlüsselungsmethoden: Verschlüsselung mit öffentlichen Schlüssel, Hash-Signatur mit private Schlüssel. OpenSSL RSA_private_encrypt
tut das Gegenteil: Es verschlüsselt (kleine) Nachricht mit privaten Schlüssel (ähnlich wie eine Signatur aus Nachrichtenhash erstellen).
Diese „Signieren“ kann auch mit diesem Befehl erreicht werden:
openssl rsautl -sign -inkey path/to/private/key.pem \
-in file/to/encrypt -out encrypted/output
Gibt es native Bibliotheken Go das gleiche Ergebnis wie OpenSSL RSA_private_encrypt
oder der einzige Weg ist, mit CGO zu erreichen, diese Funktion aufzurufen aus OpenSSL-Bibliothek? Vielleicht vermisse ich etwas. Meine Idee war, den Client ohne irgendwelche Abhängigkeiten zu implementieren.
Ich bin ein Go-Neuling, also bin ich mir nicht sicher, ob ich in crypto/rsa
Modulquellen tauchen kann.
die similar question gefunden, aber the answer verwenden SignPKCS1v15
offensichtlich falsch ist (dies function encrypts message's hash, not the message itself).
Der Chef-API-Dokumentation auf tragische Weise unklar ist, aber ich denke, Sie sollen die Header zu unterschreiben, was bedeutet, SignPKCS1v15 ist wahrscheinlich was du willst. –
@GregS, das ist leider nicht der Fall, ich habe dies mit [mixlib-authentication sources] überprüft (https://github.com/opscode/mixlib-authentication/blob/master/lib/mixlib/authentication/signedheaderauth. rb # L94). – artyom
Ich denke, Sie könnten Recht haben. Ich vermute, dass PKCS1 v15 * block type 1 * padding verwendet wird, aber das hilft dir wirklich nicht. Es tut uns leid. –