Różnice między wybraną wersją a wersją aktualną.
| 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> | ||