Skip to content

Commit 8ecf6d2

Browse files
authored
Add breaking change documentation for OpenSSL cryptographic primitives on macOS (#46924)
1 parent e491291 commit 8ecf6d2

File tree

3 files changed

+63
-2
lines changed

3 files changed

+63
-2
lines changed

docs/core/compatibility/10.0.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ If you're migrating an app to .NET 10, the breaking changes listed here might af
5252

5353
| Title | Type of change | Introduced version |
5454
|-------|-------------------|--------------------|
55+
| [OpenSSL cryptographic primitives aren't supported on macOS](cryptography/10.0/openssl-macos-unsupported.md) | Behavioral change | Preview 6 |
5556
| [X500DistinguishedName validation is stricter](cryptography/10.0/x500distinguishedname-validation.md) | Behavioral change | Preview 1 |
5657
| [X509Certificate and PublicKey key parameters can be null](cryptography/10.0/x509-publickey-null.md) | Behavioral/source incompatible change | Preview 3 |
5758
| [Environment variable renamed to DOTNET_OPENSSL_VERSION_OVERRIDE](cryptography/10.0/version-override.md) | Behavioral change | Preview 1 |
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
---
2+
title: "Breaking change: OpenSSL cryptographic primitives aren't supported on macOS"
3+
description: "Learn about the breaking change in .NET 10 where OpenSSL cryptographic primitives are no longer supported on macOS."
4+
ms.date: 06/23/2025
5+
ai-usage: ai-assisted
6+
ms.custom: https://github.com/dotnet/docs/issues/46789
7+
---
8+
# OpenSSL cryptographic primitives are not supported on macOS
9+
10+
Starting in .NET 10, OpenSSL-backed cryptographic primitives are no longer supported on macOS. <xref:System.Security.Cryptography.AesCcm?displayProperty=fullName> and classes that are specific to OpenSSL, such as <xref:System.Security.Cryptography.RSAOpenSsl?displayProperty=fullName>, now throw a <xref:System.PlatformNotSupportedException> on macOS.
11+
12+
## Version introduced
13+
14+
.NET 10 Preview 6
15+
16+
## Previous behavior
17+
18+
Previously, classes that are specific to OpenSSL, such as <xref:System.Security.Cryptography.RSAOpenSsl?displayProperty=fullName>, worked on macOS if OpenSSL was available.
19+
20+
<xref:System.Security.Cryptography.AesCcm?displayProperty=fullName> worked on macOS if OpenSSL was available.
21+
22+
## New behavior
23+
24+
Classes that are specific to OpenSSL, such as <xref:System.Security.Cryptography.RSAOpenSsl>, don't work on macOS even if OpenSSL is available, and a <xref:System.PlatformNotSupportedException> exception is thrown.
25+
26+
<xref:System.Security.Cryptography.AesCcm> throws a <xref:System.PlatformNotSupportedException> exception.
27+
28+
## Type of breaking change
29+
30+
This is a [behavioral change](../../categories.md#behavioral-change).
31+
32+
## Reason for change
33+
34+
Support for the OpenSSL-backed primitives originated from .NET Core 1.0, where cryptography on macOS was implemented with OpenSSL. This wasn't ideal because a recent version of OpenSSL doesn't come on macOS, and acquiring and configuring OpenSSL on macOS was troublesome. In the .NET Core 2.0 timeframe, cryptography was moved to Apple's built-in functionality, so cryptographic functionality "just worked" without needing to acquire any additional components.
35+
36+
The types that are suffixed as `OpenSsl` were left as being implemented by OpenSSL, and <xref:System.Security.Cryptography.AesCcm> doesn't have an implementation in Apple's cryptographic libraries.
37+
38+
Supporting these OpenSSL-backed primitives on macOS has become more difficult as Apple has made it more difficult to load libraries from certain paths, and it complicates distributing software on macOS.
39+
40+
## Recommended action
41+
42+
If you're using OpenSSL-backed primitives without any specific intention of using OpenSSL, the recommendation is to use the factories that provide a macOS implementation:
43+
44+
* `new DSAOpenSsl(...)` -> `DSA.Create(...)`
45+
* `new ECDiffieHellmanOpenSsl(...)` -> `ECDiffieHellman.Create(...)`
46+
* `new ECDsaOpenSsl(...)` -> `ECDsa.Create(...)`
47+
* `new RSAOpenSsl(...)` -> `RSA.Create(...)`
48+
49+
<xref:System.Security.Cryptography.AesCcm?displayProperty=fullName> has no functional equivalent on macOS. Consider using a different cryptographic primitive, such as <xref:System.Security.Cryptography.AesGcm?displayProperty=fullName>, instead.
50+
51+
## Affected APIs
52+
53+
* <xref:System.Security.Cryptography.AesCcm?displayProperty=fullName> (all constructors)
54+
* <xref:System.Security.Cryptography.DSAOpenSsl?displayProperty=fullName> (all constructors)
55+
* <xref:System.Security.Cryptography.ECDiffieHellmanOpenSsl?displayProperty=fullName> (all constructors)
56+
* <xref:System.Security.Cryptography.ECDsaOpenSsl?displayProperty=fullName> (all constructors)
57+
* <xref:System.Security.Cryptography.RSAOpenSsl?displayProperty=fullName> (all constructors)
58+
* <xref:System.Security.Cryptography.SafeEvpPKeyHandle?displayProperty=fullName> (entire class)

docs/core/compatibility/toc.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,14 @@ items:
3838
href: core-libraries/10.0/ymm-embedded-rounding.md
3939
- name: Cryptography
4040
items:
41+
- name: Environment variable renamed to DOTNET_OPENSSL_VERSION_OVERRIDE
42+
href: cryptography/10.0/version-override.md
43+
- name: OpenSSL cryptographic primitives not supported on macOS
44+
href: cryptography/10.0/openssl-macos-unsupported.md
4145
- name: X500DistinguishedName validation is stricter
4246
href: cryptography/10.0/x500distinguishedname-validation.md
4347
- name: X509Certificate and PublicKey key parameters can be null
4448
href: cryptography/10.0/x509-publickey-null.md
45-
- name: Environment variable renamed to DOTNET_OPENSSL_VERSION_OVERRIDE
46-
href: cryptography/10.0/version-override.md
4749
- name: Extensions
4850
items:
4951
- name: "ProviderAliasAttribute moved to Microsoft.Extensions.Logging.Abstractions assembly"

0 commit comments

Comments
 (0)