| 1 | == CSLab CA - Add or Replace a user's certificate == |
| 2 | |
| 3 | === Οδηγίες === |
| 4 | |
| 5 | Πριν φτιάξουμε νέο 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`. Κάνουμε: |
| 6 | |
| 7 | {{{ |
| 8 | root@ca:~/CSLab_CA# mv cslab-foo.cert expired/cslab-foo_20YYMMDD.cert # year, month, day |
| 9 | 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:) |
| 10 | root@ca:~/CSLab_CA# cd requests |
| 11 | root@ca:~/CSLab_CA/requests/# mv cslab-foo.csr expired/cslab-foo_20YYMMDD.csr |
| 12 | }}} |
| 13 | |
| 14 | Τώρα εκδίδουμε το νέο πιστοποιητικό (αλλάζοντας dir, `cd ~/temp/`) με την ακόλουθη εντολή: |
| 15 | |
| 16 | `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'` |
| 17 | |
| 18 | Note: to CN δεν χωρίζεται με enter, αλλά με space. Επίσης, για servers, στο CN βάζουμε το DNS του. |
| 19 | |
| 20 | Κάνουμε `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 αργότερα. |
| 21 | |
| 22 | Τέλος, πρέπει να ενημερώσουμε τον `root@ca` ότι τα certificates που παραλίγο να λήξουν έγιναν update: |
| 23 | |
| 24 | {{{ |
| 25 | root@ca:~/CSLab-CA/# ./check_dates.sh # Keep the cert's 4-digit HEX (ABCD) |
| 26 | root@ca:~/CSLab-CA/# ls oldcerts/ | grep ABCD # this must return nothing |
| 27 | root@ca:~/CSLab-CA/# mv newcerts/ABCD.pem oldcerts/ # If ABCD already existed, change its name |
| 28 | root@ca:~/CSLab-CA/# ./check_dates.sh # Old entry has vanished, new entry is at the bottom |
| 29 | }}} |
| 30 | |
| 31 | Πακετάρουμε τα `cslab-username.{cert,key,csr}` σε ένα taraki και το ρίχνουμε το tar στη μαύρη τρύπα, από εκεί στο `~` directory μας και από το pc μας `scp` για να τα πάρουμε. |
| 32 | |
| 33 | === Useful tips για την εγκατάσταση πιστοποιητικών === |
| 34 | |
| 35 | Βρίσκουμε από τα conf files της εφαρμογής την τοποθεσία του cert και key αρχείου και δίνουμε ΜΕΓΑΛΗ ΕΜΦΑΣΗ στο όνομα τους. Πχ, για την περίπτωση ενός site, συνήθως η τοποθεσία του πιστοποιητικού δηλώνεται στο `/etc/apache/sites-enabled/site-name`. Γενικά η default τοποθεσία των πιστοποιητικών είναι το `/etc/ssl/`. Πάντα δημιουργούμε log φάκελο με τα expired certs/keys και αναγράφουμε το timestamp δημιουργίας. Μόλις βεβαιωθούμε ότι τα νέα πιστοποιητικά/κλειδιά έχουν εγκατασταθεί στο σωστό dir και έχουν το σωστό όνομα, κάνουμε reload το service που τα χρειάζεται (στην περίπτωση του apache τουλάχιστον, δεν χρειάζεται restart). |
| 36 | |
| 37 | **ypap note**: Ένα άλλο πιθανό μέρος που βρίσκονται τα certificates είναι το `/etc/ssl/certs/`. Αν η κατάληξη είναι `.crt` αρκεί ένα `mv` από `.cert` σε `.crt`. Αν βρούμε φάκελο expired, φροντίζουμε να μεταφέρουμε τα παλιά πιστοποιητικά με αντίστοιχο τρόπο όπως στην αρχή των οδηγιών. |
| 38 | |
| 39 | **known issue**: αν χρειαστεί να αλλάξουμε πιστοποιητικό στον CUPS (located @ santorini), για να πειράξουμε τα πιστοποιητικά του πρέπει πρώτα να κλείσουμε το service με `/etc/init.d/cups stop` και μετά να βάλουμε τα νέα certs (αν το κάνουμε με τον cups να τρέχει θα κάνει override τα certs με δικά του, issued by root@santorini). |
| 40 | |
| 41 | **known issue 2**: προσοχή στις επεκτάσεις των certificates. Το ca παράγει `.cert` αρχεία, ενώ κάποια services έχουν δηλωμένα `.crt` πιστοποιητικά. Για να μην αλλαχθούν τα conf files τους, απλά κάνουμε rename το `.cert` (ούτως ή άλλως θα χρειαστεί το rename) προσέχοντας και την επέκταση. |
| 42 | |
| 43 | === Χρήσιμες εντολές === |
| 44 | |
| 45 | Για να δούμε ένα παλιό πιστοποιητικό (πχ, πότε βγήκε, ποιος το έβγαλε, κοκ) κάνουμε |
| 46 | |
| 47 | `openssl x509 -noout -in cslab-foo.cert -text` |
| 48 | |
| 49 | === Δημιουργία CSR === |
| 50 | |
| 51 | `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'` |
| 52 | |
| 53 | Προσοχή! : στο CN=FirstName Lastname έχουμε κενό, όχι αλλαγή γραμμής. |
| 54 | |
| 55 | Το στέλνουμε στον CSLab CA admin. |
| 56 | |
| 57 | Warning: Επειδή υπάρχει inconsistency με τα encodings κάποιων openssl clients (UTF-8 vs PRINTABLESTRING), προτού δημιουργήσουμε το request βεβαιωνόμαστε ότι το αρχείο `/etc/ssl/openssl.cnf` περιέχει τη γραμμή `string_mask = default` και όχι `string_mask = utf8only`. Σε αντίθετη περίπτωση αλλάζουμε το value σε default και στη συνέχεια δημιουργούμε το request (αν θέλουμε μετά το ξαναλλάζουμε). |
| 58 | |