LINUX.ORG.RU
ФорумAdmin

скрипт получения cert.pem для cloudflared туннеля

 ,


0

1

Вот такой bash скрипт успешно генерирует сертификат cert.pem:

#!/bin/bash

## example parameters, adjust as needed
ORIGIN_CA_KEY="v1.0-foobar"
CF_API_KEY="asdfasdfasdfasdf"
CF_EMAIL="user@example.com"
TUNNEL_ZONE_ID="6795546b5945173001744653a958d6cf"
TUNNEL_HOSTNAMES='["mytunnel.example.com"]'
 
## now for the actual script:
set -e
 
curl -s https://api.cloudflare.com/client/v4/user/service_keys/origintunnel \
  -H "x-auth-key: $CF_API_KEY" \
  -H "x-auth-email: $CF_EMAIL" \
  | jq -r .result.service_key \
  > tunnel_service_key.txt
 
# generate private key
openssl ecparam -name prime256v1 -out tunnel_private_key_params.txt
openssl req -batch -new -newkey ec:tunnel_private_key_params.txt -nodes -out csr.txt -keyout tunnel_private_key.txt -subj "/C=US/CN=CloudFlare"
 
# make cert.pem, containing
# 1. Private key (in PKCS #8 format)
openssl pkcs8 -topk8 -in tunnel_private_key.txt -nocrypt -out cert.pem
 
# 2. public key from originCA
curl -s -XPOST https://api.cloudflare.com/client/v4/certificates \
  -H "Content-Type: application/json" \
  -H "X-Auth-User-Service-Key: $ORIGIN_CA_KEY" \
  -d "$(jq -n --arg csr "$(cat csr.txt)" --argjson hostnames "$TUNNEL_HOSTNAMES" '{hostnames:$hostnames,requested_validity:5475,request_type:"origin-ecc",csr:$csr}')" \
  | jq -r .result.certificate \
  >> cert.pem
 
# 3. Argo Tunnel token
echo "-----BEGIN ARGO TUNNEL TOKEN-----" >> cert.pem
echo -n "$(echo $TUNNEL_ZONE_ID; cat tunnel_service_key.txt)" | base64 | fold -w 64 >> cert.pem
echo "-----END ARGO TUNNEL TOKEN-----" >> cert.pem

Это вместо того, чтобы запускать команду

$ cloudflared tunnel login

на системах, где нет браузера.

Но вот потом при создании самого туннеля ругается на то, что нужно обновить сертификат перед созданием новых туннелей:

$ cloudflared tunnel create tunnel-1
failed to create tunnel: couldn't create client to talk to Cloudflare Tunnel backend: Origin certificate needs to be refreshed before creating new tunnels.\nDelete /home/uzer/.cloudflared/cert.pem and run "cloudflared login" to obtain a new cert.

Все необходимые переменные перепроверил: ORIGIN_CA_KEY, CF_API_KEY, CF_EMAIL, TUNNEL_ZONE_ID и TUNNEL_HOSTNAMES проверял - указывал верные значения. Получается или сам Cloudflared API изменился со времени написания скрипта или ошибка в самом скрипте? Может у кого-то есть обновленная версия подобного скрипта?



Последнее исправление: zorinquen (всего исправлений: 1)

Я стесняюсь спросить, что будет если сделать как просят ?

Delete /home/uzer/.cloudflared/cert.pem and run "cloudflared login" to obtain a new cert.

LANcetnick
()
Ответ на: комментарий от LANcetnick

Если бы на этой системе был бы установлен браузер, то он запустился бы автоматически и нужно было бы авторизоваться. А так приходится вручную копипастить этот URL и открывать на своем ноуте. Хотелось автоматизировать процесс…

zorinquen
() автор топика
Ответ на: комментарий от zorinquen

Какой браузер, какой url ? У вас скрипт не работает или надо чтобы он запускался с периодичностью ? Если запускался, то cron и systemd в помощь.

LANcetnick
()
Ответ на: комментарий от LANcetnick

скрипт работает, но сертификат который он генерирует не принимается при создании самого туннеля.

zorinquen
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.