SafeEvpPKeyHandle.DuplicateHandle erhöht die Referenz des Handle
Zusammen mit den Maßnahmen, um die Unterstützung von OpenSSL-Anbietern zu ermöglichen, wurde eine Änderung an der SafeEvpPKeyHandle.DuplicateHandle()-Methode vorgenommen, die sich auf die ECDsaOpenSsl- und RSAOpenSsl-Konstruktoren auswirkt, die SafeEvpPKeyHandle annehmen. Externe Änderungen des übergebenen Handle wirken sich jetzt auch auf das Handle aus, das in Instanzen dieser Klassen gespeichert ist.
Vorheriges Verhalten
DuplicateHandle() erstellte eine neue EVP_PKEY
-Instanz. Änderungen am duplizierten Schlüssel (d. h. durch direkte Aufrufe von OpenSSL-APIs) haben den ursprünglichen Schlüssel nicht beeinflusst. SafeEvpPKeyHandle.DuplicateHandle
wurde von den Konstruktoren von ECDsaOpenSsl und RSAOpenSsl aufgerufen, die SafeEvpPKeyHandle annehmen.
Neues Verhalten
DuplicateHandle() erhöht die Referenzanzahl der bestehenden EVP_PKEY
und gibt ein Handle an denselben Schlüssel zurück. Dies bedeutet, dass externe Aufrufe von OpenSSL-APIs, die EVP_PKEY
ändern, jetzt auch Instanzen des duplizierten SafeEvpPKeyHandle-Handle beeinflussen. Diese APIs enthalten ECDsaOpenSsl- und RSAOpenSsl-Instanzen, die aus solchen Handles erstellt wurden.
Eingeführt in Version
.NET 9 Preview 7
Typ des Breaking Changes
Diese Änderung ist eine Verhaltensänderung.
Grund für die Änderung
Diese Änderung wurde vorgenommen, um die Unterstützung von OpenSSL-Anbietern zu ermöglichen. Als Nebeneffekt ergeben sich auch einige Leistungsverbesserungen.
Empfohlene Maßnahme
Vermeiden Sie Änderungen von EVP_PKEY
, die an .NET-APIs übergeben werden. Wenn Sie Änderungen an EVP_PKEY
nicht vermeiden können, erstellen Sie selbst eine Kopie von EVP_PKEY
(d. h., kopieren Sie Parameter in die neue EVP_PKEY
-Instanz).
Betroffene APIs
- System.Security.Cryptography.SafeEvpPKeyHandle.DuplicateHandle()
- ECDsaOpenSsl(SafeEvpPKeyHandle)
- RSAOpenSsl(SafeEvpPKeyHandle)
Jede API, die eine RSA- oder ECDsa-Instanz akzeptiert, die aus SafeEvpPKeyHandle stammt, ist ebenfalls betroffen.