ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ выпуск Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° TLS 1.3 Π½Π° Java с Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌΠΈ Π“ΠžΠ‘Π’ Π² соотвСтствии с RFC 9367

ΠœΠΎΠ΄ΡƒΠ»ΡŒ crypto-gost-tls13 содСрТит Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ TLS 1.3 (RFC 8446 + RFC 9367) с Π“ΠžΠ‘Π’-ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠ΅ΠΉ. Π”Π°Π½Π½Ρ‹ΠΉ Ρ€Π΅Π»ΠΈΠ· являСтся Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ вСрсиСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈ Π³ΠΎΡ‚ΠΎΠ² для Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ использования.

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ являСтся рСализация Π½Π° чистой Java. ВсС криптографичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ встроСнными срСдствами Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ β€” Π±Π΅Π· Π²Π½Π΅ΡˆΠ½ΠΈΡ… зависимостСй.

Π­Ρ‚ΠΎ Π² своСм Ρ€ΠΎΠ΄Π΅ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΠ΅Ρ€Π²Ρ‹Ρ… ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ TLS 1.3 с Π“ΠžΠ‘Π’ Π½Π° Java, поэтому interop-тСстированиС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ Π² минимально доступном объСмС.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ возмоТности Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

  1. ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹:
  • Handshake: ΠΏΠΎΠ»Π½Ρ‹ΠΉ (client/server), сокращённый (PSK), Π²Π·Π°ΠΈΠΌΠ½Ρ‹ΠΉ (mTLS).
  • ALPN (RFC 7301) β€” согласованиС ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ³ΠΎ уровня (HTTP/2, HTTP/1.1).
  • SNI (RFC 6066) β€” ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ сСрвСра для multi-tenant Ρ€Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠΉ.
  • KeyUpdate (RFC 8446 Β§4.6.3) β€” ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°.
  • Cipher suites: TLS_KUZNYECHIK_MGM_STREEBOG_256_L/S.
  • ECDHE: CryptoPro-A (256-bit), CryptoPro-B (512-bit)
  • Per-record TLSTREE re-keying β€” смСна ΠΊΠ»ΡŽΡ‡Π° ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΡƒΡŽ TLS-запись.
  • ЀрагмСнтация ΠΈ сборка Ρ€ΡƒΠΊΠΎΠΏΠΎΠΆΠ°Ρ‚ΠΈΠΉ ΠΈ записСй (RFC 8446 Β§5.1).
  • Session resumption: PSK Ρ‡Π΅Ρ€Π΅Π· NewSessionTicket (PskStore in-memory, single-use).
  • OCSP stapling: сСрвСр ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ OCSP-ΠΎΡ‚Π²Π΅Ρ‚ ΠΊ сСртификату.
  • Post-handshake messages: NewSessionTicket (сохранСниС для PSK).
  1. ΠšΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΡ:
  • Key schedule: HKDF-Streebog (RFC 5869) ΠΏΠΎ схСмС TLS 1.3 (RFC 8446 Β§7.1).
  • Π—Π°Ρ‰ΠΈΡ‚Π° записСй: MGM-AEAD (Kuznyechik) с nonce ΠΏΠΎ RFC 8446 Β§5.3.
  • Π­Ρ„Π΅ΠΌΠ΅Ρ€Π½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡ΠΈ Π·Π°Ρ‚ΠΈΡ€Π°ΡŽΡ‚ΡΡ послС использования.
  1. Π‘Π΅Ρ€Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚Ρ‹:
  • ΠŸΠ°Ρ€ΡΠΈΠ½Π³ X.509v3 (GOST R 34.10-2012) β€” встроСнный DER-парсСр.
  • Валидация Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ: подписи, DN (issuer β†’ subject), Basic Constraints, Key Usage, Extended Key * Usage (serverAuth / clientAuth), pathLen.
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° hostname: dNSName + iPAddress (RFC 6125).
  • ВСрификация OCSP-ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² (RFC 6960).

