You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+29-4Lines changed: 29 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -49,9 +49,33 @@ If you **must** use fork with aws-crt-python, you may be able to avoid hangs and
49
49
50
50
For an example, see `test.test_s3.py.S3RequestTest.test_fork_workaround` .
51
51
52
-
## Mac-Only TLS Behavior
52
+
## macOS TLS Configuration
53
53
54
-
Please note that on Mac, once a private key is used with a certificate, that certificate-key pair is imported into the Mac Keychain. All subsequent uses of that certificate will use the stored private key and ignore anything passed in programmatically. Beginning in v0.6.2, when a stored private key from the Keychain is used, the following will be logged at the "info" log level:
54
+
By default on macOS, aws-crt-python uses Apple Secure Transport for TLS. This provides FIPS-compliant cryptography
55
+
and integration with the macOS Keychain (e.g. PKCS#12 credentials), but is limited to TLS 1.2.
56
+
57
+
To enable TLS 1.3 on macOS, set the environment variable:
58
+
59
+
```
60
+
export AWS_CRT_USE_NON_FIPS_TLS_13=1
61
+
```
62
+
63
+
This switches the TLS backend from Apple Secure Transport to [s2n-tls](https://github.com/aws/s2n-tls) with
64
+
[aws-lc](https://github.com/aws/aws-lc) as the underlying libcrypto. The tradeoffs are:
65
+
66
+
|| Secure Transport (default) | s2n-tls (`AWS_CRT_USE_NON_FIPS_TLS_13=1`) |
67
+
|---|---|---|
68
+
| TLS versions | Up to TLS 1.2 | Up to TLS 1.3 |
69
+
| FIPS compliance | Yes | No |
70
+
| macOS Keychain integration | Yes (PKCS#12, system certs) | No |
71
+
72
+
This variable is checked at runtime and only affects macOS. It has no effect on Linux (which always uses s2n-tls)
73
+
or Windows (which always uses Schannel). Both TLS backends are compiled into the binary when building on macOS;
74
+
the environment variable selects which one is used.
75
+
76
+
### Keychain Behavior
77
+
78
+
Please note that on Mac, once a private key is used with a certificate, that certificate-key pair is imported into the Mac Keychain. All subsequent uses of that certificate will use the stored private key and ignore anything passed in programmatically. Beginning in v0.6.2, when a stored private key from the Keychain is used, the following will be logged at the "info" log level:
55
79
56
80
```
57
81
static: certificate has an existing certificate-key pair that was previously imported into the Keychain. Using key from Keychain instead of the one provided.
@@ -110,8 +134,9 @@ You can enable the crash handler by setting the environment variable `AWS_CRT_CR
110
134
### OpenSSL and LibCrypto
111
135
112
136
aws-crt-python does not use OpenSSL for TLS.
113
-
On Apple and Windows devices, the OS's default TLS library is used.
114
-
On Unix devices, [s2n-tls](https://github.com/aws/s2n-tls) is used.
137
+
On Windows, the OS's default TLS library (Schannel) is used.
138
+
On Apple (macOS), both Secure Transport and s2n-tls are compiled in; the backend is selected at runtime (see [macOS TLS Configuration](#macos-tls-configuration) below).
139
+
On other Unix devices, [s2n-tls](https://github.com/aws/s2n-tls) is used.
115
140
But s2n-tls uses libcrypto, the cryptography math library bundled with OpenSSL.
116
141
117
142
To simplify installation, aws-crt-python has its own copy of libcrypto.
0 commit comments