Skip to content

Commit 3c04503

Browse files
authored
Merge branch 'main' into main
2 parents 3db1e49 + 06b45cf commit 3c04503

File tree

16 files changed

+3833
-21
lines changed

16 files changed

+3833
-21
lines changed

.github/workflows/CI.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ jobs:
4040
version: '1'
4141
arch: x86
4242
steps:
43-
- uses: actions/checkout@v5
43+
- uses: actions/checkout@v6
4444
- uses: julia-actions/setup-julia@v2
4545
with:
4646
version: ${{ matrix.version }}

.github/workflows/IntegrationTest.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,14 @@ jobs:
2424
- {user: JuliaWeb, repo: HTTP.jl}
2525

2626
steps:
27-
- uses: actions/checkout@v5
27+
- uses: actions/checkout@v6
2828
- uses: julia-actions/setup-julia@v2
2929
with:
3030
version: ${{ matrix.julia-version }}
3131
arch: x64
3232
- uses: julia-actions/julia-buildpkg@latest
3333
- name: Clone Downstream
34-
uses: actions/checkout@v5
34+
uses: actions/checkout@v6
3535
with:
3636
repository: ${{ matrix.package.user }}/${{ matrix.package.repo }}
3737
path: downstream

.github/workflows/IntegrationTest_OpenSSL_v1_1.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,14 @@ jobs:
2424
- {user: JuliaWeb, repo: HTTP.jl}
2525

2626
steps:
27-
- uses: actions/checkout@v5
27+
- uses: actions/checkout@v6
2828
- uses: julia-actions/setup-julia@v2
2929
with:
3030
version: ${{ matrix.julia-version }}
3131
arch: x64
3232
- uses: julia-actions/julia-buildpkg@latest
3333
- name: Clone Downstream
34-
uses: actions/checkout@v5
34+
uses: actions/checkout@v6
3535
with:
3636
repository: ${{ matrix.package.user }}/${{ matrix.package.repo }}
3737
path: downstream

Project.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
name = "OpenSSL"
22
uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c"
3-
version = "1.5.0"
3+
version = "1.6.1"
44
authors = ["Greg Lapinski <[email protected]>", "Jacob Quinn <[email protected]>"]
55

66
[deps]
77
BitFlags = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35"
88
Dates = "ade2ca70-3891-5945-98fb-dc099432e06a"
99
MozillaCACerts_jll = "14a3606d-f60d-562e-9121-12d972cd8159"
10+
NetworkOptions = "ca575930-c2e3-43a9-ace4-1e988b2c1908"
1011
OpenSSL_jll = "458c3c95-2e84-50aa-8efc-19380b2a3a95"
1112
Sockets = "6462fe0b-24de-5631-8697-dd941f90decc"
1213

src/OpenSSL.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ using Dates
55
using OpenSSL_jll
66
using Sockets
77
using MozillaCACerts_jll
8+
using NetworkOptions: NetworkOptions
89

