Repository: urllib3/urllib3

Issue:
Cannot pass ssl kwarg cert_data in proxy context
Discovered that one while writting tls-in-tls http/2 tests in #3030 

While we can do

```python
with proxy_from_url("...", ca_certs=DEFAULT_CA) as http:
    ...
```

we cannot 

```python
with proxy_from_url("...", cert_data=open(DEFAULT_CA, "rb").read()) as http:
    ...
```

output `unexpected kw key_cert_data for pool conn`

I suspect that we missed propagating required kw.

It is an easy fix.

should patch `SSL_KEYWORDS = (....)` and `class PoolKey(typing.NamedTuple):`

Discussion:

Patch:
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index 4a516c28..6fb36c29 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -37,7 +37,7 @@ jobs:
       - name: "Generate hashes"
         id: hash
         run: |
-          cd dist && echo "::set-output name=hashes::$(sha256sum * | base64 -w0)"
+          cd dist && echo "hashes=$(sha256sum * | base64 -w0)" >> $GITHUB_OUTPUT
 
       - name: "Upload dists"
         uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2
diff --git a/changelog/3065.bugfix.rst b/changelog/3065.bugfix.rst
new file mode 100644
index 00000000..e9be3640
--- /dev/null
+++ b/changelog/3065.bugfix.rst
@@ -0,0 +1,3 @@
+Fixed an issue where it was not possible to pass the ca_cert_data keyword argument in a proxy context when making SSL
+requests. Previously, attempting to pass ca_cert_data in a proxy context would result in an error.
+This issue has been resolved, and users can now pass ca_cert_data when making SSL requests through a proxy context.
diff --git a/src/urllib3/poolmanager.py b/src/urllib3/poolmanager.py
index 8b8fac9e..32da0a00 100644
--- a/src/urllib3/poolmanager.py
+++ b/src/urllib3/poolmanager.py
@@ -38,6 +38,7 @@ SSL_KEYWORDS = (
     "cert_file",
     "cert_reqs",
     "ca_certs",
+    "ca_cert_data",
     "ssl_version",
     "ssl_minimum_version",
     "ssl_maximum_version",
@@ -73,6 +74,7 @@ class PoolKey(typing.NamedTuple):
     key_cert_file: str | None
     key_cert_reqs: str | None
     key_ca_certs: str | None
+    key_ca_cert_data: str | bytes | None
     key_ssl_version: int | str | None
     key_ssl_minimum_version: ssl.TLSVersion | None
     key_ssl_maximum_version: ssl.TLSVersion | None


Test patch:
diff --git a/test/with_dummyserver/test_proxy_poolmanager.py b/test/with_dummyserver/test_proxy_poolmanager.py
index 9d5f9076..09898c92 100644
--- a/test/with_dummyserver/test_proxy_poolmanager.py
+++ b/test/with_dummyserver/test_proxy_poolmanager.py
@@ -78,6 +78,16 @@ class TestHTTPProxyManager(HTTPDummyProxyTestCase):
             r = https.request("GET", f"{self.http_url}/")
             assert r.status == 200
 
+    def test_http_and_https_kwarg_ca_cert_data_proxy(self) -> None:
+        with open(DEFAULT_CA) as pem_file:
+            pem_file_data = pem_file.read()
+        with proxy_from_url(self.https_proxy_url, ca_cert_data=pem_file_data) as https:
+            r = https.request("GET", f"{self.https_url}/")
+            assert r.status == 200
+
+            r = https.request("GET", f"{self.http_url}/")
+            assert r.status == 200
+
     def test_https_proxy_with_proxy_ssl_context(self) -> None:
         proxy_ssl_context = create_urllib3_context()
         proxy_ssl_context.load_verify_locations(DEFAULT_CA)