Die Zertifikate werden von imscp in der Datenbank abgelegt. Es sprich VIELES gegen diesen Weg. Ein automatisiertes Skript, welches anschließend die Zertifikate in die Datenbank importiert und den Domainstatus auf tochange stellt, wäre sicherlich um Einiges sauberer und imscp-komform.
Wie auch immer, wir hoffen, dass wir in nächster Zeit ein Plugin für LetsEncrypt entwickeln können
Ich hab da mal gerade was zusammengebastelt.
- import subprocess
- import os
- import MySQLdb
- username="root"
- pw=""
- pfadLetsencryptauto="/root/letsencrypt-entwicklung/letsencrypt/letsencrypt-auto"
- db = MySQLdb.connect( host="localhost",
- user=username,
- passwd=pw,
- db="imscp")
- cur = db.cursor()
- cur.execute("SELECT domain_name from domain;");
- for domainTmp in cur.fetchall():
- domain = domainTmp[0]
- print domain
- domainListe = []
- cmd = pfadLetsencryptauto+" certonly --renew-by-default --webroot -w /var/www/virtual/"+domain+"/htdocs/ -d "+domain+" -d www."+domain
- cur.execute("select subdomain_name,subdomain_mount from subdomain where domain_id=(select domain_id from domain where domain_name='"+domain+"');");
- for subdomain in cur.fetchall():
- domainListe.append(subdomain[0]+"."+domain);
- cmd = cmd +" -w /var/www/virtual/"+(domain+subdomain[1])+"/htdocs/ -d "+(subdomain[0]+"."+domain)
- print domainListe
- print cmd
- os.system(cmd)
- pkey = open("/etc/letsencrypt/live/"+domain+"/privkey.pem",'r').read() #default-pfad
- chain = open("/etc/letsencrypt/live/"+domain+"/chain.pem",'r').read() #default-pfad
- cert = open("/etc/letsencrypt/live/"+domain+"/cert.pem",'r').read() #default-pfad
- cur.execute("""update ssl_certs set
- ca_bundle=%s,
- private_key=%s,
- certificate=%s,
- status=%s
- where
- domain_type='dmn'
- AND domain_id=(select domain_id from domain where domain_name=%s)
- """
- ,(chain,pkey,cert,'tochange',domain));
- foo = cur.execute("""update ssl_certs set
- ca_bundle=%s,
- private_key=%s,
- certificate=%s,
- status=%s
- where domain_type='sub'
- AND domain_id IN (select subdomain_id
- from subdomain
- where domain_id= (select domain_id from domain where domain_name=%s)
- );
- """,(chain,pkey,cert,'tochange',domain));
- cur.execute("update domain set domain_status='tochange'");
- cur.execute("update subdomain set subdomain_status='tochange'");
- db.commit();
- os.system("/var/www/imscp/engine/imscp-rqst-mngr")
all zu viel arbeit ist nicht reingeflossen, dementsprechend auch nicht sehr sauber etc bla, funktioniert aber bei uns auf dem server problemlos so. zugangsdaten rein,pfade anpassen und ab gehts.
wer es erstmal nur testen will kann im obersten statement noch eine where-clause hinzufügen "where domain_name='i-mscp.net'" und das ganze dann erstmal nur dafür ausprobieren.
Am anfang sollte man einmal Lets Encrypt laufen lassen oder die entsprechenden flags für die EMail-adresse und zum akzeptierend er TOS setzen