Erlang OTP: Programmering af distribuerede og fejltolerante systemer · Lektion

Sikker nodekommunikation (TLS)

Konfigurér Erlang-noder til sikker kommunikation ved hjælp af TLS/SSL, så data krypteres under transport på tværs af netværket.

Lektion 1 af 411 trin

Sikker nodekommunikation (TLS) er en gratis Erlang OTP: Programmering af distribuerede og fejltolerante systemer-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Erlang OTP: Programmering af distribuerede og fejltolerante systemer, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Erlang OTP: Programmering af distribuerede og fejltolerante systemer-kurset indeholder 4 lektioner i alt.

Hvorfor sikre Erlang-noder?

Når Erlang-noder kommunikerer, især på tværs af et netværk eller i et produktionsmiljø, skal kommunikationen være sikker. Det forhindrer aflytning, manipulation og uautoriseret adgang.

Erlangs distributionsprotokol krypterer ikke kommunikationen som standard. I denne lektion kan du se, hvordan du tilføjer et sikkerhedslag ved hjælp af TLS/SSL.

TLS: Det sikkerhedsmæssige håndtryk

TLS (Transport Layer Security) og forgængeren SSL (Secure Sockets Layer) er kryptografiske protokoller, der er udviklet til at sikre kommunikation over et computernetværk.

Det gør de ved hjælp af:

  • Kryptering: Data forvrænges, så kun den tilsigtede modtager kan læse dem.
  • Godkendelse: De kommunikerende parters identitet bekræftes.
  • Dataintegritet: Det sikres, at data ikke er blevet ændret under transporten.

Erlangs distributionsprotokol

Erlang-noder kommunikerer ved hjælp af en indbygget distributionsprotokol. Typisk starter du noder sådan:

erl -sname node1

Det opretter en hurtig og effektiv forbindelse, men den bruger ikke automatisk kryptering. For at opnå sikker kommunikation skal vi instruere Erlang i at bruge TLS til distributionen.

Certifikater og nøgler til tillid

TLS bygger på et system af digitale certifikater og private nøgler til at etablere tillid og sikre forbindelser. Tænk på dem som digitale ID'er.

  • Privat nøgle: En hemmelig nøgle, der bruges til at kryptere/dekryptere data og signere certifikater. Opbevar den helt sikkert!
  • Certifikat (offentlig nøgle): Indeholder en offentlig nøgle og oplysninger om entiteten (noden). Det deles og bruges til at bekræfte identiteten.
  • CA-certifikat: Et certifikat fra en certifikatmyndighed (CA), som signerer andre certifikater og dermed etablerer en tillidskæde.

Oprettelse af testcertifikater

Til lokal test kan vi generere selvsignerede certifikater ved hjælp af værktøjer som openssl. I et produktionsmiljø ville du bruge certifikater fra en betroet CA.

Sådan opretter du en CA, et servercertifikat og et klientcertifikat:

# CA key and cert
openssl genrsa -out ca_key.pem 2048
openssl req -new -x509 -days 365 -key ca_key.pem -out ca.pem -subj "/CN=MyTestCA"

# Server key and cert
openssl genrsa -out server_key.pem 2048
openssl req -new -key server_key.pem -out server.csr -subj "/CN=server.test"
openssl x509 -req -days 365 -in server.csr -CA ca.pem -CAkey ca_key.pem -CAcreateserial -out server.pem

# Client key and cert
openssl genrsa -out client_key.pem 2048
openssl req -new -key client_key.pem -out client.csr -subj "/CN=client.test"
openssl x509 -req -days 365 -in client.csr -CA ca.pem -CAkey ca_key.pem -CAcreateserial -out client.pem

Konfiguration af TLS på node A (server)

For at aktivere TLS skal vi konfigurere Erlang-applikationen kernel. Vi angiver proto_dist til inet_tls og leverer SSL-indstillinger.

Node A (den 'server', der lytter efter forbindelser) skal have sit certifikat, sin private nøgle og CA-certifikatet til at bekræfte klienter.

erl -sname nodeA -kernel proto_dist inet_tls -kernel dist_listen_min 9000 -kernel dist_listen_max 9000 -kernel ssl_dist_opt '[{server,{certfile,"server.pem"},{keyfile,"server_key.pem"},{cacertfile,"ca.pem"}}, {client,{cacertfile,"ca.pem"}}]'

Bemærk dist_listen_min/max, som fastlåser porten, så det bliver lettere at konfigurere firewallen.

Konfiguration af TLS på node B (klient)

Node B (den 'klient', der starter forbindelsen) skal også have en lignende konfiguration. Den leverer sit eget certifikat og sin egen nøgle samt CA-certifikatet til at bekræfte serveren.

