2011/1/24 <mickflemm [ at ] gmail [ dot ] com> > Εδώ και μερικές μέρες γράφω ένα ας πούμε frontend στην OpenSSL για να κάνω > ποιο εύκολα ελέγχους για την ισχύ πιστοποιητικών x509. Βασικά μου τη σπάει > το command line της OpenSSL και δε πολυβολεύει αν πχ. θες να τα κάνεις όλα > με τη μία και απλά. Στόχος μου ήταν να μπορώ να περνάω κάπου το certificate > του client/user/whatever και να τσεκάρω και το signature και το revocation > status με CRL και OCSP, να έχω την ευελιξία να του περάσω ca certificates > που δεν περιέχονται στο σύστημα (πχ. το class3 root certificate της CAcert) > ή να το υποχρεώσω να τσεκάρει κάποια CRL ακόμα και όταν δεν υπάρχει ορισμένο > distribution point στο certificate (π.χ. στα class3 signed certificates της > CAcert υπάρχει το OCSP uri αλλά όχι το CRL distrtibution point -ενώ υπάρχει > διαθέσιμη CRL-, αντίθετα σε όσα είναι signed με το class1 υπάρχουν και τα > δύο) + να κάνει handle και local resources και network resources > transparently. > > Έτσι έφτιαξα αυτό εδώ χρησιμοποιώντας OpenSSL + cURL με μερικά κολπάκια για > να κάνω τη δεύτερη να παίζει όπως τη θέλω :P > http://www.kernel.org/pub/linux/kernel/people/mickflemm/pkitest.tar.bz2 > > Καταρχάς το έχω κάνει debug με ένα class3 revoked certificate και ένα > class1 valid certificate και δουλεύει μια χαρά εδωπέρα, έχω όμως κάποιες > αμφιβολίες και θέλω να το δείτε κι εσείς και να μου πείτε. Ποιο > συγκεκριμένα: > > α) Φοβάμαι για memory leaks, γίνεται το χάος στην OpenSSL με τα macros της, > ενώ στην αρχή είχα φτάσει σε σημείο να κάνω double free κλπ (paranoid mode), > μετά το συμάζεψα κάπως και τώρα δε μου πετάει κάτι. Δεν κάθισα όμως να το > κάνω profile και να δω ότι πραγματικά δεν αφήνει σκουπίδια στο διάβα του. > > β) Πιστεύω ότι υπάρχει κάποιο καλύτερο regexp για το URL από αυτό που του > έχω βάλει. > > γ) Υποτίθεται ότι υπάρχουν certificates που δηλώνουν πολλά distribution > points για τη CRL, μέχρι στιγμής δεν έχω πετύχει κάποιο, με της CAcert που > έπαιξα έχει ένα distribution point και δε ζορίζεται ιδιαίτερα. Θέλω να δω αν > η loop θα παίξει όπως πρέπει. > > δ) Θα μου άρεσε ένας καλύτερος τρόπος να διαχειρίζομαι το debug output και > γενικότερα το output, ίσως κάποιος logger αλλά δεν το έχω ψάξει γενικότερα. > > ε) Θέλει cleanup, ότι δείτε σε code duplication, σπαστικά nested loops (έχω > ένα που μου τη δίνει απίστευτα, αν έχετε καμιά καλύτερη ιδέα θα ήταν > χρήσιμη) βαράτε. > > ζ) Δε ξέρω τι να κάνω με τα redirections, πχ η CAcert έχει αλλάξει την > τοποθεσία της CRL από το distribution point που έχει στο certificate της και > κάνει HTTP redirect στο καινούριο URL. Γενικώς μου τη δίνουν τα redirects > και θα ήθελα να τα αποφύγω, για την ώρα επιτρέπω ένα redirection max και > μετά η cURL θα ψοφήσει. > > η) Ένας τρόπος για να ελέγξω αν κάτι είναι URL αφού έχει περάσει το regexp > είναι να προσπαθήσω να κάνω resolve το hostname και σε δεύτερη φάση να πάρω > τα headers και να δω αν υπάρχει (αν πρόκειται γι' αρχείο) -το τελευταίο δεν > το έχω υλοποιήσει ακόμα-. Έλα όμως που αν έχεις OpenDNS ή κάτι αντίστοιχο ο > DNS server δεν επιστρέφει ποτέ fail και πρέπει να κάνω αναγκαστικά και το > check της σύνδεσης ! Και όχι μόνο αυτό αλλά κάνει resolve σε ένα http server > οπότε δεν καταλαβαίνεις διαφορά εύκολα, όχι αν δεν πας να κατεβάσεις αρχείο > -πχ. τη CRL ή κάποιο certificate- για να δεις αν θα σου βγάλει not found ο > server που θα σε πετάξει. Σκέφτηκα > να βάλω με το χέρι τις IPs του OpenDNS αλλά είναι και λάθος αρχιτεκτονικά > (ειδικά αν λάβεις υπόψη και το IPv6) και υπάρχουν και άλλοι resolvers που > κάνουν το ίδιο. Για την ώρα θα αναλάβει η cURL να το κατεβάσει και αν είναι > σκουπίδι θα μου επιστρέψει error οπότε είμαι οκ αλλά το ερώτημα παραμένει. > Πώς κάνουμε validate ένα URL με σιγουριά ? > > > Αυτά για την ώρα αν μου έρθει κάτι άλλο τα ξαναλέμε, πάω να τη πέσω > επιτέλους γιατί είμαι λιώμα :P Αν ψάχνεις για URL regexp, δε νομίζω να βρεις καλύτερο από αυτό: http://daringfireball.net/2010/07/improved_regex_for_matching_urls Επίσης, μην κακολογείς τα HTTP redirects, φαντάσου πόσο χρήσιμο θα ήταν ένα file system χωρίς symlinks :-) -- Panagiotis Astithas http://astithas.com