@@ -60,7 +60,7 @@ init(SslOpts, Role) ->
6060 init_manager_name (maps :get (erl_dist , SslOpts , false )),
6161 #{pem_cache := PemCache } = Config = init_cacerts (SslOpts , Role ),
6262 DHParams = init_diffie_hellman (PemCache , SslOpts , Role ),
63- CertKeyAlts = init_certs_keys (SslOpts , Role , PemCache ),
63+ CertKeyAlts = init_certs_keys (SslOpts , PemCache ),
6464 {ok , Config #{cert_key_alts => CertKeyAlts , dh_params => DHParams }}.
6565
6666new_emulated ([], EmOpts ) ->
@@ -142,24 +142,17 @@ get_internal_active_n(true) ->
142142get_internal_active_n (false ) ->
143143 application_int (internal_active_n , ? INTERNAL_ACTIVE_N ).
144144
145- % %====================================================================
146- % % Internal functions
147- % %====================================================================
148-
149145% %====================================================================
150146% % Certificate and Key configuration
151147% %====================================================================
152- init_certs_keys (#{certs_keys := CertsKeys } = Opts , Role , PemCache ) ->
153- Pairs = lists :map (fun (CertKey ) ->
154- init_cert_key_pair (CertKey , Role , PemCache )
155- end , CertsKeys ),
148+ init_certs_keys (#{certs_keys := CertsKeys } = Opts , PemCache ) ->
149+ Pairs = lists :map (fun (CertKey ) -> init_cert_key_pair (CertKey , PemCache ) end , CertsKeys ),
156150 CertKeyGroups = group_pairs (Pairs ),
157151 prioritize_groups (CertKeyGroups , Opts ).
158152
159- init_cert_key_pair (CertKey , Role , PemCache ) ->
160- Certs = init_certificates (CertKey , PemCache , Role ),
161- PrivateKey = init_private_key (maps :get (key , CertKey , undefined ),
162- CertKey , PemCache ),
153+ init_cert_key_pair (CertKey , PemCache ) ->
154+ Certs = init_certificates (CertKey , PemCache ),
155+ PrivateKey = init_private_key (maps :get (key , CertKey , undefined ), CertKey , PemCache ),
163156 #{private_key => PrivateKey , certs => Certs }.
164157
165158group_pairs ([#{certs := []}]) ->
@@ -304,26 +297,25 @@ init_cacerts(#{cacerts := CaCerts, crl_cache := CRLCache} = Opts, Role) ->
304297 end ,
305298 Config .
306299
307- init_certificates (CertKey , PemCache , Role ) ->
300+ init_certificates (CertKey , PemCache ) ->
308301 case maps :get (cert , CertKey , undefined ) of
309302 undefined ->
310- init_certificate_file (maps :get (certfile , CertKey , <<>>), PemCache , Role );
303+ init_certificate_file (maps :get (certfile , CertKey , <<>>), PemCache );
311304 Bin when is_binary (Bin ) ->
312305 [Bin ];
313306 Certs when is_list (Certs ) ->
314307 Certs
315308 end .
316309
317- init_certificate_file (<<>>, _PemCache , _Role ) ->
310+ init_certificate_file (<<>>, _PemCache ) ->
318311 [];
319- init_certificate_file (CertFile , PemCache , Role ) ->
320- try % % OwnCert | [OwnCert | Chain]
321- ssl_certificate :file_to_certificats (CertFile , PemCache )
322- catch
323- _Error :_Reason when Role =:= client ->
324- [];
325- _Error :Reason ->
326- file_error (CertFile , {certfile , Reason })
312+ init_certificate_file (CertFile , PemCache ) ->
313+ case ssl_certificate :file_to_certificats (CertFile , PemCache ) of
314+ [] ->
315+ Reason = cert_file_error (CertFile ),
316+ file_error (CertFile , Reason );
317+ Certs ->
318+ Certs
327319 end .
328320
329321init_private_key (#{algorithm := _ , sign_fun := _SignFun } = Key , _ , _ ) ->
@@ -2040,6 +2032,21 @@ ciphers_for_version([AtomVersion | _], CurrentSuites, Record) ->
20402032 [Suite || Suite <- CurrentSuites , lists :member (Suite , Suites )]
20412033 end .
20422034
2035+ cert_file_error (CertFile ) ->
2036+ % % ssl_certificate:file_to_certificats
2037+ % % ignores file errors to be efficient
2038+ % % and works correctly for most executed
2039+ % % code paths.
2040+ Reason =
2041+ case file :read_file_info (CertFile ) of
2042+ {error , _ } = Error ->
2043+ Error ;
2044+ _ ->
2045+ % % A file existed but included no certs
2046+ no_certs
2047+ end ,
2048+ {options , {certfile , binary_to_list (CertFile ), Reason }}.
2049+
20432050% %%--------------------------------------------------------------
20442051% %% Tracing
20452052% %%--------------------------------------------------------------------
0 commit comments