4.Вранспорт:

  • TlsTransport β€” интСрфСйс.
  • InMemoryTlsTransport β€” для тСстов ΠΈ однопроцСссных сцСнариСв (in-memory ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ).
  • SocketTlsTransport β€” blocking I/O Ρ‡Π΅Ρ€Π΅Π· java.net.Socket.
  • ChannelTlsTransport β€” NIO SocketChannel-based transport (blocking mode, interruptible).
  1. ΠŸΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹ΠΉ handshake:
  • TlsHandshakeEngine β€” state machine для handshake (отвязан ΠΎΡ‚ I/O). Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ TlsSession ΠΊΠ°ΠΊ оркСстратор; ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π΅Π½ для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с JSSE (SSLEngine).
  1. ByteBuffer API:
  • TlsRecord.protect/unprotect β€” ByteBuffer-ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ для zero-copy ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ с NIO. Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΊΠ»ΡŽΡ‡Π΅ΠΉ:
  • Pkcs12Loader β€” Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ PFX (PKCS#12) с PBKDF2-HMAC-SHA256 + AES-256-CBC.
  1. Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ сСссии:
  • close_notify β€” ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ.
  • Π—Π°Ρ‚ΠΈΡ€Π°Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° ΠΏΡ€ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ ΠΈΠ»ΠΈ ошибкС.
  • ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° alert: fatal β€” Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ + Π·Π°Ρ‚ΠΈΡ€Π°Π½ΠΈΠ΅.
  1. Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ:
  • Constant-time сравнСния для verify_data ΠΈ PSK binders (Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ timing attacks)
  • Π—Π°Ρ‚ΠΈΡ€Π°Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°: destroy() Π½Π° всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… с ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ (TlsKeySchedule, TlsTrafficKeys, TlsRecord, HandshakeContext), ΠΏΡ€ΠΈ close, fatal alert, exception Π² handshake
  • Π—Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DoS: Π»ΠΈΠΌΠΈΡ‚Ρ‹ Π½Π° Π΄Π»ΠΈΠ½Ρƒ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ сСртификатов (10), post-handshake messages, Ρ€Π°Π·ΠΌΠ΅Ρ€ записСй.
  • MGM nonce: MSB ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚Π° очищаСтся для ICN (RFC 9058 Β§3, RFC 9367 Β§3.3).
  • ECDHE-ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ ΠΈ транскрипт handshake ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°ΡŽΡ‚ΡΡ послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ handshake.
  • HMAC-ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» затираСтся послС использования (HkdfStreebog, KdfGostR3411_2012_256).
  1. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ:
  • Волько resumption PSK (0-RTT ΠΈ external PSK Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ).
  • Волько psk_dhe_ke (pure PSK Π±Π΅Π· ECDHE Π½Π΅ поддСрТиваСтся).
  • HelloRetryRequest (RFC 8446 Β§4.1.4) Π½Π΅ поддСрТиваСтся β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Π° named group (GC256A ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ).
  • Волько Π“ΠžΠ‘Π’ (non-GOST cipher suites Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ).
  1. ВСстированиС:
  • Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° содСрТит Known Answer Tests ΠΈΠ· RFC 9367 Appendix A.1 (L ΠΈ S Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹) β€” ΠΏΠΎΠ»Π½Ρ‹ΠΉ key schedule, TLSTREE, AEAD, ECDHE. И ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ спСктр KAT тСстов.
  • 4 ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… тСста (self-interop) Ρ‡Π΅Ρ€Π΅Π· Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ TCP-сокСты.
  • Π€Π°Π·Π·ΠΈΠ½Π³-тСсты для парсСров: TlsMessageParser (8 ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²), TlsDerParser (3 ΠΌΠ΅Ρ‚ΠΎΠ΄Π°), TlsOcspVerifier (1 ΠΌΠ΅Ρ‚ΠΎΠ΄), для обСспСчСния бСзопасности ΠΈ сниТСния Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π°Ρ‚Π°ΠΊ Π½Π° парсСры.
  1. АрхитСктурныС Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ:
  • TlsHandshakeEngine β€” state machine, отвязанная ΠΎΡ‚ I/O (для Π±ΡƒΠ΄ΡƒΡ‰Π΅Π³ΠΎ модуля JSSE).
  • ByteBuffer-ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ TlsRecord.protect/unprotect для NIO/JSSE.
  • TLSTREE кэш (TlsTreeCache) β€” пСрСсчёт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ²ΡˆΠΈΡ…ΡΡ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ (RFC 9367).
  • InMemoryTlsTransport.Pair β€” двунаправлСнная ΠΏΠ°Ρ€Π° для тСстов ΠΈ однопроцСссного взаимодСйствия.

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° распространяСтся ΠΏΠΎΠ΄ свободной Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: linux.org.ru

ΠšΡƒΠΏΠΈΡ‚ΡŒ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ хостинг для сайтов с Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ ΠΎΡ‚ DDoS, VPS VDS сСрвСры πŸ”₯ ΠšΡƒΠΏΠΈΡ‚ΡŒ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ хостинг для сайтов с Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ ΠΎΡ‚ DDoS, VPS VDS сСрвСры | ProHoster