== CSLab CA - Add or Replace a user's certificate == === Οδηγίες === Πριν φτιάξουμε νέο certificate, κρατάμε backup τα παλιά cert, key και csr. Αρχικά, πέφτουμε στη μαύρη τρύπα, πάμε στο ca και πάμε στο `~/CSLab-CA` (`ssh blackhole`, `sup su -`, `ssh ca`). Έστω ότι το παλιό πιστοποιητικό είναι το `cslab-foo.cert`. Μέσα στο CSLab-CA βρίσκουμε το `cslab-foo.{cert,key}`. ΣΤο φάκελο requests βρίσκουμε αντίστοιχα το `cslab-foo.csr`. Κάνουμε: {{{ root@ca:~/CSLab_CA# mv cslab-foo.cert expired/cslab-foo_20YYMMDD.cert # year, month, day root@ca:~/CSLab_CA# mv cslab-foo.key expired/cslab-foo_20YYMMDD.key # oi admins to 2100 na allaksoun kai to 3o digit gia to Year:) root@ca:~/CSLab_CA# cd requests root@ca:~/CSLab_CA/requests/# mv cslab-foo.csr expired/cslab-foo_20YYMMDD.csr }}} Τώρα εκδίδουμε το νέο πιστοποιητικό (αλλάζοντας dir, `cd ~/temp/`) με την ακόλουθη εντολή: `root@ca:~/temp/# openssl req -nodes -new -keyout cslab-username.key -out cslab-username.csr -subj '/C=GR/ST=Attiki/O=CSLab/CN=FirstName LastName/emailAddress=email@somedomain.com'` Note: to CN δεν χωρίζεται με enter, αλλά με space. Επίσης, για servers, στο CN βάζουμε το DNS του. Κάνουμε `cp` τα παραγόμενα `cslab-username.{key,csr}` στο `~/CSLab-CA/` και το `cslab-username.csr` το πάμε (με `cp`) και στο `~/CSLab-CA/requests/`. Κάνουμε `make sign` (πρέπει να ξέρουμε τη ρίζα του κακού - αν δεν την ξέρουμε πέφτουμε στη μαύρη τρύπα εκ νέου - Hint: Capital First, spaces, plural) και το νέο πιστοποιητικό μόλις δημιουργήθηκε (`~/CSLab-CA/cslab-username.cert`). Μπορούμε τώρα να σβήσουμε τα αρχεία από το `~/temp/` (όλα μπορούμε να τα βρούμε από το CSLab-CA), ή να κάνουμε `cp` το νέο `cert` στο `~/temp/` ώστε να το πακετάρουμε σε tar αργότερα. Τέλος, πρέπει να ενημερώσουμε τον `root@ca` ότι τα certificates που παραλίγο να λήξουν έγιναν update: {{{ root@ca:~/CSLab-CA/# ./check_dates.sh # Keep the cert's 4-digit HEX (ABCD) root@ca:~/CSLab-CA/# ls oldcerts/ | grep ABCD # this must return nothing root@ca:~/CSLab-CA/# mv newcerts/ABCD.pem oldcerts/ # If ABCD already existed, change its name root@ca:~/CSLab-CA/# ./check_dates.sh # Old entry has vanished, new entry is at the bottom }}} Πακετάρουμε τα `cslab-username.{cert,key,csr}` σε ένα taraki και το ρίχνουμε το tar στη μαύρη τρύπα, από εκεί στο `~` directory μας και από το pc μας `scp` για να τα πάρουμε. === Useful tips για την εγκατάσταση πιστοποιητικών === Βρίσκουμε από τα conf files της εφαρμογής την τοποθεσία του cert και key αρχείου και δίνουμε ΜΕΓΑΛΗ ΕΜΦΑΣΗ στο όνομα τους. Πχ, για την περίπτωση ενός site, συνήθως η τοποθεσία του πιστοποιητικού δηλώνεται στο `/etc/apache/sites-enabled/site-name`. Γενικά η default τοποθεσία των πιστοποιητικών είναι το `/etc/ssl/`. Πάντα δημιουργούμε log φάκελο με τα expired certs/keys και αναγράφουμε το timestamp δημιουργίας. Μόλις βεβαιωθούμε ότι τα νέα πιστοποιητικά/κλειδιά έχουν εγκατασταθεί στο σωστό dir και έχουν το σωστό όνομα, κάνουμε reload το service που τα χρειάζεται (στην περίπτωση του apache τουλάχιστον, δεν χρειάζεται restart). **ypap note**: Ένα άλλο πιθανό μέρος που βρίσκονται τα certificates είναι το `/etc/ssl/certs/`. Αν η κατάληξη είναι `.crt` αρκεί ένα `mv` από `.cert` σε `.crt`. Αν βρούμε φάκελο expired, φροντίζουμε να μεταφέρουμε τα παλιά πιστοποιητικά με αντίστοιχο τρόπο όπως στην αρχή των οδηγιών. **known issue**: αν χρειαστεί να αλλάξουμε πιστοποιητικό στον CUPS (located @ santorini), για να πειράξουμε τα πιστοποιητικά του πρέπει πρώτα να κλείσουμε το service με `/etc/init.d/cups stop` και μετά να βάλουμε τα νέα certs (αν το κάνουμε με τον cups να τρέχει θα κάνει override τα certs με δικά του, issued by root@santorini). **known issue 2**: προσοχή στις επεκτάσεις των certificates. Το ca παράγει `.cert` αρχεία, ενώ κάποια services έχουν δηλωμένα `.crt` πιστοποιητικά. Για να μην αλλαχθούν τα conf files τους, απλά κάνουμε rename το `.cert` (ούτως ή άλλως θα χρειαστεί το rename) προσέχοντας και την επέκταση. === Χρήσιμες εντολές === Για να δούμε ένα παλιό πιστοποιητικό (πχ, πότε βγήκε, ποιος το έβγαλε, κοκ) κάνουμε `openssl x509 -noout -in cslab-foo.cert -text` === Δημιουργία CSR === `openssl req -nodes -new -keyout cslab-username.key -out cslab-username.csr -subj '/C=GR/ST=Attiki/O=CSLab/CN=FirstName LastName/emailAddress=email@somedomain.com'` Προσοχή! : στο CN=FirstName Lastname έχουμε κενό, όχι αλλαγή γραμμής. Το στέλνουμε στον CSLab CA admin. Warning: Επειδή υπάρχει inconsistency με τα encodings κάποιων openssl clients (UTF-8 vs PRINTABLESTRING), προτού δημιουργήσουμε το request βεβαιωνόμαστε ότι το αρχείο `/etc/ssl/openssl.cnf` περιέχει τη γραμμή `string_mask = default` και όχι `string_mask = utf8only`. Σε αντίθετη περίπτωση αλλάζουμε το value σε default και στη συνέχεια δημιουργούμε το request (αν θέλουμε μετά το ξαναλλάζουμε).