Erlang 21

ssl




erlang

ssl

मॉड्यूल

ssl

मॉड्यूल सारांश

सुरक्षित सॉकेट लेयर के लिए इंटरफ़ेस फ़ंक्शंस

विवरण

इस मॉड्यूल में SSL / TLS / DTLS प्रोटोकॉल के लिए इंटरफ़ेस फ़ंक्शंस हैं। समर्थित मानकों के बारे में विस्तृत जानकारी के लिए ssl(6)

जानकारी का प्रकार

SSL / TLS / DTLS के कार्यों में निम्न डेटा प्रकारों का उपयोग किया जाता है:

boolean() =

true | false

option() =

socketoption() | ssl_option() | transport_option()

socketoption() =

proplists:property()

डिफ़ॉल्ट सॉकेट विकल्प हैं [{mode,list},{packet, 0},{header, 0},{active, true}]

मान्य विकल्पों के लिए, gen_tcp(3) , gen_tcp(3) और gen_udp(3) मैनुअल पेजों को कर्नेल में देखें। ध्यान दें कि पैकेट जैसे स्ट्रीम उन्मुख विकल्प केवल एसएसएल / टीएलएस के लिए प्रासंगिक हैं न कि डीटीएलएस के लिए

ssl_option() =

{verify, verify_type()}

| {verify_fun, {fun(), term()}}

| {fail_if_no_peer_cert, boolean()}

| {depth, integer()}

| {cert, public_key:der_encoded()}

| {certfile, path()}

| {key, {'RSAPrivateKey'| 'DSAPrivateKey' | 'ECPrivateKey' | 'PrivateKeyInfo', public_key:der_encoded()} | #{algorithm := rsa | dss | ecdsa, engine := crypto:engine_ref(), key_id := crypto:key_id(), password => crypto:password()}

| {keyfile, path()}

| {password, string()}

| {cacerts, [public_key:der_encoded()]}

| {cacertfile, path()}

| {dh, public_key:der_encoded()}

| {dhfile, path()}

| {ciphers, ciphers()}

| {user_lookup_fun, {fun(), term()}}, {psk_identity, string()}, {srp_identity, {string(), string()}}

| {reuse_sessions, boolean()}

| {reuse_session, fun()} {next_protocols_advertised, [binary()]}

| {client_preferred_next_protocols, {client | server, [binary()]} | {client | server, [binary()], binary()}}

| {log_alert, boolean()}

| {server_name_indication, hostname() | disable}

| {customize_hostname_check, list()}

| {sni_hosts, [{hostname(), [ssl_option()]}]}

| {sni_fun, SNIfun::fun()}

transport_option() =

{cb_info, {CallbackModule::atom(), DataTag::atom(), ClosedTag::atom(), ErrTag:atom()}}

TLS के लिए {gen_tcp, tcp, tcp_closed, tcp_error} लिए {gen_udp, udp, udp_closed, udp_error} और {gen_udp, udp, udp_closed, udp_error} लिए {gen_udp, udp, udp_closed, udp_error} । परिवहन परत को अनुकूलित करने के लिए इस्तेमाल किया जा सकता है। TLS के लिए कॉलबैक मॉड्यूल को एक विश्वसनीय परिवहन प्रोटोकॉल को लागू करना चाहिए, gen_tcp रूप में व्यवहार करना चाहिए, और inet:setopts/2 अनुरूप कार्य करना चाहिए inet:setopts/2 , inet:getopts/2 , inet:peername/1 , inet:sockname/1 , inet:sockname/1 , और inet:port/1 । कॉलबैक gen_tcp को विशेष रूप से व्यवहार किया जाता है और सीधे inet कॉल करता है। DTLS के लिए इस सुविधा को समीचीन माना जाना चाहिए।

CallbackModule =

atom()

DataTag =

atom()

सॉकेट डेटा संदेश में उपयोग किया जाता है।

ClosedTag =

atom()

सॉकेट बंद संदेश में उपयोग किया जाता है।

verify_type() =

verify_none | verify_peer

path() =

string()

एक फ़ाइल पथ का प्रतिनिधित्व करता है।

public_key:der_encoded() =

binary()

ASN.1 डीर-एन्कोडेड संस्था एक एरलैंग बाइनरी के रूप में।

host() =

hostname() | ipaddress()

hostname() =

string() - DNS hostname

ip_address() =

{N1,N2,N3,N4} % IPv4 | {K1,K2,K3,K4,K5,K6,K7,K8} % IPv6

sslsocket() =

न झिल्लड़()

protocol_version() =

ssl_tls_protocol() | dtls_protocol()

sslv3 | tlsv1 | 'tlsv1.1' | 'tlsv1.2'

dtls_protocol() =

'dtlsv1' | 'dtlsv1.2'

ciphers() =

= [ciphersuite()]

Ssl-8.2.4 से पहले संस्करणों द्वारा स्वीकार किए गए टुपल्स और स्ट्रिंग प्रारूप पीछे की संगतता के लिए परिवर्तित हो जाएंगे

ciphersuite() =

#{key_exchange := key_exchange(), cipher := cipher(), mac := MAC::hash() | aead, prf := PRF::hash() | default_prf}

key_exchange()=

rsa | dhe_dss | dhe_rsa | dh_anon | psk | dhe_psk | rsa_psk | srp_anon | srp_dss | srp_rsa | ecdh_anon | ecdh_ecdsa | ecdhe_ecdsa | ecdh_rsa | ecdhe_rsa

cipher() =

rc4_128 | des_cbc | '3des_ede_cbc' | aes_128_cbc | aes_256_cbc | aes_128_gcm | aes_256_gcm | chacha20_poly1305

hash() =

md5 | sha | sha224 | sha256 | sha348 | sha512

prf_random() =

client_random | server_random

cipher_filters() =

[{key_exchange | cipher | mac | prf, algo_filter()}])

algo_filter() =

मज़ा (key_exchange () | सिफर () | हैश () | aead | default_prf) -> सच | असत्य

srp_param_type() =

srp_1024 | srp_1536 | srp_2048 | srp_3072 | srp_4096 | srp_6144 | srp_8192

SNIfun::fun()

= fun(ServerName :: string()) -> [ssl_option()]

named_curve() =

sect571r1 | sect571k1 | secp521r1 | brainpoolP512r1 | sect409k1 | sect409r1 | brainpoolP384r1 | secp384r1 | sect283k1 | sect283r1 | brainpoolP256r1 | secp256k1 | secp256r1 | sect239k1 | sect233k1 | sect233r1 | secp224k1 | secp224r1 | sect193r1 | sect193r2 | secp192k1 | secp192r1 | sect163k1 | sect163r1 | sect163r2 | secp160k1 | secp160r1 | secp160r2

hello_extensions() =

#{renegotiation_info => signature_algs => [{hash(), ecsda| rsa| dsa}] | undefined alpn => binary() | undefined, next_protocol_negotiation, srp => string() | undefined, ec_point_formats , elliptic_curves = [oid] | undefined sni = string()} }

TLS / DTLS वैकल्पिक विवरण - सर्वर और ग्राहक के लिए कॉमोन

निम्नलिखित विकल्पों का क्लाइंट और सर्वर में एक ही अर्थ है:

{protocol, tls | dtls}

परिवहन परत सुरक्षा के लिए TLS या DTLS प्रोटोकॉल चुनें। TTP में ओटीपी 20 में पेश किए गए डिफॉल्ट्स, इस रिलीज़ में DTLS समर्थन को प्रायोगिक माना जाता है। यूडीपी की तुलना में अन्य परिवहन अभी तक समर्थित नहीं हैं।

{handshake, hello | full}

full करने के लिए चूक। यदि हेलो निर्दिष्ट किया गया है तो हेलो संदेश के बाद हाथ मिलाना बंद हो जाएगा और उपयोगकर्ता को हैंडशेक_ कॉन्टिन्यू handshake_continue/3 या handshake_cancel/1 कॉल करके हैंडशेक को जारी रखने या निरस्त करने से पहले हैलो एक्सटेंशन के आधार पर निर्णय लेने की संभावना देगा।

