#!/bin/bash

OUTPUT_DIR="./k8s-ca"
mkdir -p "$OUTPUT_DIR"
 
# Параметры haproxy
HAPROXY_IP="<haproxy-ip3>"
HAPROXY_DNS="apiserver.my-cluster.dapp.test.un.sbt"
 
# Создание конфигурационного файла для CSR с дополнительными SAN
cat > "$OUTPUT_DIR/ca-csr.conf" <<EOF
[ req ]
default_bits       = 2048
distinguished_name = req_distinguished_name
req_extensions     = v3_req
prompt             = no
 
[ req_distinguished_name ]
CN = kubernetes-ca
 
[ v3_req ]
basicConstraints = CA:true
keyUsage = critical, digitalSignature, keyEncipherment, keyCertSign
subjectAltName = @alt_names
 
[ alt_names ]
IP.1 = <haproxy-ip1>
IP.2 = <haproxy-ip2>
IP.3 = $HAPROXY_IP
DNS.1 = kubernetes
DNS.2 = kubernetes.default
DNS.3 = kubernetes.default.svc
DNS.4 = kubernetes.default.svc.cluster.local
DNS.5 = $HAPROXY_DNS
EOF
 
# Генерация приватного ключа (этот ключ останется у пользователя)
openssl genrsa -out "$OUTPUT_DIR/ca.key" 2048
 
# Генерация Certificate Signing Request (CSR) - этот файл отправляется на подпись
openssl req -new \
  -key "$OUTPUT_DIR/ca.key" \
  -out "$OUTPUT_DIR/ca.csr" \
  -config "$OUTPUT_DIR/ca-csr.conf" \
  -extensions v3_req
 
# Вывод информации о созданном CSR
echo "CSR создан с дополнительными SAN для haproxy"
echo "Файлы:"
echo "  Приватный ключ: $OUTPUT_DIR/ca.key (храните в секрете)"
echo "  CSR для подписи: $OUTPUT_DIR/ca.csr (отправьте этот файл на подпись)"
echo
echo "Добавленные SAN:"
echo "  IP: $HAPROXY_IP"
echo "  DNS: $HAPROXY_DNS"
 
# Вывод CSR в base64 для удобства копирования
echo
echo "-----BEGIN CERTIFICATE REQUEST (ca.csr base64)-----"
base64 -w 0 "$OUTPUT_DIR/ca.csr"
echo
echo "-----END CERTIFICATE REQUEST-----"
 
echo
echo "После получения подписанного сертификата от корпоративного PKI:"
echo "1. Сохраните подписанный сертификат как $OUTPUT_DIR/ca.crt"
echo "2. Убедитесь, что цепочка сертификатов корректна"
