Как оказалось многие испытывают неистовые жопные боли при настройке
ㅤ
Сегодня покажу как избавиться от боли и на лету получать SSL для
Устанавливаем angie:
Начиная с
Открываем айпишник сервера в браузере и убеждаемся что все работает. Если всё заебись, получишь стартовую страницу
Конфигуряем angie на домен two.su.
Создаем файл
А в файле
Если
Проверяем:
Полученный сертификат и соответствующий ключ будут доступны в конфигурации через переменные $acme_cert_<имя> и $acme_cert_key_<имя>.
Перезапускаем:
Если получил ошибку, закинь сертификаты заглушки в
У меня никаких ошибок не возникло.
В папке:
Захожу в браузере на
Меня вся эта кухня полностью устраивает. Понятно дело есть
Когда что-то настраиваешь руками, а не мышкой, то имеешь представление как работает технология изнутри. А если ты это знаешь, то легко сможешь отдебажить баги и найти первопричину.
По крайней мере меня так учили и я с этим полностью согласен.
🛠 #linux #devops #angie #ssl
—
✅ @bashdays / @linuxfactory / @blog
angie со встроенной поддержкой SSL сертификатов от Lets Encrypt.ㅤ
Сегодня покажу как избавиться от боли и на лету получать SSL для
angie. Без всяких там certbot и acme.sh. Довольно удобно реализовано.Для чистоты эксперимента я взял чистый, прерываемый сервер, без nginx’ов и т.п. на базе Ubuntu 24.04.
angie это аналог nginx, но на стероидах, у меня он крутится на уроках для LinuxFactory и в блоге. Подкупил он меня нативной поддержкой LUA и кучей модулей включая авто-получение SSL сертов.Устанавливаем angie:
sudo curl -o /etc/apt/trusted.gpg.d/angie-signing.gpg https://angie.software/keys/angie-signing.gpg
echo "deb https://download.angie.software/angie/$(. /etc/os-release && echo "$ID/$VERSION_ID $VERSION_CODENAME") main" | sudo tee /etc/apt/sources.list.d/angie.list > /dev/null
sudo apt-get update
sudo apt-get install -y angie
Начиная с
Angie 1.3.0, модуль ACME (http_acme_module) включён по умолчанию в основной пакет angie.Открываем айпишник сервера в браузере и убеждаемся что все работает. Если всё заебись, получишь стартовую страницу
angie. Дефолтная страница практически один в один повторяет дефолтную страницу от nginx.Дальше у меня есть домен two.su который живет в Cloudfalre. В настройках DNS я прописываю A запись и указываю айпишник нового сервера. Весь трафик идет напрямую, без фильтрации самого Cloudfalre.
Конфигуряем angie на домен two.su.
Создаем файл
two.su.conf в /etc/angie/httpd.d/ с таким содержимым. server {
listen 443 ssl;
server_name two.su www.two.su;
acme letsencrypt;
ssl_certificate $cert_letsencrypt;
ssl_certificate_key $cert_key_letsencrypt;
location / {
root /var/www/html;
}
}А в файле
/etc/angie/angie.conf в секцию http добавляем:acme_client letsencrypt https://acme-v02.api.letsencrypt.org/directory;
resolver 127.0.0.53;
map $acme_cert_letsencrypt $cert_letsencrypt {
'' /etc/angie/ssl-self-signed/cert.pem;
default $acme_cert_letsencrypt;
map $acme_cert_letsencrypt $cert_key_letsencrypt {
'' /etc/angie/ssl-self-signed/key.pem;
default $acme_cert_key_letsencrypt;
}
Если
angie у тебя работает в докере, то в resolver пропиши: 127.0.0.11.Проверяем:
angie -t и в ответ получаем:angie: the configuration file /etc/angie/angie.conf syntax is ok
angie: configuration file /etc/angie/angie.conf test is successful
Полученный сертификат и соответствующий ключ будут доступны в конфигурации через переменные $acme_cert_<имя> и $acme_cert_key_<имя>.
Перезапускаем:
systemctl reload angieЕсли получил ошибку, закинь сертификаты заглушки в
/etc/angieopenssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 3650 -nodes -subj "/C=RU/O=Bashdays/CN=LinuxFactory"
У меня никаких ошибок не возникло.
В папке:
/var/lib/angie/acme/letsencrypt появились ключи и серты.Захожу в браузере на
two.su и вижу зеленый замочек. Что и требовалось доказать. SSL сертификат был автоматически получен и в дальнейшем будет автоматически продляться. Без всяких кронов, клиентов, API ключей и хуйни.Единый сертификат будет получен для всех доменных имён, которые были перечислены в директиве server_name. А директива acme указывает, какой ACME-клиент должен использоваться.
Меня вся эта кухня полностью устраивает. Понятно дело есть
Nginx Proxy Manager, но я привык работать без гуёвых штук и мордочек.Когда что-то настраиваешь руками, а не мышкой, то имеешь представление как работает технология изнутри. А если ты это знаешь, то легко сможешь отдебажить баги и найти первопричину.
По крайней мере меня так учили и я с этим полностью согласен.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
3 72
Отдыхаешь? А как тебе такое? Если пропиздоглазил, то смотри на зеленый замочек и домен.
ㅤ
Короче — я сгенерил валидный SSL сертификат для домена localhost.
Аналогично можно бесконечно генерить такие сертификаты для любых своих локальных доменов. Ну и затем подключать их во всякие nginx, mysql джанги-хуянги и т.п.
Называется
Чтобы установить
И заинсталлить
Получаем такое:
Всё! Теперь у нас есть свой доверенный центр сертификации.
Выпускаем первый SSL сертификат.
Ебли с этим никакой нет, запускаем:
То есть просто перечисляем список доменов.
В ответ получаем:
В результате получаем
Ну а дальше пихаем ихв жопы в нужное место и наслаждаемся зеленым замочком.
Если серты и ключи тебе нужно генерить в определенном месте, можешь это указать так:
Это полезно если у тебя какая-то автоматизация или баш скрипт, который автоматом будет это всё генерить, а nginx или angie это подхавывать.
Чтобы этой хуйнёй воспользоваться на WSL, делаем так:
Здесь мы не выполняем инициализацию
Для того чтобы эти сертификаты были доверенными в винде, нужно указать путь к корневому сертификату, который мы с тобой зашили в винду.
Идем на виндовую машину и выполняем:
В ответ получаем путь до корневого сертификата, у меня такой:
Возвращаем в WSL и выполняем:
Если у тебя
Теперь можно выпускать SSL сертификаты в WSL и в винде они будут считаться доверенными.
Если у тебя не винда, а мак или линукс, похуй, все делается аналогично, в официальной документации эти кейсы все подробно расписаны.
Что прикольно, такие серты живут по два года. При желании их можно прикрутить к своему локальному proxmox или еще куданить. Тут уже сам разберешься.
Для локальных целей прям маст-хев! Забирай на вооружение.
🛠 #ssl #utilites
—
✅ @bashdays / @linuxfactory / @blog
ㅤ
Короче — я сгенерил валидный SSL сертификат для домена localhost.
Аналогично можно бесконечно генерить такие сертификаты для любых своих локальных доменов. Ну и затем подключать их во всякие nginx, mysql джанги-хуянги и т.п.
Называется
mkcert. Работает на всём, Винда, Линукс и Мак. В случае с виндой установка осуществляется через менеджеры пакетов scoop или chocolatey.Чтобы установить
scoop в powershell нужно забить:Set-ExecutionPolicy RemoteSigned -scope CurrentUser
irm get.scoop.sh | iex
И заинсталлить
mkcertscoop bucket add extras
scoop install mkcert
mkcert -install
Получаем такое:
Created a new local CA 💥
The local CA is now installed in the system trust store! ⚡️
Note: Firefox support is not available on your platform. ℹ️
Всё! Теперь у нас есть свой доверенный центр сертификации.
Выпускаем первый SSL сертификат.
Ебли с этим никакой нет, запускаем:
mkcert bashdays.kek "*.bashdays.kek"
То есть просто перечисляем список доменов.
В ответ получаем:
Created a new certificate valid for the following names 📜
- "bashdays.kek"
- "*.bashdays.kek"
Reminder: X.509 wildcards only go one level deep, so this won't match a.b.bashdays.kek ℹ️
The certificate is at "./bashdays.kek+1.pem" and the key at "./bashdays.kek+1-key.pem" ✅
It will expire on 2 August 2027 🗓
В результате получаем
bashdays.kek+1.pem — сертификат и bashdays.kek+1-key.pem - приватный ключ.Ну а дальше пихаем их
Если серты и ключи тебе нужно генерить в определенном месте, можешь это указать так:
mkcert -cert-file=/ssl/fullchain.crt -key-file=/ssl/private.key bashdays.kek
Это полезно если у тебя какая-то автоматизация или баш скрипт, который автоматом будет это всё генерить, а nginx или angie это подхавывать.
Чтобы этой хуйнёй воспользоваться на WSL, делаем так:
sudo apt install libnss3-tools
curl -JLO "https://dl.filippo.io/mkcert/latest?for=linux/amd64"
chmod +x mkcert-v*-linux-amd64
sudo cp mkcert-v*-linux-amd64 /usr/local/bin/mkcert
Здесь мы не выполняем инициализацию
mkcert -install, на WSL мы только генерим SSL сертификаты.Для того чтобы эти сертификаты были доверенными в винде, нужно указать путь к корневому сертификату, который мы с тобой зашили в винду.
Идем на виндовую машину и выполняем:
mkcert -CAROOT
В ответ получаем путь до корневого сертификата, у меня такой:
C:\Users\user\AppData\Local\mkcertВозвращаем в WSL и выполняем:
echo "export CAROOT=/mnt/c/Users/user/AppData/Local/mkcert" >> ~/.bashrc
Если у тебя
zsh, сам разберешься.Теперь можно выпускать SSL сертификаты в WSL и в винде они будут считаться доверенными.
Если у тебя не винда, а мак или линукс, похуй, все делается аналогично, в официальной документации эти кейсы все подробно расписаны.
Что прикольно, такие серты живут по два года. При желании их можно прикрутить к своему локальному proxmox или еще куданить. Тут уже сам разберешься.
mkcert давнишняя штука, но как оказалось про неё мало кто знает, я про нее слышал года 4 назад, но успешно забыл. И вот только сегодня нашел в своих bash скриптах интеграцию с ней.
Для локальных целей прям маст-хев! Забирай на вооружение.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
5 108
Как работает RSA.
Вся ассиметричная криптография держится на принципе:
ㅤ
Сразу с ума не сходи, сначала душная теория, а потом весёлая практика — на письках. Как ты любишь!
Берем простые числа:
Подставляем в формулу:
Получается:
Открытый ключ:
Закрытый ключ:
😲 Пример на письках
Антон спрашивает у Маши — а сколько сантиметров хуй у Ивана?
Маша знает что у Ивана хуй — 21 сантиметр. Но Маше нужно это сообщить Антону, чтобы Иван не узнал.
Для этого Маше нужно знать открытый ключ Антона.
Берем открытый ключ из предыдущих вычислений
И шифруем хуй Ивана:
Возводим длину хуя Ивана в 691 степень по модулю 779 и получаем число 717.
Теперь Маша передает без палева число 717 Антону.
Антон же с помощью закрытого ключа расшифровывает длину хуя Ивана.
Аналогично возводим в степень по модулю. С помощью математики Антон узнаёт сколько сантиметров хуй у Ивана.
Даже линейка не понадобилась!
Подытожим:
Даже если Иван перехватит такое сообщение, то цифра 717 ему ни о чем не скажет, не может же быть хуй 717 см… хотя у леперов и пикабушников наверное так и есть.
Вот тебе пример на Bash:
В результате получим: 717 и 21. Что и требовалось доказать!
Чуть позже покажу как «ломают» такие ключи и как сгенерить RSA ключ с бэкдором.
Изучай!
🛠 #ssl #security #rsa #crypto
—
✅ @bashdays / @linuxfactory / @blog
Вся ассиметричная криптография держится на принципе:
В одну сторону — быстро, в другую сторону — неразумно и пиздец как долго.
ㅤ
Сразу с ума не сходи, сначала душная теория, а потом весёлая практика — на письках. Как ты любишь!
Берем простые числа:
p = 19
q = 41
Подставляем в формулу:
N=p*q=779ф(N)=(p-1)*(q-1)=720e=691d=571
N = p * q = 779 = это модуль, он используется как часть открытого и закрытого ключей.φ(N) = (p - 1)(q - 1) = 18 * 40 = 720 = функция Эйлера от N, она показывает количество чисел, взаимно простых с N.e = 691 = открытая экспонента, часть публичного ключа. Она должна быть взаимно проста с φ(N).d = 571 = закрытая экспонента, часть приватного ключа. Это мультипликативная обратная величина к e по модулю φ(N) (то есть: (d * e) % φ(N) = 1).Получается:
Открытый ключ:
(e, N) = (691, 779)Закрытый ключ:
(d, N) = (571, 779)Антон спрашивает у Маши — а сколько сантиметров хуй у Ивана?
Маша знает что у Ивана хуй — 21 сантиметр. Но Маше нужно это сообщить Антону, чтобы Иван не узнал.
Для этого Маше нужно знать открытый ключ Антона.
Берем открытый ключ из предыдущих вычислений
(691, 779).И шифруем хуй Ивана:
21^691 mod 779 = 717
Возводим длину хуя Ивана в 691 степень по модулю 779 и получаем число 717.
Теперь Маша передает без палева число 717 Антону.
Антон же с помощью закрытого ключа расшифровывает длину хуя Ивана.
717^571 mod 779 = 21
Аналогично возводим в степень по модулю. С помощью математики Антон узнаёт сколько сантиметров хуй у Ивана.
Даже линейка не понадобилась!
Подытожим:
Даже если Иван перехватит такое сообщение, то цифра 717 ему ни о чем не скажет, не может же быть хуй 717 см… хотя у леперов и пикабушников наверное так и есть.
Вот тебе пример на Bash:
#!/bin/bash
# Исходные данные
m=21
e=691
d=571
n=779
# Шифруем: c = m^e mod n
c=$(echo "$m ^ $e % $n" | bc)
echo "Зашифрованное сообщение: $c"
# Расшифровываем: m = c^d mod n
decrypted=$(echo "$c ^ $d % $n" | bc)
echo "Расшифрованное сообщение: $decrypted"
В результате получим: 717 и 21. Что и требовалось доказать!
В этот скрипт можешь подставить исходные данные своего прибора и результаты скинуть пиэму.
Чуть позже покажу как «ломают» такие ключи и как сгенерить RSA ключ с бэкдором.
Изучай!
—
Please open Telegram to view this post
VIEW IN TELEGRAM
1 123
Внедряем бэкдор в RSA
Здарова и с внеплановой пятницей!
Накидал тебе пост с практическим кодом, как внедряют дополнительную дырку в очко. В телегу оно сука не влезло, поэтому закинул в блог. А как работает RSA я разжевал тут.
Читать чтиво 👇
https://blog.bashdays.ru/vnedryaem-bekdor-v-rsa-klyuch/
Комменты можешь оставлять к этому посту, мож чё дельное напишешь.
🛠 #ssl #security #rsa #crypto
—
✅ @bashdays / @linuxfactory / @blog
Здарова и с внеплановой пятницей!
Накидал тебе пост с практическим кодом, как внедряют дополнительную дырку в очко. В телегу оно сука не влезло, поэтому закинул в блог. А как работает RSA я разжевал тут.
Читать чтиво 👇
https://blog.bashdays.ru/vnedryaem-bekdor-v-rsa-klyuch/
Комменты можешь оставлять к этому посту, мож чё дельное напишешь.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
1 54
Получаем SSL сертификат на IP адрес.
ㅤ
Вот и случилось, теперь ты можешь сгенерить валидный SSL сертификат для айпишника. Не самоподписанный, а прям настоящий от Lets Encrypt.
Единственный момент, такой серт будет валиден несколько дней (160 часов), поэтому придется почаще его выпускать, сейчас ставят 5 дней для обновления, как золотую середину. НЕ рекомендуется ставить 6, иначе можешь словить граблю. Вообще acme сам всё в кроне должен прописать, но это не точно.
Пока это может делать только acme, все остальные (certbot, angie) совсем скоро к этому придут.
Да, для домаших айпишников увы, такая чача не проканает, при попытке получить такой серт, получаем ошибку:
Ну оно и логично, спецификации никто не отменял.
Я буду генерить для
Приступим:
Не забудь подставить своё мыло, а то меня спамом завалит и я буду материться на кота.
Конфигурируем
Создаем структуру папок и релоадим:
Выписываемпиздюлей сертификат:
Отлично, сертификат получили, устанавливаем:
Добавляем дополнительный блок в
Перезапускаем:
И радуемся, теперь у тебя есть валидный SSL на голом айпишнике:
Дело в шляпе, что сказать? Пиздато! Порой ОЧЕНЬ не хочется привязывать домен, чтобы обзавестись SSL сертификатом, теперь выход есть. Глядишь найдется хак, чтобы сгенерить подобное для 192.168.0.1, но наверное это из оперы моих влажных фантазий.
🛠 #linux #devops #ssl
—
💬 Bashdays 📲 MAX 🌐 LF 🔵 Blog
ㅤ
Вот и случилось, теперь ты можешь сгенерить валидный SSL сертификат для айпишника. Не самоподписанный, а прям настоящий от Lets Encrypt.
Не путать с mkcert, это совсем другое.
Единственный момент, такой серт будет валиден несколько дней (160 часов), поэтому придется почаще его выпускать, сейчас ставят 5 дней для обновления, как золотую середину. НЕ рекомендуется ставить 6, иначе можешь словить граблю. Вообще acme сам всё в кроне должен прописать, но это не точно.
Пока это может делать только acme, все остальные (certbot, angie) совсем скоро к этому придут.
Да, для домаших айпишников увы, такая чача не проканает, при попытке получить такой серт, получаем ошибку:
Cannot issue for \"192.168.10.91\": IP address is in a reserved address block: [RFC1918]: Private-Use"
Ну оно и логично, спецификации никто не отменял.
Я буду генерить для
178.72.129.181 на котором у меня установлен nginx. Виртуалка прерываемая, так что денег практически не жрет, для тестов в настоящем облаке — милое дело.Приступим:
Не забудь подставить своё мыло, а то меня спамом завалит и я буду материться на кота.
curl https://get.acme.sh | sh -s email=shubkin@bashdayz.ru
Конфигурируем
default в nginx:server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
location ~ ^/.well-known/(acme-challenge|pki-validation)/ {
add_header Content-Type text/plain;
root /var/www/letsencrypt;
}
location / {
return 301 https://$host$request_uri;
}
}Создаем структуру папок и релоадим:
mkdir -p /var/www/letsencrypt
mkdir -p /etc/nginx/ssl
nginx -t
nginx -s reload
Выписываем
acme.sh --issue --server letsencrypt -d 178.72.129.181 -w /var/www/letsencrypt --certificate-profile shortlived --days 3
Отлично, сертификат получили, устанавливаем:
acme.sh --install-cert -d 178.72.129.181 --key-file /etc/nginx/ssl/ip.key --fullchain-file /etc/nginx/ssl/ip.crt --ca-file /etc/nginx/ssl/ip.ca.crt --reloadcmd "systemctl restart nginx"
Добавляем дополнительный блок в
default в nginx:server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name _;
return 403;
ssl_certificate /etc/nginx/ssl/ip.crt;
ssl_certificate_key /etc/nginx/ssl/ip.key;
}Перезапускаем:
nginx -t
nginx -s reload
И радуемся, теперь у тебя есть валидный SSL на голом айпишнике:
Общее имя (ЦС) YE1
Организация Let's Encrypt
Дата выдачи: 29 января 2026 г.
Срок действия: 5 февраля 2026 г.
Дело в шляпе, что сказать? Пиздато! Порой ОЧЕНЬ не хочется привязывать домен, чтобы обзавестись SSL сертификатом, теперь выход есть. Глядишь найдется хак, чтобы сгенерить подобное для 192.168.0.1, но наверное это из оперы моих влажных фантазий.
—
Please open Telegram to view this post
VIEW IN TELEGRAM
12 47