{cert, public_key:der_encoded()}

DER- एन्कोडेड उपयोगकर्ता प्रमाणपत्र। यदि इस विकल्प की आपूर्ति की जाती है, तो यह ऑप्शन certfile ओवरराइड certfile

{certfile, path()}

उपयोगकर्ता प्रमाण पत्र वाली फ़ाइल का पथ।

{key, {'RSAPrivateKey'| 'DSAPrivateKey' | 'ECPrivateKey' |'PrivateKeyInfo', public_key:der_encoded()} | #{algorithm := rsa | dss | ecdsa, engine := crypto:engine_ref(), key_id := crypto:key_id(), password => crypto:password()}

डीईआर-एन्कोडेड उपयोगकर्ता की निजी कुंजी या एक क्रिप्टो इंजन और उसके प्रमुख संदर्भ को संदर्भित करने वाला एक नक्शा जो वैकल्पिक रूप से पासवर्ड से सुरक्षित हो सकता है, सेप्टो crypto:engine_load/4 और Crypto's Users Guide । यदि इस विकल्प की आपूर्ति की जाती है, तो यह विकल्प keyfile ओवरराइड करता है।

{keyfile, path()}

उपयोगकर्ता की निजी PEM- एन्कोड की गई फ़ाइल में पथ। चूंकि PEM-files में कई प्रविष्टियाँ हो सकती हैं, इसलिए यह विकल्प उसी फ़ाइल में डिफॉल्ट करता है जैसा कि ऑप्शन certfile द्वारा दिया गया है।

{password, string()}

स्ट्रिंग जिसमें उपयोगकर्ता का पासवर्ड है। केवल तभी उपयोग किया जाता है जब निजी कीफ़ाइल पासवर्ड से सुरक्षित हो।

{ciphers, ciphers()}

समर्थित सिफर सुइट्स। फ़ंक्शन cipher_suites/0 का उपयोग डिफ़ॉल्ट रूप से समर्थित सभी सिफर को खोजने के लिए किया जा सकता है। सभी उपलब्ध सिफर सुइट्स को खोजने के लिए cipher_suites(all) को बुलाया जा सकता है। प्री-शेयर्ड की ( RFC 4279 और RFC 5487 ), सिक्योर रिमोट पासवर्ड ( RFC 5054 ), RC4 सिफर सुइट्स, और अनाम सिफर सूट तभी काम करते हैं यदि इस विकल्प को स्पष्ट रूप से सक्षम किया गया हो; वे सहकर्मी द्वारा भी समर्थित / सक्षम हैं। बेनामी सिफर सुइट्स को केवल परीक्षण के उद्देश्य के लिए समर्थित किया जाता है और इसका उपयोग सुरक्षा मामलों के दौरान नहीं किया जाता है।

{eccs, [named_curve()]}

नामित वक्रों के लिए वरीयता के क्रम को निर्दिष्ट करने और उनका उपयोग करते समय उनके उपयोग को प्रतिबंधित करने की अनुमति देता है।

{secure_renegotiate, boolean()}

निर्दिष्ट करता है कि Renegotiation प्रयास को अस्वीकार करने के लिए जो RFC 5746 तक नहीं रहता है। डिफ़ॉल्ट रूप से secure_renegotiate सही पर सेट किया जाता true , अर्थात, सुरक्षित secure_renegotiate लागू किया जाता है। यदि false सुरक्षित पुनर्जागरण के लिए सेट किया जाता है, तब भी यदि संभव हो तो उपयोग किया जाएगा, लेकिन यह असुरक्षित पुनर्जागरण पर वापस आता है यदि सहकर्मी RFC 5746 समर्थन नहीं करता है।

{depth, integer()}

गैर-स्व-जारी किए गए मध्यवर्ती प्रमाण पत्र की अधिकतम संख्या जो एक वैध प्रमाणीकरण पथ में सहकर्मी प्रमाणपत्र का पालन कर सकते हैं। इसलिए, यदि गहराई 0 है, तो पीईआर को विश्वसनीय रॉट-सीए द्वारा सीधे हस्ताक्षरित किया जाना चाहिए; यदि 1 मार्ग PEER, CA, ROOT-CA हो सकता है; अगर 2 मार्ग PEER, CA, CA, ROOT-CA, और इसी तरह हो सकते हैं। डीफॉल्ट मूल्य 1 है।

{verify_fun, {Verifyfun :: fun(), InitialUserState :: term()}}

सत्यापन मज़ा को इस प्रकार परिभाषित किया जाना है:

fun(OtpCert :: #'OTPCertificate'{}, Event :: {bad_cert, Reason :: atom() | {revoked,
atom()}} |
	     {extension, #'Extension'{}}, InitialUserState :: term()) ->
	{valid, UserState :: term()} | {valid_peer, UserState :: term()} |
	{fail, Reason :: term()} | {unknown, UserState :: term()}.

सत्यापन त्रुटि को X509-पथ सत्यापन के दौरान कहा जाता है जब एक त्रुटि या एसएसएल आवेदन के लिए अज्ञात एक्सटेंशन का सामना करना पड़ता है। यह तब भी कहा जाता है जब उपयोगकर्ता प्रमाण पत्र में पथ के सत्यापन को उपयोगकर्ता के आवेदन के लिए पथ के सत्यापन के लिए मान्य माना जाता है। यह सत्यापन प्रमाणपत्र के लिए दूसरे तर्क के रूप में valid_peer या valid का उपयोग करके सहकर्मी प्रमाणपत्र और सीए प्रमाणपत्र के बीच अंतर करता है। #'OTPCertificate'{} और #'Extension'{} परिभाषा के लिए public_key User's Guide देखें।

  • यदि सत्यापित कॉलबैक मज़ा {fail, Reason} , तो सत्यापन प्रक्रिया तुरंत बंद हो जाती है, एक चेतावनी सहकर्मी को भेजी जाती है, और TLS / DTLS हैंडशेक टर्मिनेट होता है।

  • यदि सत्यापन कॉलबैक मज़ा {valid, UserState} , तो सत्यापन प्रक्रिया जारी रहती है।

  • यदि सत्यापित कॉलबैक मज़ा हमेशा {valid, UserState} , तो TLS / DTLS हैंडशेक सत्यापन विफलताओं के संबंध में समाप्त नहीं होता है और कनेक्शन स्थापित हो जाता है।

  • यदि उपयोगकर्ता एप्लिकेशन के लिए अज्ञात एक्सटेंशन के साथ कॉल किया जाता है, तो रिटर्न मान {unknown, UserState} का उपयोग किया जाना है।

    ध्यान दें कि यदि मजाक महत्वपूर्ण के रूप में चिह्नित एक्सटेंशन के लिए unknown , तो सत्यापन विफल हो जाएगा।

डिफ़ॉल्ट विकल्प verify_fun verify_peer mode :

{fun(_,{bad_cert, _} = Reason, _) ->
	 {fail, Reason};
    (_,{extension, _}, UserState) ->
	 {unknown, UserState};
    (_, valid, UserState) ->
	 {valid, UserState};
    (_, valid_peer, UserState) ->
         {valid, UserState}
 end, []}

डिफ़ॉल्ट विकल्प verify_fun मोड में verify_none :

{fun(_,{bad_cert, _}, UserState) ->
	 {valid, UserState};
    (_,{extension, #'Extension'{critical = true}}, UserState) ->
	 {valid, UserState};
    (_,{extension, _}, UserState) ->
	 {unknown, UserState};
    (_, valid, UserState) ->
	 {valid, UserState};
    (_, valid_peer, UserState) ->
         {valid, UserState}
 end, []}

संभव पथ सत्यापन त्रुटियों को फॉर्म {bad_cert, Reason} पर दिया गया है जहां Reason है:

unknown_ca

विश्वसनीय स्टोर में कोई विश्वसनीय सीए नहीं मिला। विश्वसनीय सीए आमतौर पर एक तथाकथित सीएओटी सीए है, जो एक स्व-हस्ताक्षरित प्रमाण पत्र है। ट्रस्ट का दावा एक मध्यवर्ती सीए के लिए किया जा सकता है (विश्वसनीय एंकर को एक्स partial_chain अनुसार स्व-हस्ताक्षरित नहीं होना चाहिए) विकल्प partial_chain का उपयोग करके।

selfsigned_peer

श्रृंखला में केवल एक स्व-हस्ताक्षरित प्रमाणपत्र शामिल था।

PKIX X-509-path validation error

संभावित कारणों के लिए, public_key:pkix_path_validation/3

{crl_check, boolean() | peer | best_effort }

प्रमाणपत्र श्रृंखला के पथ सत्यापन (public_key:pkix_path_validation/3) के दौरान सभी प्रमाणपत्रों पर CRL (प्रमाणपत्र निरस्तीकरण सूची) सत्यापन (public_key:pkix_crls_validate/3) false अवहेलना।

peer
जाँच केवल सहकर्मी प्रमाणपत्र पर की जाती है।
best_effort
यदि प्रमाणपत्र निरस्तीकरण स्थिति का निर्धारण नहीं किया जा सकता है तो इसे मान्य माना जाएगा।

कनेक्शन के लिए निर्दिष्ट CA प्रमाणपत्र का उपयोग CRLs को प्रमाणित करने वाली प्रमाण पत्र श्रृंखला के निर्माण के लिए किया जाएगा।

CRL को स्थानीय या बाहरी कैश से प्राप्त किया जाएगा। ssl_crl_cache_api(3) देखें।

{crl_cache, {Module :: atom(), {DbHandle :: internal | term(), Args :: list()}}}

निर्दिष्ट करें कि प्रमाणपत्र निरस्तीकरण सूचियों का लुकअप और कैशिंग कैसे करें। DbHandle internal और खाली तर्क सूची के साथ Module ssl_crl_cache डिफॉल्ट करता है।

दो कार्यान्वयन उपलब्ध हैं:

ssl_crl_cache

यह मॉड्यूल CRLs का कैश रखता है। ssl_crl_cache:insert/1 को फ़ंक्शन में ssl_crl_cache:insert/1 का उपयोग करके कैश में जोड़ा जा सकता है, और यदि निम्न तर्क निर्दिष्ट किया जाता है, तो वैकल्पिक रूप से HTTP के माध्यम से स्वचालित रूप से लाया जाता है:

{http, timeout()}

X509 certificate extensions में http URI के रूप में निर्दिष्ट CRLs के लाने में सक्षम करता है। ओटीपी इनसेट आवेदन की आवश्यकता है।

ssl_crl_hash_dir

यह मॉड्यूल एक निर्देशिका का उपयोग करता है जहां जारीकर्ता नाम के हैश द्वारा नामित फ़ाइलों में CRL को संग्रहीत किया जाता है।

फ़ाइल नाम में आठ हेक्साडेसिमल अंक होते हैं। इसके बाद, जहाँ N एक पूर्णांक होता है, जैसे 1a2b3c4d.r0 । सीआरएल के पहले संस्करण के लिए, N शून्य पर शुरू होता है, और प्रत्येक नए संस्करण के लिए, N एक से बढ़ जाता है। OpenSSL उपयोगिता c_rehash इस पैटर्न के अनुसार c_rehash पैदा c_rehash है।

किसी दिए गए हैश मान के लिए, यह मॉड्यूल शून्य से शुरू होने वाली सभी .r* फ़ाइलों को लगातार खोजता है, और उन फ़ाइलों को एक साथ लिया जाता है जो निरसन सूची बनाती हैं। CRL फाइलें जिनके nextUpdate फ़ील्ड अतीत में हैं, या जो कि एक अलग CA द्वारा जारी किए जाते हैं जिनके पास समान नाम हैश होता है, को बाहर रखा जाता है।

निम्नलिखित तर्क की आवश्यकता है:

{dir, string()}

उस निर्देशिका को निर्दिष्ट करता है जिसमें CRL पाया जा सकता है।

max_handshake_size

इंटेगर (24 बिट्स अहस्ताक्षरित)। DoS के हमलों से बचने के लिए वैध TLS हैंडशेक पैकेट के आकार को सीमित करने के लिए उपयोग किया जाता है। डिफाल्ट को 256 * 1024।

{partial_chain, fun(Chain::[DerCert]) -> {trusted_ca, DerCert} | unknown_ca }

भरोसे के रूप में श्रृंखला में एक मध्यवर्ती सीए का दावा करें। TLS तब public_key:pkix_path_validation/3 को विश्वसनीय एंकर और शेष श्रृंखला के रूप में चयनित CA के साथ करता है।

{versions, [protocol_version()]}

टीएलएस प्रोटोकॉल संस्करण ग्राहकों और सर्वरों द्वारा समर्थित है। यह विकल्प अनुप्रयोग वातावरण विकल्प protocol_version dtls_protocol_version और dtls_protocol_version ओवरराइड करता है। यदि पर्यावरण विकल्प सेट नहीं है, तो यह SSL अनुप्रयोग द्वारा समर्थित SSL-3.0 को छोड़कर सभी संस्करणों के लिए डिफॉल्ट करता है। ssl(6). भी देखें ssl(6).

{hibernate_after, integer()|undefined}

जब एक पूर्णांक-मूल्य निर्दिष्ट किया जाता है, तो TLS/DTLS-connection निष्क्रियता की निर्दिष्ट संख्या के बाद हाइबरनेशन में चला जाता है, इस प्रकार इसकी मेमोरी फ़ुटप्रिंट को कम करता है। जब undefined निर्दिष्ट किया जाता है (यह डिफ़ॉल्ट है), तो प्रक्रिया कभी भी हाइबरनेशन में नहीं जाती है।

{user_lookup_fun, {Lookupfun :: fun(), UserState :: term()}}

देखने का मज़ा इस प्रकार परिभाषित किया गया है:

fun(psk, PSKIdentity ::string(), UserState :: term()) ->
	{ok, SharedSecret :: binary()} | error;
fun(srp, Username :: string(), UserState :: term()) ->
	{ok, {SRPParams :: srp_param_type(), Salt :: binary(), DerivedKey :: binary()}} | error.

प्री-शेयर्ड की (PSK) सिफर सुइट्स के लिए, क्लाइंट और सर्वर द्वारा साझा किए गए रहस्य को निर्धारित करने के लिए लुकअप फन को कहा जाता है। क्लाइंट द्वारा कॉल किए जाने पर, PSKIdentity सर्वर द्वारा प्रस्तुत किए गए संकेत या अपरिभाषित पर सेट है। सर्वर द्वारा कॉल किए जाने पर, PSKIdentity क्लाइंट द्वारा प्रस्तुत पहचान है।

सिक्योर रिमोट पासवर्ड (एसआरपी) के लिए, मौज-मस्ती का उपयोग सर्वर द्वारा उन मापदंडों को प्राप्त करने के लिए किया जाता है जिसका उपयोग वह अपनी सत्र कुंजी उत्पन्न करने के लिए करता है। DerivedKey को RFC 2945 और RFC 5054 अनुसार प्राप्त किया जाना है: crypto:sha([Salt, crypto:sha([Username, <<$:>>, Password])])

{padding_check, boolean()}

केवल TLS-1.0 कनेक्शन को प्रभावित करता है। यदि इसे false सेट किया जाता false , तो यह ब्लॉक सिफर पैडिंग चेक को विरासत सॉफ्टवेयर के साथ इंटरोपर्ट करने में सक्षम बनाता है।

चेतावनी

{padding_check, boolean()} का उपयोग करना TLS को पूडल हमले के लिए असुरक्षित बनाता है।

{beast_mitigation, one_n_minus_one | zero_n | disabled}

SSL-3.0 और TLS-1.0 कनेक्शन को ही प्रभावित करता है। विरासत सॉफ्टवेयर के साथ हस्तक्षेप करने के लिए BEAST शमन रणनीति को बदलने के लिए उपयोग किया जाता है। Defaults to one_n_minus_one

one_n_minus_one - 1 / n-1 अधिकतम शमन one_n_minus_one करें।

zero_n - 0 / n zero_n शमन zero_n करें।

disabled - अधिकतम शमन अक्षम करें।

चेतावनी

{beast_mitigation, disabled} का उपयोग करके SSL या TLS को BEAST हमले के लिए असुरक्षित बना देता है।

Tls / dtls विकल्प विवरण - क्लाइंट साइड

निम्नलिखित विकल्प क्लाइंट-विशिष्ट हैं या क्लाइंट में सर्वर की तुलना में थोड़ा अलग अर्थ रखते हैं:

{verify, verify_type()}

मोड में verify_none डिफ़ॉल्ट व्यवहार सभी x509-पथ सत्यापन त्रुटियों की अनुमति देने के लिए है। विकल्प भी देखें verify_fun

{reuse_sessions, boolean()}

निर्दिष्ट करता है कि क्या क्लाइंट संभव होने पर सत्रों का पुन: उपयोग करने का प्रयास करता है।

{cacerts, [public_key:der_encoded()]}

डीईआर-एन्कोडेड विश्वसनीय प्रमाण पत्र। यदि यह विकल्प दिया जाता है तो यह विकल्प cacertfile ओवरराइड cacertfile

{cacertfile, path()}

PEM- एन्कोडेड CA प्रमाणपत्र वाली फ़ाइल का पथ। CA प्रमाणपत्र का उपयोग सर्वर प्रमाणीकरण के दौरान और क्लाइंट प्रमाणपत्र श्रृंखला के निर्माण के दौरान किया जाता है।

{alpn_advertised_protocols, [binary()]}

अनुप्रयोग-लेयर प्रोटोकॉल नेगोशिएशन (ALPN) के लिए उपयोग किए जाने वाले सर्वर द्वारा भेजे जाने वाले क्लाइंट द्वारा समर्थित प्रोटोकॉल की सूची। यदि सर्वर ALPN का समर्थन करता है तो वह इस सूची से एक प्रोटोकॉल का चयन करेगा; अन्यथा यह "no_application_protocol" अलर्ट के साथ कनेक्शन को विफल कर देगा। एक सर्वर जो ALPN का समर्थन नहीं करता है वह इस मान को अनदेखा करेगा।

प्रोटोकॉल की सूची में खाली बाइनरी नहीं होना चाहिए।

बातचीत किए गए प्रोटोकॉल को negotiated_protocol/1 फ़ंक्शन का उपयोग करके पुनर्प्राप्त किया जा सकता है।

{client_preferred_next_protocols, {Precedence :: server | client, ClientPrefs :: [binary()]}}
{client_preferred_next_protocols, {Precedence :: server | client, ClientPrefs :: [binary()], Default :: binary()}}

इंगित करता है कि क्लाइंट को अगला प्रोटोकॉल नेगोशिएशन करने की कोशिश करनी है।

यदि पूर्ववर्ती सर्वर है, तो बातचीत किया गया प्रोटोकॉल सर्वर विज्ञापित सूची पर दिखाया जाने वाला पहला प्रोटोकॉल है, जो क्लाइंट की विशेषज्ञ सूची में भी है।

यदि पूर्ववर्ती क्लाइंट है, तो बातचीत की गई प्रोटोकॉल क्लाइंट वरीयता सूची में दिखाया जाने वाला पहला प्रोटोकॉल है, जो सर्वर विज्ञापन सूची पर भी है।

यदि क्लाइंट किसी भी सर्वर विज्ञापित प्रोटोकॉल का समर्थन नहीं करता है या सर्वर किसी प्रोटोकॉल का विज्ञापन नहीं करता है, तो ग्राहक अपनी सूची में या डिफ़ॉल्ट प्रोटोकॉल (यदि कोई डिफ़ॉल्ट आपूर्ति की जाती है) में पहले प्रोटोकॉल पर वापस आ जाता है। यदि सर्वर नेक्स्ट प्रोटोकॉल नेगोशिएशन का समर्थन नहीं करता है, तो कनेक्शन समाप्त हो जाता है यदि कोई डिफ़ॉल्ट प्रोटोकॉल नहीं दिया गया है।

{psk_identity, string()}

क्लाइंट द्वारा सर्वर को प्रस्तुत की जाने वाली पहचान को निर्दिष्ट करता है। मैचिंग सीक्रेट user_lookup_fun कॉल करके पाया जाता है।

{srp_identity, {Username :: string(), Password :: string()}

सर्वर को प्रमाणित करने के लिए उपयोग करने के लिए उपयोगकर्ता नाम और पासवर्ड निर्दिष्ट करता है।

{server_name_indication, HostName :: hostname()}

TLS सर्वर नाम संकेत एक्सटेंशन में उपयोग किए जाने वाले होस्टनाम को निर्दिष्ट करें। यदि निर्दिष्ट नहीं है, तो यह connect/[3,4] के Host तर्क के लिए डिफ़ॉल्ट होगा जब तक कि यह टाइप इनसेट का नहीं है: ipaddress ()।

public_key:pkix_verify_hostname/2 का उपयोग सहकर्मी प्रमाणपत्र के hostname सत्यापन में public_key:pkix_verify_hostname/2 का उपयोग करके भी किया जाएगा।

{server_name_indication, disable}

सर्वर नाम इंडिकेशन एक्सटेंशन को भेजे जाने से रोकता है और होस्टनाम वेरिफिकेशन चेक public_key:pkix_verify_hostname/2 को निष्क्रिय करता है public_key:pkix_verify_hostname/2

{customize_hostname_check, Options::list()}

सहकर्मी प्रमाणपत्र के होस्टनाम सत्यापन को अनुकूलित करता है, क्योंकि अलग-अलग प्रोटोकॉल जो टीएलएस का उपयोग करते हैं जैसे कि HTTP या LDAP इसे अलग तरीके से करना चाहते हैं, संभव विकल्पों के लिए public_key:pkix_verify_hostname/3 देखें public_key:pkix_verify_hostname/3

{fallback, boolean()}

अवांछित सीएलएस संस्करण डाउनग्रेड से बचने के लिए विशेष सिफर सूट TLS_FALLBACK_SCSV भेजें। झूठे की अवहेलना करता है

चेतावनी

ध्यान दें कि यह विकल्प सामान्य टीएलएस उपयोग में आवश्यक नहीं है और इसका उपयोग नए ग्राहकों को लागू करने के लिए नहीं किया जाना चाहिए। लेकिन विरासत ग्राहक जो निम्नलिखित तरीके से कनेक्शन निकालते हैं

ssl:connect(Host, Port, [...{versions, ['tlsv2', 'tlsv1.1', 'tlsv1', 'sslv3']}])

ssl:connect(Host, Port, [...{versions, [tlsv1.1', 'tlsv1', 'sslv3']}, {fallback, true}])

ssl:connect(Host, Port, [...{versions, ['tlsv1', 'sslv3']}, {fallback, true}])

ssl:connect(Host, Port, [...{versions, ['sslv3']}, {fallback, true}])

अवांछित TLS संस्करण डाउनग्रेड से बचने के लिए इसका उपयोग कर सकते हैं। ध्यान दें कि TLS_FALLBACK_SCSV को कार्य की रोकथाम के लिए सर्वर द्वारा भी समर्थित होना चाहिए।

{signature_algs, [{hash(), ecdsa | rsa | dsa}]}

कुंजी विनिमय, पेलोड एन्क्रिप्शन, संदेश प्रमाणीकरण और छद्म यादृच्छिक गणना के लिए उपयोग किए जाने वाले सिफर सूट द्वारा बातचीत किए गए एल्गोरिदम के अलावा, टीएलएस 1.2 से, Section 7.4.1.4.1 in RFC 5246 टीएलएस हस्ताक्षर एल्गोरिथ्म विस्तार Section 7.4.1.4.1 in RFC 5246 उपयोग किया जा सकता है, जो बातचीत करने के लिए टीएलएस हैंडशेक के दौरान उपयोग करने के लिए हस्ताक्षर एल्गोरिथ्म। यदि 1.2 से कम टीएलएस संस्करण समर्थित नहीं हैं, तो ग्राहक इस विकल्प द्वारा निर्दिष्ट एल्गोरिदम के साथ एक टीएलएस हस्ताक्षर एल्गोरिथ्म एक्सटेंशन भेजेगा। के लिए चूक

[
%% SHA2
{sha512, ecdsa},
{sha512, rsa},
{sha384, ecdsa},
{sha384, rsa},
{sha256, ecdsa},
{sha256, rsa},
{sha224, ecdsa},
{sha224, rsa},
%% SHA
{sha, ecdsa},
{sha, rsa},
{sha, dsa},
]

एल्गोरिदम को पसंदीदा क्रम में होना चाहिए। चयनित हस्ताक्षर एल्गोरिथ्म जो चयनित हो सकता है हैश कार्यों को प्रतिबंधित कर सकता है। Ssl-8.0 में हटाए गए {md5, rsa} के लिए डिफ़ॉल्ट समर्थन

Tls / dtls विकल्प विवरण - सर्वर साइड

निम्नलिखित विकल्प सर्वर-विशिष्ट हैं या क्लाइंट की तुलना में सर्वर में थोड़ा अलग अर्थ रखते हैं:

{cacerts, [public_key:der_encoded()]}

डीईआर-एन्कोडेड विश्वसनीय प्रमाण पत्र। यदि यह विकल्प दिया जाता है तो यह विकल्प cacertfile ओवरराइड cacertfile

{cacertfile, path()}

PEM- एन्कोडेड CA प्रमाणपत्र वाली फ़ाइल का पथ। CA प्रमाणपत्र का उपयोग सर्वर प्रमाणपत्र श्रृंखला बनाने और क्लाइंट प्रमाणीकरण के लिए किया जाता है। प्रमाण पत्र का अनुरोध करने पर ग्राहक को पारित किए गए स्वीकार्य ग्राहक सीए की सूची में भी सीए का उपयोग किया जाता है। यदि क्लाइंट को सत्यापित करने की कोई आवश्यकता नहीं है और सर्वर प्रमाणपत्र के लिए कोई मध्यवर्ती CA नहीं हैं, तो छोड़ा जा सकता है।

{dh, public_key:der_encoded()}

डीईआर-एन्कोडेड डिफी-हेलमैन पैरामीटर। यदि निर्दिष्ट किया जाता है, तो यह dhfile विकल्प को ओवरराइड dhfile

{dhfile, path()}

PEM- एन्कोडेड डिफि हेलमैन मानदंड वाली फ़ाइल में पथ यदि सर्वर द्वारा उपयोग किया जा सकता है, यदि डिफी हेलमैन कुंजी एक्सचेंज का उपयोग कर एक सिफर सूट बातचीत की जाती है। यदि निर्दिष्ट नहीं है, तो डिफ़ॉल्ट पैरामीटर का उपयोग किया जाता है।

{verify, verify_type()}

एक सर्वर केवल मोड verify_peer में x509-पथ सत्यापन करता है, क्योंकि यह तब क्लाइंट को एक प्रमाणपत्र अनुरोध भेजता है (यह संदेश भेजा नहीं जाता है यदि सत्यापित विकल्प verify_none )। फिर आप विकल्प को भी निर्दिष्ट करना चाह सकते हैं fail_if_no_peer_cert

{fail_if_no_peer_cert, boolean()}

टीएलएस / डीटीएलएस सर्वर द्वारा {verify, verify_peer} साथ प्रयोग किया जाता है। यदि true सेट किया जाता true , तो सर्वर विफल हो जाता है यदि क्लाइंट के पास भेजने के लिए कोई प्रमाण पत्र नहीं है, अर्थात खाली प्रमाणपत्र भेजता है। यदि false सेट किया जाता false , तो यह तभी विफल होता है जब ग्राहक एक अमान्य प्रमाणपत्र (एक खाली प्रमाणपत्र वैध माना जाता है) भेजता है। झूठे की अवहेलना करता है।

{reuse_sessions, boolean()}

निर्दिष्ट करता है कि सर्वर क्लाइंट द्वारा अनुरोध किए जाने पर सत्र का पुन: उपयोग करने के लिए सहमत है। विकल्प reuse_session भी देखें।

{reuse_session, fun(SuggestedSessionId, PeerCert, Compression, CipherSuite) -> boolean()}

यदि सत्र का पुन: उपयोग किया जाना है या नहीं, यह तय करने के लिए TLS / DTLS सर्वर को स्थानीय नीति में सक्षम बनाता है। सार्थक तभी है जब reuse_sessions सही पर सेट हो। PeerCert एक binary() , PeerCert एक डीईआर-एन्कोडेड प्रमाण पत्र है, Compression एक एन्यूमरेशन पूर्णांक है, और CipherSuite प्रकार CipherSuite ciphersuite()

{alpn_preferred_protocols, [binary()]}

सर्वर एप्लिकेशन-लेयर प्रोटोकॉल निगोशिएशन (ALPN) को करने का प्रयास करेगा।

प्रोटोकॉल की सूची वरीयता के क्रम में है। प्रोटोकॉल पर बातचीत की गई सूची में पहला होगा जो क्लाइंट द्वारा विज्ञापित प्रोटोकॉल में से एक से मेल खाता है। यदि कोई प्रोटोकॉल मेल नहीं खाता है, तो सर्वर "no_application_protocol" अलर्ट के साथ कनेक्शन को विफल कर देगा।

बातचीत किए गए प्रोटोकॉल को negotiated_protocol/1 फ़ंक्शन का उपयोग करके पुनर्प्राप्त किया जा सकता है।

{next_protocols_advertised, Protocols :: [binary()]}

क्लाइंट को भेजने के लिए प्रोटोकॉल की सूची यदि ग्राहक इंगित करता है कि यह अगले प्रोटोकॉल एक्सटेंशन का समर्थन करता है। क्लाइंट एक प्रोटोकॉल का चयन कर सकता है जो इस सूची में नहीं है। प्रोटोकॉल की सूची में खाली बाइनरी नहीं होना चाहिए। यदि सर्वर नेक्स्ट प्रोटोकॉल पर बातचीत करता है, तो उसे negotiated_next_protocol/1 जरिए एक्सेस किया जा सकता है_ negotiated_next_protocol/1 विधि।

{psk_identity, string()}

सर्वर पहचान संकेत निर्दिष्ट करता है, जो सर्वर क्लाइंट को प्रस्तुत करता है।

{log_alert, boolean()}

यदि false सेट किया जाता false , तो त्रुटि रिपोर्ट प्रदर्शित नहीं होती हैं।

{honor_cipher_order, boolean()}

यदि यह true , तो सिफर चयन के लिए सर्वर वरीयता का उपयोग करें। यदि false (डिफ़ॉल्ट) पर सेट किया गया है, तो क्लाइंट प्राथमिकता का उपयोग करें।

{sni_hosts, [{hostname(), [ssl_option()]}]}

यदि सर्वर SNI (सर्वर नेम इंडिकेशन) को क्लाइंट से प्राप्त करता है जो कि sni_hosts विकल्प में सूचीबद्ध होस्ट से मेल खाता है, तो उस होस्ट के लिए विशिष्ट विकल्प पहले से निर्दिष्ट विकल्पों को ओवरराइड करेगा। विकल्प sni_fun , और sni_hosts पारस्परिक रूप से अनन्य हैं।

{sni_fun, SNIfun::fun()}

यदि सर्वर क्लाइंट से एक SNI (सर्वर नाम संकेत) प्राप्त करता है, तो दिए गए फ़ंक्शन को संकेतित सर्वर के लिए [ssl_option()] को पुनः प्राप्त करने के लिए बुलाया जाएगा। इन विकल्पों को पूर्वनिर्धारित [ssl_option()] में विलय कर दिया जाएगा। फ़ंक्शन को इस रूप में परिभाषित किया जाना चाहिए: fun(ServerName :: string()) -> [ssl_option()] और इसे एक मजेदार या नामित fun module:function/1 रूप में निर्दिष्ट किया जा सकता है fun module:function/1 विकल्प sni_fun , और sni_hosts पारस्परिक रूप से अनन्य हैं।

{client_renegotiation, boolean()}
प्रोटोकॉल में जो क्लाइंट-आरंभ किए गए पुनर्जागरण का समर्थन करते हैं, ऐसे ऑपरेशन के संसाधनों की लागत क्लाइंट की तुलना में सर्वर के लिए अधिक होती है। यह सेवा हमलों से इनकार करने के लिए एक वेक्टर के रूप में कार्य कर सकता है। एसएसएल एप्लिकेशन पहले से ही इस तरह के प्रयासों का मुकाबला करने के लिए उपाय करता है, लेकिन इस विकल्प को false सेट करके क्लाइंट-आरंभ किए गए पुनर्जागरण को सख्ती से अक्षम किया जा सकता है। डिफ़ॉल्ट मान true । ध्यान दें कि पुनर्जागरण को अक्षम करने के परिणामस्वरूप लंबे समय तक रहने वाले कनेक्शन अनुपयोगी हो सकते हैं क्योंकि संदेशों की संख्या की सीमा के कारण अंतर्निहित सिफर सुइट को लागू कर सकते हैं।
{honor_cipher_order, boolean()}
यदि सही है, तो सिफर चयन के लिए सर्वर की वरीयता का उपयोग करें। यदि गलत (डिफ़ॉल्ट), क्लाइंट की वरीयता का उपयोग करें।
{honor_ecc_order, boolean()}
यदि सही है, तो ECC वक्र चयन के लिए सर्वर की वरीयता का उपयोग करें। यदि गलत (डिफ़ॉल्ट), क्लाइंट की वरीयता का उपयोग करें।
{signature_algs, [{hash(), ecdsa | rsa | dsa}]}

इस विकल्प द्वारा निर्दिष्ट एल्गोरिदम टीएलएस-1.2 में पेश किए गए एक हस्ताक्षर एल्गोरिथ्म वार्ता में सर्वर द्वारा स्वीकार किए गए लोग होंगे। क्लाइंट सर्टिफिकेट मांगे जाने पर क्लाइंट को एल्गोरिदम भी ऑफर किया जाएगा। अधिक जानकारी के लिए corresponding client option

सामान्य

जब कोई TLS / DTLS सॉकेट सक्रिय मोड (डिफ़ॉल्ट) में होता है, तो सॉकेट से डेटा सॉकेट के मालिक को संदेशों के रूप में दिया जाता है:

  • {ssl, Socket, Data}

  • {ssl_closed, Socket}

  • {ssl_error, Socket, Reason}

एक Timeout तर्क मिलीसेकंड में एक टाइम-आउट निर्दिष्ट करता है। तर्क Timeout लिए डिफ़ॉल्ट मान infinity

निर्यात

append_cipher_suites (आस्थगित, सूट) -> सिफर ()

प्रकार

Make Deferred suites सबसे कम पसंद किए जाने वाले सूट बन जाते हैं, जो कि उन्हें वर्तमान समय में Suites से हटाने के बाद सिफर सूट सूची सूट के अंत में डाल दिया जाता है। Deferred सिफर सूट की सूची या फ़िल्टर की एक सूची हो सकती है, जिस स्थिति में फ़िल्टर का उपयोग Deferred सिफर सूची निकालने के लिए Suites पर किया जाता है।

cipher_suites () ->
cipher_suites (प्रकार) -> old_ciphers ()

प्रकार

OTP 21 में पदावनत, इसके बजाय cipher_suites/2 उपयोग करें।

सिफर_साइट्स (समर्थित, संस्करण) -> सिफर ()

प्रकार

सभी डिफ़ॉल्ट या समर्थित सभी (अनाम को छोड़कर), या सभी अनाम सिफर TLS संस्करण के लिए सूट करता है

eccs () ->
eccs (प्रोटोकॉल_version ()) -> [name_curve ()]

समर्थित ईसीसी की सूची लौटाता है। eccs() सभी समर्थित प्रोटोकॉल के साथ eccs(Protocol) को कॉल करने और फिर आउटपुट को कम करने के बराबर है।

clear_pem_cache () -> ठीक है

पीएसएल फाइलें, जो ssl एपीआई-फंक्शंस द्वारा उपयोग की जाती हैं, कैश की जाती हैं। कैश को नियमित रूप से यह देखने के लिए चेक किया जाता है कि क्या कोई कैश एंट्री को अमान्य किया जाना चाहिए, हालांकि यह फ़ंक्शन पूरे कैश को बिना शर्त साफ करने का एक तरीका प्रदान करता है।

कनेक्ट (सॉकेट, SslOptions) ->
कनेक्ट (सॉकेट, SslOptions, Timeout) -> {ठीक है, SslSocket} | {ठीक है, SslSocket, Ext} | {त्रुटि, कारण}

प्रकार

एक gen_tcp , या समकक्ष, TLS सॉकेट से जुड़े सॉकेट को अपग्रेड करता है, यानी क्लाइंट-साइड TLS हैंडशेक करता है।

ध्यान दें

यदि विकल्प verify होता है, तो verify_peer के लिए सेट किया verify_peer , तो विकल्प server_name_indication भी निर्दिष्ट किया जाएगा, यदि यह सर्वर नाम नहीं है तो इंडिकेशन एक्सटेंशन नहीं भेजा जाएगा, और public_key:pkix_verify_hostname/2 को ReferenceID रूप में कनेक्शन के आईपी पते के साथ बुलाया जाएगा, जिसे जो आप चाहते हैं वह नहीं है।

यदि विकल्प {handshake, hello} का उपयोग किया जाता है तो सर्वर हेलो संदेश प्राप्त करने के बाद हैंडशेक को रोक दिया जाता है और सफलता की प्रतिक्रिया {ok, SslSocket, Ext} बजाय {ok, SslSocket} । इसके बाद हैंडशेक_ handshake_continue/3 या handshake_cancel/1 कॉल करके हैंडशेक जारी या रद्द किया जाता है।

कनेक्ट (होस्ट, पोर्ट, विकल्प) ->
कनेक्ट (होस्ट, पोर्ट, विकल्प, टाइमआउट) -> {ठीक है, SslSocket} | {ठीक है, SslSocket, Ext} | {त्रुटि, कारण}

प्रकार

Host , Port लिए एक TLS / DTLS कनेक्शन खोलता है।

जब verify होता है, तो public_key:pkix_verify_hostname/2 को verify_peer सेट किया verify_peer है public_key:pkix_verify_hostname/2 को सामान्य x509-पथ सत्यापन जाँचों के अलावा किया जाएगा। यदि चेक त्रुटि में विफल रहता है तो {bad_cert, hostname_check_failed} को प्रचार सत्यापन verify_fun लिए प्रचारित किया जाएगा, जहां public_key:pkix_verify_hostname/3 API की पूरी संभावनाओं का उपयोग करके अनुकूलित चेक करना संभव है। जब विकल्प server_name_indication प्रदान किया जाता है, तो इसका मान (DNS नाम) public_key:pkix_verify_hostname/2 ReferenceID रूप में उपयोग किया जाएगा। जब कोई server_name_indication विकल्प नहीं दिया जाता है, तो Host तर्क को सर्वर नाम संकेत एक्सटेंशन के रूप में उपयोग किया जाएगा। Host तर्क का उपयोग public_key:pkix_verify_hostname/2 चेक के लिए भी किया जाएगा और यदि Host तर्क एक inet:ip_address() चेक के लिए उपयोग की जाने वाली ReferenceID {ip, Host} dns_id {ip, Host} हो जाएगी। dns_id को dns_id साथ माना जाएगा। यदि वह विफल रहता है।

ध्यान दें

अच्छी प्रथाओं के अनुसार प्रमाणपत्रों को आईपी-पतों का उपयोग "सर्वर नाम" के रूप में नहीं करना चाहिए। एक बंद नेटवर्क के बाहर ऐसा होने पर बहुत आश्चर्य होगा।

यदि विकल्प {handshake, hello} का उपयोग किया जाता है तो सर्वर हेलो संदेश प्राप्त करने के बाद हैंडशेक को रोक दिया जाता है और सफलता की प्रतिक्रिया {ok, SslSocket, Ext} बजाय {ok, SslSocket} । इसके बाद हैंडशेक_ handshake_continue/3 या handshake_cancel/1 कॉल करके हैंडशेक जारी या रद्द किया जाता है।

बंद (SslSocket) -> ठीक है | {त्रुटि, कारण}

प्रकार

एक TLS / DTLS कनेक्शन बंद कर देता है।

बंद (SslSocket, कैसे) -> ठीक | {ओके, पोर्ट ()} | {त्रुटि, कारण}

प्रकार

टीएलएस कनेक्शन को बंद या डाउनग्रेड करता है। बाद के मामले में सहकर्मी से टीएलएस निकट चेतावनी प्राप्त करने के बाद परिवहन कनेक्शन NewController प्रक्रिया को सौंप दिया जाएगा। लौटे परिवहन सॉकेट में निम्न विकल्प सेट होंगे: [{active, false}, {packet, 0}, {mode, binary}]

control_process (SslSocket, NewOwner) -> ठीक | {त्रुटि, कारण}

प्रकार

SSL सॉकेट के लिए एक नई नियंत्रण प्रक्रिया असाइन करता है। एक नियंत्रण प्रक्रिया एक एसएसएल सॉकेट का मालिक है, और सॉकेट से सभी संदेश प्राप्त करता है।

connection_information (SslSocket) -> {ठीक है, परिणाम} | {त्रुटि, कारण}

प्रकार

सार्थक परमाणु, ऊपर निर्दिष्ट नहीं, ssl विकल्प नाम हैं।

कनेक्शन के बारे में सबसे अधिक प्रासंगिक जानकारी लौटाता है, एसएसएल विकल्प जो अपरिभाषित हैं, उन्हें फ़िल्टर किया जाएगा। ध्यान दें कि कनेक्शन की सुरक्षा को प्रभावित करने वाले मान केवल तभी वापस लौटाए जाएंगे जब कनेक्शन / सूचना / 2 द्वारा स्पष्ट रूप से अनुरोध किया गया हो।

connection_information (SslSocket, आइटम) -> {ठीक है, परिणाम} | {त्रुटि, कारण}

प्रकार

ध्यान दें कि client_random, server_random और master_secret ऐसे मूल्य हैं जो कनेक्शन की सुरक्षा को प्रभावित करते हैं। सार्थक परमाणु, ऊपर निर्दिष्ट नहीं, ssl विकल्प नाम हैं।

कनेक्शन के बारे में अनुरोधित जानकारी आइटम लौटाता है, यदि वे परिभाषित हैं।

ध्यान दें

यदि केवल अपरिभाषित विकल्पों का अनुरोध किया जाता है तो परिणामी सूची खाली हो सकती है।

filter_cipher_suites (सूट, फ़िल्टर) -> सिफर ()

प्रकार

यदि सिफर सूट के किसी भी भाग के लिए फ़िल्टर फ़ंक्शन में से कोई भी गलत हो जाता है, तो सिफर स्वीट निकालता है। यह फ़ंक्शन यह भी सुनिश्चित करने के लिए डिफ़ॉल्ट फ़िल्टर फ़ंक्शंस को कॉल करता है कि सिफर सुइट्स क्रिप्टो द्वारा समर्थित हैं। यदि कुछ भाग के लिए कोई फ़िल्टर फ़ंक्शन नहीं दिया गया है तो डिफ़ॉल्ट व्यवहार मज़ेदार (एल्गोरिथम) -> सत्य है।

format_error (कारण) -> स्ट्रिंग ()

प्रकार

SSL फ़ंक्शन द्वारा दी गई त्रुटि को मुद्रण योग्य स्ट्रिंग के रूप में प्रस्तुत करता है।

getopts (SslSocket, OptionNames) -> {ठीक है, [सॉकेटॉप्शन ()]} | {त्रुटि, कारण}

प्रकार

निर्दिष्ट सॉकेट विकल्पों के मूल्यों को प्राप्त करता है।

getstat (SslSocket) -> {ठीक है, OptionValues} | {त्रुटि, inet: posix ()}
getstat (SslSocket, OptionNames) -> {ठीक है, OptionValues} | {त्रुटि, inet: posix ()}

प्रकार

अंतर्निहित टीसीपी सॉकेट के लिए एक या अधिक सांख्यिकीय विकल्प प्राप्त करता है।

इनसेट देखें: सांख्यिकी विकल्पों के विवरण के लिए गेटस्टैट / 2।

हैंडशेक (HsSocket) ->
हाथ मिलाना (HsSocket, Timeout) -> {ठीक है, SslSocket} | {त्रुटि, कारण}

प्रकार

SSL / TLS / DTLS सर्वर-साइड हैंडशेक करता है।

हैंडशेक सफल होने पर एक नया TLS / DTLS सॉकेट लौटाता है।

हैंडशेक (सॉकेट, SslOptions) ->
हाथ मिलाना (सॉकेट, SslOptions, Timeout) -> {ठीक है, SslSocket} | {ठीक है, SslSocket, Ext} | {त्रुटि, कारण}

प्रकार

यदि Socket एक साधारण socket() : एक gen_tcp , या समतुल्य, सॉकेट को एक SSL सॉकेट में अपग्रेड करें, जो कि SSL / TLS सर्वर-साइड हैंडशेक करता है और एक TLS सॉकेट लौटाता है।

चेतावनी

Socket इस फ़ंक्शन को कॉल करने से पहले निष्क्रिय मोड ({सक्रिय, गलत}) में होगा या इस फ़ंक्शन का व्यवहार अपरिभाषित है।

यदि Socket एक sslsocket() : listen/2 में निर्दिष्ट लोगों को अतिरिक्त SSL / TLS / DTLS विकल्प प्रदान करता है और फिर SSL / TLS / DTLS हैंडशेक करता है। हैंडशेक सफल होने पर एक नया TLS / DTLS सॉकेट लौटाता है।

यदि विकल्प {handshake, hello} निर्दिष्ट किया गया है तो क्लाइंट हेलो संदेश प्राप्त करने के बाद हैंडशेक को रोक दिया जाता है और सफलता की प्रतिक्रिया {ok, SslSocket, Ext} बजाय {ok, SslSocket} । इसके बाद हैंडशेक_ handshake_continue/3 या handshake_cancel/1 कॉल करके हैंडशेक जारी या रद्द किया जाता है।

हैंडशेक_कैंसेल (SslSocket) -> ठीक है

प्रकार

एक घातक USER_CANCELED अलर्ट के साथ हैंडशेक रद्द करें।

हाथ मिलाना (HsSocket, SSLOptions) -> {ठीक है, SslSocket} | {त्रुटि, कारण}
हैंडशेक_कॉन्टिन्यू (HsSocket, SSLOptions, Timeout) -> {ठीक है, SslSocket} | {त्रुटि, कारण}

प्रकार

नए, अतिरिक्त या परिवर्तित विकल्पों के साथ एसएसएल / टीएलएस हैंडशेक पर कब्जा जारी रखें।

सुनो (पोर्ट, विकल्प) -> {ठीक है, ListenSocket} | {त्रुटि, कारण}

प्रकार

SSL सुन सॉकेट बनाता है।

बातचीत_प्रोटोकॉल (SslSocket) -> {ठीक है, प्रोटोकॉल} | {एरर, प्रोटोकॉल_नोट_अनुभवी}

प्रकार

ALPN या NPN एक्सटेंशन के माध्यम से बातचीत किए गए प्रोटोकॉल को लौटाता है।

peercert (SslSocket) -> {ठीक है, सर्टिफिकेट} | {त्रुटि, कारण}

प्रकार

सहकर्मी प्रमाणपत्र को डीईआर-एन्कोडेड बाइनरी के रूप में लौटाया जाता है। प्रमाणपत्र public_key:pkix_decode_cert/2 साथ डिकोड किया जा सकता है

peername (SslSocket) -> {ठीक है, {पता, पोर्ट}} | {त्रुटि, कारण}

प्रकार

पीयर का पता और पोर्ट नंबर लौटाता है।

prepend_cipher_suites (पसंदीदा, सूट) -> सिफर ()

प्रकार

Make Preferred suites सबसे Preferred सूट बनते हैं, जो उन्हें वर्तमान में Suites से हटाकर, सूट सुइट सूची सूट के सिर पर रखा जाता है। Preferred सिफर सूट की सूची या फ़िल्टर की एक सूची हो सकती है जिस स्थिति में पसंदीदा सिफर सूची निकालने के लिए फ़िल्टर का उपयोग Suites पर किया जाता है।

prf (सॉकेट, सीक्रेट, लेबल, सीड, वांटेडलिफ्ट) -> {ओके, बाइनरी ()} | {त्रुटि, कारण ()}

प्रकार

अतिरिक्त कुंजी सामग्री उत्पन्न करने के लिए एक TLS सत्र के छद्म-रैंडम फ़ंक्शन (PRF) का उपयोग करता है। यह या तो Secret और Seed लिए उपयोगकर्ता-जनित मान लेता है या सत्र सुरक्षा मापदंडों से एक विशिष्ट मूल्य का उपयोग करने के लिए इसे निर्देशित करता है।

केवल टीएलएस / डीटीएलएस कनेक्शन के साथ उपयोग किया जा सकता है; SSLv3 कनेक्शन के लिए {error, undefined} लौटा दी जाती है।

recv (SslSocket, लंबाई) ->
recv (SslSocket, लंबाई, समयबाह्य) -> {ठीक है, डेटा} | {त्रुटि, कारण}

प्रकार

निष्क्रिय मोड में एक सॉकेट से एक पैकेट प्राप्त करता है। एक बंद सॉकेट को रिटर्न वैल्यू {error, closed} द्वारा दर्शाया गया है।

तर्क Length तभी सार्थक है जब सॉकेट मोड में raw और पढ़ने के लिए बाइट्स की संख्या को दर्शाता है। यदि Length = 0, सभी उपलब्ध बाइट्स वापस आ गए हैं। यदि Length > 0, बिल्कुल Length बाइट्स लौटाए जाते हैं, या एक त्रुटि; जब सॉकेट दूसरी तरफ से बंद हो जाता है तो संभवतः डेटा की Length बाइट्स से कम हो जाता है।

वैकल्पिक तर्क Timeout मिलीसेकंड में टाइम-आउट निर्दिष्ट करता है। डिफ़ॉल्ट मान infinity

renegotiate (SslSocket) -> ठीक है | {त्रुटि, कारण}

प्रकार

एक नया हैंडशेक शुरू करता है। एक उल्लेखनीय वापसी मूल्य {error, renegotiation_rejected} है जो दर्शाता है कि सहकर्मी ने पुनर्जागरण के माध्यम से जाने से इनकार कर दिया, लेकिन पहले से बातचीत किए गए सत्र का उपयोग करके कनेक्शन अभी भी सक्रिय है।

send (SslSocket, Data) -> ठीक | {त्रुटि, कारण}

प्रकार

Socket को Data लिखता है।

एक उल्लेखनीय रिटर्न वैल्यू {error, closed} दर्शाता है कि सॉकेट बंद है।

सेटटॉप्स (SslSocket, विकल्प) -> ठीक | {त्रुटि, कारण}

प्रकार

सॉकेट Socket विकल्प के अनुसार विकल्प सेट करता है।

शटडाउन (SslSocket, कैसे) -> ठीक | {त्रुटि, कारण}

प्रकार

तुरंत एक या दो दिशाओं में एक सॉकेट बंद कर देता है।

How == write मतलब है लेखन के लिए सॉकेट बंद करना, इससे पढ़ना अभी भी संभव है।

सहकर्मी ने यह लिखने में सक्षम होने के लिए कि लेखन पक्ष पर एक शटडाउन किया है, विकल्प {exit_on_close, false} उपयोगी है।

ssl_accept (SslSocket) ->
ssl_accept (SslSocket, Timeout) -> ठीक है | {त्रुटि, कारण}

प्रकार

OTP 21 में पदावनत, इसके बजाय handshake/[1,2] उपयोग करें।

ध्यान दें

हैंडशेक / [1,2] हमेशा एक नया सॉकेट लौटाता है।

ssl_accept (सॉकेट, SslOptions) ->
ssl_accept (सॉकेट, SslOptions, Timeout) -> {ठीक है, सॉकेट} | ठीक है | {त्रुटि, कारण}

प्रकार

OTP 21 में पदावनत, इसके बजाय handshake/[2,3] उपयोग करें।

ध्यान दें

हैंडशेक / [2,3] हमेशा एक नया सॉकेट लौटाता है।

sockname (SslSocket) -> {ठीक है, {पता, पोर्ट}} | {त्रुटि, कारण}

प्रकार

सॉकेट Socket का स्थानीय पता और पोर्ट नंबर लौटाता है।

start () ->
start (प्रकार) -> ठीक | {त्रुटि, कारण}

प्रकार

एसएसएल एप्लीकेशन शुरू करता है। डिफ़ॉल्ट प्रकार temporary

रोक () -> ठीक है

SSL एप्लिकेशन को रोक देता है।

Suite_to_str (CipherSuite) -> स्ट्रिंग

प्रकार

एक सिफर सुइट का स्ट्रिंग प्रतिनिधित्व लौटाता है।

transport_accept (ListenSocket) ->
transport_accept (ListenSocket, Timeout) -> {ठीक है, SslSocket} | {त्रुटि, कारण}

प्रकार

एक सुन सॉकेट पर आने वाले कनेक्शन अनुरोध को स्वीकार करता है। ListenSocket को listen/2 से लौटाया गया सॉकेट होना चाहिए। लौटाया गया सॉकेट handshake/[2,3] करने के लिए पास किया जाना है handshake/[2,3] , जिससे SSL / TLS / DTLS कनेक्शन स्थापित किया जा सके।

चेतावनी

लौटे सॉकेट का उपयोग केवल handshake/[2,3] साथ किया जा सकता है। उस कॉल से पहले कोई ट्रैफ़िक भेजा या प्राप्त नहीं किया जा सकता है।

स्वीकृत सॉकेट listen/2 में ListenSocket लिए निर्धारित विकल्पों को विरासत में मिला है।

Timeout लिए डिफ़ॉल्ट मान infinity । यदि Timeout निर्दिष्ट किया गया है और दिए गए समय के भीतर कोई कनेक्शन स्वीकार नहीं किया जाता है, तो {error, timeout} वापस कर दिया जाता है।

संस्करण () -> [version_info ()]

प्रकार

SSL एप्लिकेशन के लिए प्रासंगिक संस्करण जानकारी लौटाता है।

app_vsn
एसएसएल आवेदन का अनुप्रयोग संस्करण।
supported
SSL / TLS संस्करण डिफ़ॉल्ट रूप से समर्थित हैं। connect/[2,3,4] , listen/2 , और ssl_accept/[1,2,3] connect/[2,3,4] पर एक संस्करण विकल्प द्वारा ओवरराइड किया गया। वार्ताबद्ध एसएसएल / टीएलएस संस्करण के लिए, कनेक्शन_इनफॉर्मेशन connection_information/1 देखें।
supported_dtls
DTLS संस्करण डिफ़ॉल्ट रूप से समर्थित हैं। connect/[2,3,4] , listen/2 , और ssl_accept/[1,2,3] connect/[2,3,4] पर एक संस्करण विकल्प द्वारा ओवरराइड किया गया। बातचीत किए गए DTLS संस्करण के लिए, देखें connection_information/1
available
SSL एप्लिकेशन द्वारा समर्थित सभी SSL / TLS संस्करण। टीएलएस 1.2 को क्रिप्टो एप्लिकेशन से पर्याप्त समर्थन की आवश्यकता है।
available_dtls
SSL एप्लिकेशन द्वारा समर्थित सभी DTLS संस्करण। DTLS 1.2 को क्रिप्टो एप्लिकेशन से पर्याप्त समर्थन की आवश्यकता है।

यह भी देखें

inet(3) और gen_tcp(3) gen_udp(3)

Original text