erl -sname nodeB -kernel proto_dist inet_tls -kernel dist_listen_min 9001 -kernel dist_listen_max 9001 -kernel ssl_dist_opt '[{client,{certfile,"client.pem"},{keyfile,"client_key.pem"},{cacertfile,"ca.pem"}}]'

Begge noder skal have tillid til den CA, der signerede den andens certifikat. Derfor refererer de begge til ca.pem.

Første sikre forbindelse!

Lad os samle det hele! Først kompilerer du dette simple modul på begge noder. Start derefter to Erlang-noder med de nødvendige TLS-indstillinger (ved hjælp af dine genererede certifikatfiler). Prøv til sidst at kalde my_module:hello/0 eksternt for at se en sikker interaktion.

1. Kompilér modulet:
erlc my_module.erl

2. Start node A (erstat hostname med maskinens værtsnavn):
erl -sname nodeA@hostname -kernel proto_dist inet_tls -kernel dist_listen_min 9000 -kernel dist_listen_max 9000 -kernel ssl_dist_opt '[{server,{certfile,"server.pem"},{keyfile,"server_key.pem"},{cacertfile,"ca.pem"}}, {client,{cacertfile,"ca.pem"}}]'

3. Start node B (i en ny terminal):
erl -sname nodeB@hostname -kernel proto_dist inet_tls -kernel dist_listen_min 9001 -kernel dist_listen_max 9001 -kernel ssl_dist_opt '[{client,{certfile,"client.pem"},{keyfile,"client_key.pem"},{cacertfile,"ca.pem"}}]'

4. Opret forbindelse fra node B, og kald:
net_adm:ping('nodeA@hostname').
rpc:call('nodeA@hostname', my_module, hello, []).

-module(my_module).
-export([hello/0]).

hello() ->
    io:format("~p: Hello from secured node!~n", [node()]),
    "Hello from secured node!".

Bekræftelse af TLS-status

Når noderne har forbindelse, kan du bekræfte, at forbindelsen faktisk bruger TLS. ssl-applikationen leverer funktioner til at inspicere aktive forbindelser.

Fra en af de forbundne noder kan du hente oplysninger om SSL-forbindelsen. På nodeA kan du f.eks. gøre dette, efter at nodeB har oprettet forbindelse:

{ok, Socket} = gen_tcp:connect("localhost", 9001, [binary, {active, false}, {packet, 4}, {reuseaddr, true}]).
{ok, SslSocket} = ssl:handshake(Socket, [{mode, client}]).
ssl:connection_info(SslSocket).

Du bør kunne se oplysninger om den anvendte TLS-version, krypteringspakke og certifikater.

Kontrol af sikker forbindelse

Du har lært de grundlæggende trin til at sikre kommunikationen mellem Erlang-noder med TLS. Lad os teste din forståelse.

Sikre noder: Det har vi lært

Tillykke! Du har taget dine første skridt mod at sikre distribuerede Erlang-applikationer.

Vi gennemgik:

  • Vigtigheden af TLS for sikker kommunikation mellem noder.
  • De centrale komponenter: certifikater, private nøgler og certifikatmyndigheder.
  • Hvordan du genererer selvsignerede certifikater til test.
  • Konfiguration af Erlang-noder til at bruge TLS med proto_dist og ssl_dist_opt.
  • Kørsel af en grundlæggende sikker distribueret applikation.

Det er afgørende at sikre dine Erlang-systemer. Dernæst undersøger vi, hvordan du håndterer godkendelse og adgangskontrol i dine applikationer.

Gratis at komme i gang

Lær Erlang med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
12
Lektioner
48

Ofte stillede spørgsmål

Er lektionen “Sikker nodekommunikation (TLS)” gratis?

Ja — alle 3 lektioner i læringssporet Erlang OTP: Programmering af distribuerede og fejltolerante systemer, inklusive “Sikker nodekommunikation (TLS)”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Erlang OTP: Programmering af distribuerede og fejltolerante systemer-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Sikker nodekommunikation (TLS)”?

Konfigurér Erlang-noder til sikker kommunikation ved hjælp af TLS/SSL, så data krypteres under transport på tværs af netværket. Du øver dig i Erlang OTP: Programmering af distribuerede og fejltolerante systemer med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Erlang OTP: Programmering af distribuerede og fejltolerante systemer?

Der kræves ingen tidligere erfaring. Erlang OTP: Programmering af distribuerede og fejltolerante systemer på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “Sikker nodekommunikation (TLS)”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Erlang OTP: Programmering af distribuerede og fejltolerante systemer-lektion?

Ja. Alle Erlang OTP: Programmering af distribuerede og fejltolerante systemer-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Sikker nodekommunikation (TLS)
  2. Autentificering og autorisation
  3. Beskyttelse af følsomme data
  4. Hærdning af distributionscookies og nodeadgang
← Tilbage til Erlang OTP: Programmering af distribuerede og fejltolerante systemer