Ezen egy ideje rágódom, de nem találtam jó megoldást.
Van egy gép, linux, netfilter, publikus IP cím.
Bejövő smtp, submission, pop3, imaps kapcsolódásokat egy másik gépre továbbítja: linux, postfix, dovecot.
Bejövő http és https kéréseket egy harmadik gépre: windows, valami webserver.
A mail serveren lejárt a startcom cert.
Szeretnék helyette letsencryptet, de ami példákat eddig láttam, mind http-t akart használni. Az meg nem jut el a géphez.
Valaki belefutott ebbe már?
Valami jó ötlet?
Nekem csak az jutott így hirtelen az eszembe, hogy a win gépre menjen egy letsencrypt és aztán az új fájlt kézzel majd valaki áthozza. De ez azért gáz.
- 1842 megtekintés
Hozzászólások
Igen, és nem kötelező a HTTP, megy pl. DNS-alapon is.
- A hozzászóláshoz be kell jelentkezni
Erről hol találok valami követhető leírást?
Amit eddig néztem, az ACME protokol leíráson kívül minden csak http-ről beszélt.
A protokol leírásban láttam DNS challenge-et, de mintha annak is a gépről kéne mennie gyorsan. Gondolom, ez akkor lenne járható út, ha azon a gépen futna egy bind vagy valami named, aminek a zóna fájljába a script belefirkálhatna.
Ez nem lehetetlen, de jelenleg nem így van megoldva, hanem a szolgáltatónál van a zóna definíció, és manuális és nehézkes a módosítása.
szerk: aha, látom, a következő hozzászólásban le is írtad. :-)
- A hozzászóláshoz be kell jelentkezni
#!/bin/sh
certbot certonly -n --keep --agree-tos --manual --email postmaster@example.com \
--preferred-challenges=dns --manual-public-ip-logging-ok \
--manual-auth-hook /etc/ssl/certbot/authenticator.sh \
--manual-cleanup-hook /etc/ssl/certbot/cleanup.sh \
-d mail.example.com -d mail1.example.com
authenticator.sh:
#!/bin/sh
#CERTBOT_DOMAIN: The domain being authenticated
#CERTBOT_VALIDATION: The validation string
DIR=$(dirname $0)
DNSDIR=/var/named/external
DNSRELOAD="/etc/init.d/named.external reload"
[ -z "${CERTBOT_DOMAIN}" -o -z "${CERTBOT_VALIDATION}" ] && echo "Missing environment parameters" && exit 1
SUBDOMAIN="${CERTBOT_DOMAIN%%.*}"
DOMAIN="${CERTBOT_DOMAIN#*.}"
CERTBOTFILE="${DNSDIR}/certbot.${DOMAIN}"
SOAFILE="${DNSDIR}/soa.${DOMAIN}"
[ ! -f "${CERTBOTFILE}" ] && echo "Missing certbot file for domain ${DOMAIN}: ${CERTBOTFILE}" && exit 1
[ ! -f "${SOAFILE}" ] && echo "Missing SOA file for domain ${DOMAIN}: ${SOAFILE}" && exit 1
"$DIR/replace.pl" "${CERTBOTFILE}" "${SOAFILE}" "_acme-challenge.${SUBDOMAIN}" "${CERTBOT_VALIDATION}"
$DNSRELOAD
sleep 10
A cleanup.sh ugyanez, csak a replace.pl hivásának utolsó paramétere meg a sleep 10 kimarad.
A sleep 10 a secondary frissülése miatt van benne, nálam ennyi elég, de ehhez ugye kell a notification-alapú azonnali frissülés. A korrekt megoldás amúgy a visszaellenőrzés lenne dig segítségével.
replace.pl:
#!/usr/bin/perl -w
use strict;
use POSIX;
my $zonefile = $ARGV[0];
my $soafile = $ARGV[1];
my $label = $ARGV[2];
my $txt = $ARGV[3];
if (! defined $zonefile || $zonefile eq '' ||
! defined $soafile || $soafile eq '' ||
! defined $label || $label eq '') {
print "Usage: $0 <zone file name> <soa file name> <DNS label> [<txt value>]\n";
exit 1;
}
my $zonetempfile = $zonefile.'.tmp.'.$$;
my $soatempfile = $soafile.'.tmp.'.$$;
if (! open(ZONE, '<', $zonefile)) {
print "Error opening zone file $zonefile: $!\n";
exit 2;
}
if (! open(ZONETEMP, '>', $zonetempfile)) {
print "Error opening zone temp file $zonetempfile: $!\n";
close(ZONE);
exit 2;
}
while (<ZONE>) {
chomp;
if (/^\s*(\S+)/o) {
next if $1 eq $label;
print $1."\n";
}
print ZONETEMP $_."\n";
}
print ZONETEMP $label.' 300 IN TXT "'.$txt.'"'."\n" if defined $txt;
close(ZONETEMP);
close(ZONE);
if (! rename($zonetempfile, $zonefile)) {
print "Error renaming zone temp file $zonetempfile to $zonefile: $!\n";
exit 2;
}
my $state = 0;
if (! open(SOA, '<', $soafile)) {
print "Error opening zone file $soafile: $!\n";
exit 2;
}
if (! open(SOATEMP, '>', $soatempfile)) {
print "Error opening zone temp file $soatempfile: $!\n";
close(SOA);
exit 2;
}
while (<SOA>) {
chomp;
if ($state == 0 && /\(/o) {
$state = 1;
}
elsif ($state == 1 && /(\d+)/o) {
$state = 2;
my $serial = $1;
my $next = $serial + 1;
my $minimum = strftime('%Y%m%d01', localtime);
$next = $minimum if $next < $minimum;
s/\d+/$next/e;
}
print SOATEMP $_."\n";
}
close(SOATEMP);
close(SOA);
if (! rename($soatempfile, $soafile)) {
print "Error renaming zone temp file $soatempfile to $soafile: $!\n";
exit 2;
}
exit 0;
db.example.com:
$TTL 86400
$INCLUDE soa.example.com
...
$INCLUDE certbot.example.com
soa.example.com:
@ SOA ns.example.com. hostmaster.example.com. (
2017050520 ; serial
28800 ; refresh = 8h
14400 ; retry = 4h
5184000 ; expire = 60d
86400 ) ; minimum = 1d
- A hozzászóláshoz be kell jelentkezni
manualisan is csinalhatod es akar DNS-en keresztul is :
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni
sub
- A hozzászóláshoz be kell jelentkezni
subs
- A hozzászóláshoz be kell jelentkezni
Illetve az jutott még az eszembe, hogy a mail szerver gépre tudok httpd-t tenni, és a gateway gép valami nem standard portot át tud irányítani oda.
Ez segít? Van olyan letsencrypt ellenőrzés, ami pl. 80-as port helyett hajlandó más port számot használni?
- A hozzászóláshoz be kell jelentkezni
Csak 80-on megy (esetleg 443). A windows web szerverében az acme-challenge path-t proxy-zd át a linuxra, szerintem ez a legrobusztusabb megoldás.
- A hozzászóláshoz be kell jelentkezni
Megkérem azokat, akik azt a gépet faragják. Köszi az ötletet!
- A hozzászóláshoz be kell jelentkezni
Ha DNS-hez hozzáférsz akkor az a legegyszerűbb szerintem. Én az acme.sh script-tet használom (pure bash), kb. így:
./acme.sh --issue --dns -d mail.domain.hu
Ez kiír egy kódot, azt fel kell venni _acme-challenge.mail.domain.hu TXT rekordba, majd
./acme.sh --renew -d mail.domain.hu
- A hozzászóláshoz be kell jelentkezni
subscribe
kellhet még
- A hozzászóláshoz be kell jelentkezni
- zárja be valaki a codetaget...
- A hozzászóláshoz be kell jelentkezni
úgy hagytam? Szorijja
- A hozzászóláshoz be kell jelentkezni