Narzędzia użytkownika

Narzędzia witryny


sk2:openssl_ssl_api

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
sk2:openssl_ssl_api [2025/11/20 12:55]
jkonczak [Kolejne przykładowe programy] poprawa corner case'ów przy nieblokującej obsłudze SSL_*
sk2:openssl_ssl_api [2025/11/20 13:21] (aktualna)
jkonczak [Zadania]
Linia 754: Linia 754:
 </​small>​ </​small>​
  
 +==== [ekstra] SSLKEYLOGFILE ====
 +
 +Biblioteki do szyfrowanych połączeń potrafią przekazać
 +programiście klucze użyte do szyfrowania danych w
 +[[https://​tlswg.org/​sslkeylogfile/​draft-ietf-tls-keylogfile.html|(już de facto) standardowym formacie]].
 +Część aplikacji/​bibliotek odczytuje zmienną środowiskową ''​SSLKEYLOGFILE''​
 +i tworzy plik pod wskazaną tam nazwą, do którego wpisuje klucze wszystkich
 +szyfrowanych połączeń. Pozwala to np. 
 +[[https://​wiki.wireshark.org/​TLS#​tls-decryption|odszyfrować komunikację w programie wireshark]].
 +
 +Żeby zaimplementować takie zapisywanie kluczy do pliku w OpenSSL, należy
 +zarejestrować funkcję która będzie wywoływana ilekroć OpenSSL wygenruje klucz
 +do szyfrowania,​ i która dostanie gotową linię do wpisania do pliku.
 +\\
 +Przykładowy prosty kod realizujący takie zachowanie jest zaprezentowany poniżej:
 +<​html><​div style=margin-top:​-1.4em></​div></​html>​
 +<code cpp>
 +
 +int keylogFd;
 +
 +int main() {
 +    …
 +    SSL_CTX *ctx = …;
 +    …
 +    if (getenv("​SSLKEYLOGFILE"​)) {
 +        keylogFd = open(getenv("​SSLKEYLOGFILE"​),​ O_CREAT | O_WRONLY | O_APPEND, 0666);
 +        if (keylogFd == -1)
 +            die("​SSLKEYLOGFILE file opening failed with: %s", strerror(errno));​
 +        SSL_CTX_set_keylog_callback(ctx,​ [](const SSL *ssl, const char *line) {
 +            write(keylogFd,​ line, strlen(line));​
 +            write(keylogFd,​ "​\n",​ 1);
 +        });
 +    }
 +    …
 +</​code>​
sk2/openssl_ssl_api.txt · ostatnio zmienione: 2025/11/20 13:21 przez jkonczak