- Mitglied seit
- 15. Mai 2008
- Beiträge
- 21.900
- Punkte für Reaktionen
- 14
- Punkte
- 0
so, den Wünschen mal folgend hab ich was Schlichtes für die Key-Generierung gemacht. Basis ist die Anleitung aus dem Wiki. Das Syno-Skript auf der DS hab ich nicht so ganz verstanden. Das sollte irgendwas einfacher machen; erklärt aber nicht, was es eigentlich macht. Da finde ich die Wiki-Anleitung 10x besser.
Damit jedem klar ist, was passiert, nochmal ganz kurz das Szenario. Wir brauchen einen server.key für unsere DS. Das wäre ganz einfach. Aber dieser soll auch noch von einer Stelle auf Echtheit bestätigt werden. Diese Stelle heisst Certification Authority. Das ist normalerweise eine Firma/Organisation, die gegen Geld alles für uns machen würde. Aber das Geld wollen wir ja nicht ausgeben und deshalb machen wir kurzerhand die DS auch gleich zur Certification Authority. Dafür brauch sie auch einen eigenen ca.key. Damit wir wissen, wem dieser ca.key gehört, werden nette Angaben nötig und diese werden zusammengemischt mit dem ca.key zu einem ca.csr (certificate signing request). Alles hat ein Ende nur die ****. Also auch die Gültigkeit einer Certification Authority wird irgendwann auslaufen, genauso wie ihr ca.key. Das wird nun auch noch eingemischt zu einem Certification Authority Certificate (ca.csr). Des ist das, was man im Browser suchen muss, damit einem was bestätigt wird.
Und woher weiß nu die CertificationAuthority was von unserem server.key? Weil wir den nu auch zusammen mischen mit unseren Angaben zu einem server.csr (certificate signing request) und dann gegen das CertificationAuthority Certificate laufen lassen wegen der Gültigkeit usw. Das Ergebnis ist ein Server Authority Certificate, in dem drinsteht wie lange es gültig ist, für wen es gilt und welche CertificationAuthority die Richtigkeit bestätigen kann. Und natürlich spielt auch der Serverschlüssels da mit, so dass man sicher sein kann, dass auch alles seine Richtigkeit hat. Mehr sag ich nu nicht mehr dazu.
Langer Rede kurzer Sinn: statt einen Schlüssel und ein Zertifikat brauchen wir halt zwei und sind damit autonom und ich hab die Dauer der Zertifikate mal auf 3600 Tage gesetzt ... passt ja ungefähr zur Haltbarkeit der DS
Also das Skript heißt /usr/syno/synoman/phpsrc/certificate/certificate.php und enthält:
Das Skript erstellt automatisch die ganze ssl-Directory-Struktur, aber halt im Verzeichnis /usr/syno/synoman/phpsrc/certificate/. So kommt auch nichts durcheinander. Wenn mich nicht alles täuscht, muss man die openssl.cnf-Datei wie im Wiki beschrieben downloaden (hier noch mal der link: http://www.gateway-1.homedns.org/synology/openssl.cnf), weil sonst das ganz nicht läuft. Aber wie gesagt, habs nicht ausprobiert, weil ich das ja schon alles manuell gemacht hatte.
Wenn der Server-Key fertig ist, wird ein gibt es einen Download-Link. Da kann man ihn sich anschauen, ansonsten steht er halt im Verzeichnis /usr/syno/synoman/phpsrc/certificate/ unter dem Namen server.key. Diese Datei braucht man für den jeweiligen Browser (also auf den PC kopieren und als Schlüssen einfügen). So hab ich es gemacht - weiß net obs auch anders geht.
Achtung: Es werden jedesmal alles Key gelöscht, bevor neue erstellt werden. Also die im Verzeichnis /usr/syno/synoman/phpsrc/certificate/, nicht die, wo Syno sonst stehen hat. Mit anderen Worten, diese Application ist sinnvollerweise nur einmal zu verwenden oder dann wieder, wenn man komplett alle Schlüssel neu braucht.
Das manulle Kopieren an die Stellen, wo die Syno es braucht, ist auch in besagtem Wiki erläutert. (Des dahin zu kopieren, war mit doch ein wenig zu heiß).
Wie immer das nette Bildchen und auch wie immer der Hinweis, alles geht auf eigene Kappe Falls was falsch ist, dann gehts auf meine
Damit jedem klar ist, was passiert, nochmal ganz kurz das Szenario. Wir brauchen einen server.key für unsere DS. Das wäre ganz einfach. Aber dieser soll auch noch von einer Stelle auf Echtheit bestätigt werden. Diese Stelle heisst Certification Authority. Das ist normalerweise eine Firma/Organisation, die gegen Geld alles für uns machen würde. Aber das Geld wollen wir ja nicht ausgeben und deshalb machen wir kurzerhand die DS auch gleich zur Certification Authority. Dafür brauch sie auch einen eigenen ca.key. Damit wir wissen, wem dieser ca.key gehört, werden nette Angaben nötig und diese werden zusammengemischt mit dem ca.key zu einem ca.csr (certificate signing request). Alles hat ein Ende nur die ****. Also auch die Gültigkeit einer Certification Authority wird irgendwann auslaufen, genauso wie ihr ca.key. Das wird nun auch noch eingemischt zu einem Certification Authority Certificate (ca.csr). Des ist das, was man im Browser suchen muss, damit einem was bestätigt wird.
Und woher weiß nu die CertificationAuthority was von unserem server.key? Weil wir den nu auch zusammen mischen mit unseren Angaben zu einem server.csr (certificate signing request) und dann gegen das CertificationAuthority Certificate laufen lassen wegen der Gültigkeit usw. Das Ergebnis ist ein Server Authority Certificate, in dem drinsteht wie lange es gültig ist, für wen es gilt und welche CertificationAuthority die Richtigkeit bestätigen kann. Und natürlich spielt auch der Serverschlüssels da mit, so dass man sicher sein kann, dass auch alles seine Richtigkeit hat. Mehr sag ich nu nicht mehr dazu.
Langer Rede kurzer Sinn: statt einen Schlüssel und ein Zertifikat brauchen wir halt zwei und sind damit autonom und ich hab die Dauer der Zertifikate mal auf 3600 Tage gesetzt ... passt ja ungefähr zur Haltbarkeit der DS
Also das Skript heißt /usr/syno/synoman/phpsrc/certificate/certificate.php und enthält:
Rich (BBCode):
<?php
$hostname = array();
exec("hostname -s",$hostname);
if ($_REQUEST['action'] == 'cert') {
exec("if [ -d ssl.crt ] ; then rm ssl.crt/*; else mkdir ssl.crt; fi");
exec("if [ -d ssl.csr ] ; then rm ssl.csr/*; else mkdir ssl.csr; fi");
exec("if [ -d ssl.key ] ; then rm ssl.key/*; else mkdir ssl.key; fi");
exec("openssl genrsa -out ssl.key/ca.key 1024");
exec("openssl genrsa -out ssl.key/server.key 1024");
exec("openssl req -new -key ssl.key/ca.key -out ssl.csr/ca.csr <<EOF
".$_REQUEST['country']."
".$_REQUEST['state']."
".$_REQUEST['city']."
".$_REQUEST['organisation']."
".$_REQUEST['unit']."
".$_REQUEST['name']."
".$_REQUEST['email']."
.
.
EOT");
exec("openssl req -new -key ssl.key/server.key -out ssl.csr/server.csr <<EOT
".$_REQUEST['countryi1']."
".$_REQUEST['state1']."
".$_REQUEST['city1']."
".$_REQUEST['organisation1']."
".$_REQUEST['unit1']."
".$_REQUEST['name1']."
".$_REQUEST['email1']."
.
.
EOT");
exec("openssl x509 -req -days 3600 -in ssl.csr/ca.csr -signkey ssl.key/ca.key -out ssl.crt/ca.crt");
exec("openssl x509 -req -days 3600 -in ssl.csr/server.csr -CA ssl.crt/ca.crt -CAkey ssl.key/ca.key
-set_serial 01 -out ssl.crt/server.crt");
exec("openssl rsa -in ssl.key/server.key -out server.key");
print "<a href='server.key'>download server key</a>";
}
?>
<html><head><title>certificate</title></head><body>
<style>body,input,td{font:11px Verdana}</style>
<form id="f" name="f" method="get" action="certificate.php">
<input type="hidden" name="action" id="action" value="">
<h3>Certification Authority Certificate</h3>
<table>
<tr><td>Country:</td><td><input type="text" name="country" size=2 value="DE"></td></tr>
<tr><td>State:</td><td><input type="text" name="state" value="Hessen"></td></tr>
<tr><td>City:</td><td><input type="text" name="city" value="Frankfurt"></td></tr>
<tr><td>Organisation:</td><td><input type="text" name="organisation" value="Flughafen"></td></tr>
<tr><td>Unit:</td><td><input type="text" name="unit" value="Terminal_A"></td></tr>
<tr><td>Common Name:</td><td><input type="text" name="name" value="Diskstation Serien-Nr."></td></tr>
<tr><td>Email:</td><td><input type="text" name="email" value="me@syno.de"></td></tr>
</table>
<h3>Server Certificate</h3>
<table>
<h3>Server Certificate</h3>
<table>
<tr><td>Country:</td><td><input type="text" name="country1" size=2 value="DE"></td></tr>
<tr><td>State:</td><td><input type="text" name="state1" value="Hessen"></td></tr>
<tr><td>City:</td><td><input type="text" name="city1" value="Frankfurt"></td></tr>
<tr><td>Organisation:</td><td><input type="text" name="organisation1" value="Flughafen"></td></tr>
<tr><td>Unit:</td><td><input type="text" name="unit1" value="Terminal_A"></td></tr>
<tr><td>Common Name*:</td><td><input type="text" name="name1" value="<?php print $hostname[0]; ?> ???"></td></tr>
<tr><td>Email:</td><td><input type="text" name="email1" value="me@syno.de"></td></tr>
</table>
<br>* https://<i><?php print $hostname[0]; ?></i>:5001/webman/index.cgi<br><br><br>
<input type="button" value="create certificateblic"
onclick="document.getElementById('action').value='cert';f.submit();">
</form>
</body></html>
Das Skript erstellt automatisch die ganze ssl-Directory-Struktur, aber halt im Verzeichnis /usr/syno/synoman/phpsrc/certificate/. So kommt auch nichts durcheinander. Wenn mich nicht alles täuscht, muss man die openssl.cnf-Datei wie im Wiki beschrieben downloaden (hier noch mal der link: http://www.gateway-1.homedns.org/synology/openssl.cnf), weil sonst das ganz nicht läuft. Aber wie gesagt, habs nicht ausprobiert, weil ich das ja schon alles manuell gemacht hatte.
Wenn der Server-Key fertig ist, wird ein gibt es einen Download-Link. Da kann man ihn sich anschauen, ansonsten steht er halt im Verzeichnis /usr/syno/synoman/phpsrc/certificate/ unter dem Namen server.key. Diese Datei braucht man für den jeweiligen Browser (also auf den PC kopieren und als Schlüssen einfügen). So hab ich es gemacht - weiß net obs auch anders geht.
Achtung: Es werden jedesmal alles Key gelöscht, bevor neue erstellt werden. Also die im Verzeichnis /usr/syno/synoman/phpsrc/certificate/, nicht die, wo Syno sonst stehen hat. Mit anderen Worten, diese Application ist sinnvollerweise nur einmal zu verwenden oder dann wieder, wenn man komplett alle Schlüssel neu braucht.
Das manulle Kopieren an die Stellen, wo die Syno es braucht, ist auch in besagtem Wiki erläutert. (Des dahin zu kopieren, war mit doch ein wenig zu heiß).
Wie immer das nette Bildchen und auch wie immer der Hinweis, alles geht auf eigene Kappe Falls was falsch ist, dann gehts auf meine
Anhänge
Zuletzt bearbeitet: