У меня нет большого опыта в области безопасности, но теперь я должен реализовать процедуру подписи в python.Невозможно подписать данные с X509Certificate в python
У меня есть сертификат somename.cer
. У меня есть пример внедрения c#
того, как подписать мою строку с этой строкой следующим образом:
CertColl - это коллекция сертификатов, в которых соответствующий код находит связанный сертификат с Thumbprint
в предыдущих строках и возвращает список сертификатов.
X509Certificate2 cert = certColl[0]
RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)cert.PrivateKey;
return Convert.ToBase64String(rsa.SignData(Encoding.GetEncoding(1251).GetBytes(my_string), new SHA1CryptoServiceProvider()));
my_string
является строка, которая будет подписана и построена в коде, но мне не нужно, чтобы добавить эти шаги здесь
Так что я пытаюсь осуществить это в Python с помощью this previous Q&A
from Crypto.Util.asn1 import DerSequence
from Crypto.PublicKey import RSA
from binascii import a2b_base64
pem = open("some-path/somefile.cer") # I have a certificate with `cer` extension
lines = pem.replace(" ",'').split()
der = a2b_base64(''.join(lines[1:-1]))
cert = DerSequence()
cert.decode(der)
tbsCertificate = DerSequence()
tbsCertificate.decode(cert[0])
subjectPublicKeyInfo = tbsCertificate[6]
rsa_key = RSA.importKey(subjectPublicKeyInfo)
Как и ожидалось, теперь я могу подписать my_string
с этим.
rsa_key.sign("Hello World", "")
Но я получаю следующее сообщение об ошибке:
TypeError: Private key not available in this object
я делаю что-то не так, как usnig неправильный метод, чтобы имитировать rsa.SignData
в Python?