910
"""
1011
[x] Encryption, decryption

src/ssl.jl

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -127,14 +127,21 @@ end
127127

128128
const SSL_MODE_AUTO_RETRY = 0x00000004
129129

130+
# Use NetworkOptions for default CA file so that it can be configured using the standard
131+
# environment variables (JULIA_SSL_CA_ROOTS_PATH, SSL_CERT_DIR, and SSL_CERT_FILE).
132+
# TODO: On Windows and macOS `ca_roots` return `nothing` to indicate that system configured
133+
# certificates should be preferred but for now we fall back to the certificate from
134+
# MozillaCACerts_jll.
135+
default_cacert() = something(NetworkOptions.ca_roots(), MozillaCACerts_jll.cacert)
136+
130137
"""
131138
This is the global context structure which is created by a server or client once per program life-time
132139
and which holds mainly default values for the SSL structures which are later created for the connections.
133140
"""
134141
mutable struct SSLContext
135142
ssl_ctx::Ptr{Cvoid}
136143

137-
function SSLContext(ssl_method::SSLMethod, verify_file::String=MozillaCACerts_jll.cacert)
144+
function SSLContext(ssl_method::SSLMethod, verify_file::String = default_cacert())
138145
ssl_ctx = ccall(
139146
(:SSL_CTX_new, libssl),
140147
Ptr{Cvoid},
@@ -154,27 +161,38 @@ mutable struct SSLContext
154161
(SSLContext, Cint, Clong, Ptr{Cvoid}),
155162
ssl_context, 33, SSL_MODE_AUTO_RETRY, C_NULL)
156163
if !isempty(verify_file)
157-
@assert ccall(
158-
(:SSL_CTX_load_verify_locations, libssl),
159-
Cint,
160-
(SSLContext, Ptr{Cchar}, Ptr{Cchar}),
161-
ssl_context,
162-
verify_file,
163-
C_NULL) == 1
164+
ret = ca_chain!(ssl_context, verify_file)
165+
if ret != 1
166+
error("Failed to validate CA certificates at '$(verify_file)'.")
167+
end
164168
end
165169

166170
return ssl_context
167171
end
168172
end
169173

170174
function ca_chain!(ssl_context::SSLContext, cacert::String)
171-
ccall(
172-
(:SSL_CTX_load_verify_locations, libssl),
173-
Cint,
174-
(SSLContext, Ptr{Cchar}, Ptr{Cchar}),
175-
ssl_context,
176-
cacert,
177-
C_NULL)
175+
176+
if isfile(cacert)
177+
ccall(
178+
(:SSL_CTX_load_verify_locations, libssl),
179+
Cint,
180+
(SSLContext, Ptr{Cchar}, Ptr{Cchar}),
181+
ssl_context,
182+
cacert,
183+
C_NULL)
184+
elseif isdir(cacert)
185+
ccall(
186+
(:SSL_CTX_load_verify_locations, libssl),
187+
Cint,
188+
(SSLContext, Ptr{Cchar}, Ptr{Cchar}),
189+
ssl_context,
190+
C_NULL,
191+
cacert)
192+
else
193+
ArgumentError("Invalid CA certificates location: $cacert")
194+
end
195+
178196
end
179197

180198
function free(ssl_context::SSLContext)

test/certs/1001acf7.0

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIFVzCCAz+gAwIBAgINAgPlk28xsBNJiGuiFzANBgkqhkiG9w0BAQwFADBHMQsw
3+
CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU
4+
MBIGA1UEAxMLR1RTIFJvb3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw
5+
MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp
6+
Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUA
7+
A4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaMf/vo
8+
27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7w
9+
Cl7raKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjw
10+
TcLCeoiKu7rPWRnWr4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0Pfybl
11+
qAj+lug8aJRT7oM6iCsVlgmy4HqMLnXWnOunVmSPlk9orj2XwoSPwLxAwAtcvfaH
12+
szVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk9+aCEI3oncKKiPo4Zor8
13+
Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zqkUspzBmk
14+
MiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92
15+
wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70p
16+
aDPvOmbsB4om3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrN
17+
VjzRlwW5y0vtOUucxD/SVRNuJLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQID
18+
AQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
19+
FgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQADggIBAJ+qQibb
20+
C5u+/x6Wki4+omVKapi6Ist9wTrYggoGxval3sBOh2Z5ofmmWJyq+bXmYOfg6LEe
21+
QkEzCzc9zolwFcq1JKjPa7XSQCGYzyI0zzvFIoTgxQ6KfF2I5DUkzps+GlQebtuy
22+
h6f88/qBVRRiClmpIgUxPoLW7ttXNLwzldMXG+gnoot7TiYaelpkttGsN/H9oPM4
23+
7HLwEXWdyzRSjeZ2axfG34arJ45JK3VmgRAhpuo+9K4l/3wV3s6MJT/KYnAK9y8J
24+
ZgfIPxz88NtFMN9iiMG1D53Dn0reWVlHxYciNuaCp+0KueIHoI17eko8cdLiA6Ef
25+
MgfdG+RCzgwARWGAtQsgWSl4vflVy2PFPEz0tv/bal8xa5meLMFrUKTX5hgUvYU/
26+
Z6tGn6D/Qqc6f1zLXbBwHSs09dR2CQzreExZBfMzQsNhFRAbd03OIozUhfJFfbdT
27+
6u9AWpQKXCBfTkBdYiJ23//OYb2MI3jSNwLgjt7RETeJ9r/tSQdirpLsQBqvFAnZ
28+
0E6yove+7u7Y/9waLd64NnHi/Hm3lCXRSHNboTXns5lndcEZOitHTtNCjv0xyBZm
29+
2tIMPNuzjsmhDYAPexZ3FL//2wmUspO8IFgV6dtxQ/PeEMMA3KgqlbbC1j+Qa3bb
30+
bP6MvPJwNQzcmRk13NfIRmPVNnGuV/u3gm3c
31+
-----END CERTIFICATE-----

test/certs/106f3e4d.0

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG
3+
A1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3
4+
d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVu
5+
dHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEzMDEGA1UEAxMq
6+
RW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRUMxMB4XDTEy
7+
MTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYwFAYD
8+
VQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0
9+
L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0g
10+
Zm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBD
11+
ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMTB2MBAGByqGSM49AgEGBSuBBAAi
12+
A2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHyAsWfoPZb1YsGGYZPUxBt
13+
ByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef9eNi1KlH
14+
Bz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O
15+
BBYEFLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVC
16+
R98crlOZF7ZvHH3hvxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nX
17+
hTcGtXsI/esni0qU+eH6p44mCOh8kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G
18+
-----END CERTIFICATE-----

test/certs/14bc7599.0

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQG
3+
EwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNo
4+
bm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g
5+
RzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4MTgzMDAwWjBrMQswCQYDVQQGEwJJ
6+
TjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9s
7+
b2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMw
8+
djAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0
9+
WXTsuwYc58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xyS
10+
fvalY8L1X44uT6EYGQIrMgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuB
11+
zhccLikenEhjQjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggq
12+
hkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+DCBeQyh+KTOgNG3qxrdWB
13+
CUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7jHvrZQnD
14+
+JbNR6iC8hZVdyR+EhCVBCyj
15+
-----END CERTIFICATE-----

test/certs/18856ac4.0

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDEr
3+
MCkGA1UEChMiSmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoG
4+
A1UEAxMTU2VjdXJlU2lnbiBSb290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0
5+
MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSswKQYDVQQKEyJKYXBhbiBDZXJ0aWZp
6+
Y2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1cmVTaWduIFJvb3RD
7+
QTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvLTJsz
8+
i1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8
9+
h9uuywGOwvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOV
10+
MdrAG/LuYpmGYz+/3ZMqg6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9
11+
UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rPO7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni
12+
8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitAbpSACW22s293bzUIUPsC
13+
h8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZXt94wDgYD
14+
VR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEB
15+
AKChOBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xm
16+
KbabfSVSSUOrTC4rbnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQ
17+
X5Ucv+2rIrVls4W6ng+4reV6G4pQOh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWr
18+
QbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01y8hSyn+B/tlr0/cR7SXf+Of5
19+
pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061lgeLKBObjBmN
20+
QSdJQO7e5iNEOdyhIta6A/I=
21+
-----END CERTIFICATE-----

0 commit comments

Comments
 (0)