I spent a year making an ASN.1 compiler in D 🔥 Горячее 💬 Длинная дискуссия
Автор посвятил год созданию компилятора ASN.1 на языке D, но проект всё ещё далёк от завершения. Основной мотивацией стала необходимость реализации TLS для фреймворка Juptune, требующей обработки x.509 сертификатов, использующих кодировку ASN.1 DER. Автор описывает ASN.1 как «protobuf на стероидах» — избыточно сложный язык спецификации данных, созданный в конце 80-х годов, который, тем не менее, повсеместно используется в современных технологиях, несмотря на свою сложность.
Компилятор под названием dasn1 уже способен парсить некоторые x.509 сертификаты, но разработка сопряжена с множеством трудностей. ASN.1 имеет «всё или ничего» уровень сложности, требует реализации ограничений трижды разными способами, а его спецификации содержат много устаревших элементов. Язык D, однако, оказался удобным для генерации кода благодаря статическим импортам, метапрограммированию и шаблонам, которые позволяют создавать естественные API с обнаружением ошибок на этапе компиляции.
Комментарии (203)
- ASN.1 и DER/BER, несмотря на свою репутацию, остаются краеугольным камнем для TLS/PKI, но их сложность и отсутствие инструментария вроде protobufs заставляют задуматься, не проще ли было бы начать с нуля сегодняшними средствами.
- Дискуссия подтверждает, что ASN.1 был там раньше SSL и даже формат сертификатов из X.500, и что его унаследовали в HTTPS.
- Подчеркивается, что вместо него могли бы быть JWT или CBOR, но вопрос в том, что ASN.1 остается ввиду отсутствия замены, которая бы обеспечивала каноническое кодирование.
- Поднимается вопрос, почему мы до сих пор используем его, если он такой плохой, и отвечается, что нет никакой альтернативы, которая бы обеспечивала такую же степень взаимодействия с прошлым.
- Участники обсуждения также отмечают, что ASN.1 это не только формат, но и семейство протоколов, и что его сложность часто преувеличена, особенно если ограничиться DER.
Testing “Exotic” P2P VPN
Стандартный WireGuard блокируется сигнатурными методами, поэтому автор ищет альтернативные P2P VPN-решения с меш-топологией, открытым исходным кодом и без зависимости от WireGuard. Рассмотрены два варианта: EasyTier и Nebula.
EasyTier — минималистичный проект из Китая, использующий общий пароль для шифрования и поддерживающий множество протоколов для обхода блокировок. Не требует сложной настройки, но не позволяет закреплять IP-адреса за устройствами. Nebula от создателей Slack предлагает PKI на эллиптических кривых, собственный файрвол и зонирование, но требует ручного распределения сертификатов и имеет неудобный интерфейс через SSH. Оба решения упакованы в nixpkgs и подходят для создания самохостанных сетей без центрального сервера.
Комментарии (22)
- Обсуждаются альтернативы P2P VPN: упоминаются Tinc, WireGuard, Nebula, Iroh, Yggdrasil, vpncloud, а также устаревшие проекты (Social VPN, Remobo и др.).
- Критикуется исключение Headscale из сравнения, так как он, по мнению участников, не связан с Tailscale и является полноценной open-source альтернативой.
- Уточняется, что SSH-интерфейс в Nebula предназначен только для отладки, а не для конфигурации, что было неверно истолковано в исходном посте.
- Отмечаются проблемы поддержки некоторых проектов (Tinc, по мнению ряда комментаторов, выглядит заброшенным).
- Обсуждаются технические нюансы: работа derper за обратным прокси, обфускация в AmneziaVPN без уменьшения MTU, идея использования VPN на втором уровне (L2).