tinyca2-0.7.5/0000755000175000017500000000000010467377526014565 5ustar schollerscholler00000000000000tinyca2-0.7.5/po/0000755000175000017500000000000010467377537015205 5ustar schollerscholler00000000000000tinyca2-0.7.5/po/Makefile0000644000175000017500000000074310461475420016631 0ustar schollerscholler00000000000000POTFILES=$(wildcard ../lib/*.pm) $(wildcard ../lib/GUI/*.pm) ../tinyca2 CATALOGS=de.mo es.mo cs.mo fr.mo sv.mo all: $(CATALOGS) .po.mo: msgfmt -o $@ $< install -m 644 $@ ../locale/`basename $@ .mo`/LC_MESSAGES/tinyca2.mo %.po: tinyca2.pot msgmerge -vU $@ tinyca2.pot tinyca2.pot: $(POTFILES) xgettext --add-comments \ --keyword=_ \ --keyword=N_ \ --language=C \ -o tinyca2.pot \ $(POTFILES); \ clean: rm -f $(CATALOGS) rm -f tinyca2.pot .SUFFIXES: .po .pot .mo tinyca2-0.7.5/po/de.po0000644000175000017500000015103510461475420016122 0ustar schollerscholler00000000000000# translation of de.po to # translation of de.po to german # This file is distributed under the same license as the tinyca package. # Copyright (C) 2003-2006 Stephan Martin # msgid "" msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-07-13 23:47+0200\n" "PO-Revision-Date: 2006-02-18 23:02+0100\n" "Last-Translator: Stephan Martin\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../lib/CA.pm:44 msgid "error: can't open basedir: " msgstr "Fehler beim Öffnen des Basisverzeichnisses: " #: ../lib/CA.pm:102 msgid " Opening CA: " msgstr " CA öffnen: " #: ../lib/CA.pm:109 ../lib/CA.pm:270 msgid "Invalid CA selected" msgstr "Die ausgewählte CA ist ungültig" #: ../lib/CA.pm:154 msgid " Initializing OpenSSL" msgstr " Initialisiere OpenSSL" #: ../lib/CA.pm:160 msgid " Check for CA Version" msgstr " Überprüfe die CA Version" #: ../lib/CA.pm:167 ../lib/CA.pm:195 msgid "Can't open index file: " msgstr "Fehler beim Lesen der Index-Datei: " #: ../lib/CA.pm:182 msgid " Convert CA" msgstr " Konvertiere CA" #: ../lib/CA.pm:201 msgid "Can't open index backup: " msgstr "Fehler beim Erstellen der Sicherungskopie: " #: ../lib/CA.pm:218 msgid "This CA is converted for openssl 0.9.7x now." msgstr "Diese CA wurde jetzt für openssl 0.9.7x konvertiert." #: ../lib/CA.pm:220 msgid "You will find a backup copy of the index file at: " msgstr "Eine Sicherung der Index-Datei wurde erstellt unter: " #: ../lib/CA.pm:229 msgid " Read Configuration" msgstr " Konfiguration einlesen" #: ../lib/CA.pm:235 msgid " Create GUI" msgstr " Erstelle GUI" #: ../lib/CA.pm:241 msgid " Create Toolbar" msgstr " Erstelle Toolbar" #: ../lib/CA.pm:247 msgid " Actual CA: " msgstr " Aktuelle CA: " #: ../lib/CA.pm:332 #, c-format msgid "CA: %s deleted" msgstr "Die CA %s wurde erfolgreich gelöscht" #: ../lib/CA.pm:386 msgid "Password of parent CA is needed for creating a Sub CA" msgstr "" "Das Passwort der zertifizierenden CA wird für die Erstellung der Sub CA " "benötigt" #: ../lib/CA.pm:395 msgid "Name must be filled in and must" msgstr "Der Name muss eingetragen werden und darf" #: ../lib/CA.pm:396 msgid " not contain Spaces" msgstr " keine Leerzeichen enthalten" #: ../lib/CA.pm:408 msgid "Please specify at least Common Name, " msgstr "Bitte geben Sie mindestens einen allgemeinen Namen," #: ../lib/CA.pm:409 msgid "Country and Password" msgstr "Land und Passwort an" #: ../lib/CA.pm:416 ../lib/REQ.pm:109 msgid "Passwords don't match" msgstr "Die Passwörter stimmen nicht überein" #: ../lib/CA.pm:424 ../lib/REQ.pm:120 msgid "Country must be exact 2 letter code" msgstr "Das Land muss als 2 Buchstaben Code angegeben werden" #: ../lib/CA.pm:428 #, c-format msgid "CA: %s already exists" msgstr "Eine CA mit Namen: %s existiert bereits" #: ../lib/CA.pm:468 msgid "Name for storage must be filled in and must not contain spaces" msgstr "" "Der Name für die lokale Speicherung muß eingetragen werden und darf keine " "Leerzeichen enthalten" #: ../lib/CA.pm:477 msgid "You didn't give a password for the private CA key." msgstr "Es wurde kein Passwort für den privaten CA Schlüssel angegeben." #: ../lib/CA.pm:479 msgid "The import will fail, if the key is encrypted." msgstr "" "Der Importvorgang wird fehlschlagen, falls der Schlüssel verschlüsselt ist." #: ../lib/CA.pm:488 msgid "Please give a new password for the CA" msgstr "Bitte geben Sie ein neues CA Passwort an" #: ../lib/CA.pm:495 msgid "New passwords don't match" msgstr "Die neuen Passwörter stimmen nicht überein" #: ../lib/CA.pm:503 msgid "Please give a CA certificate to import" msgstr "CA Zertifikat zum Import auswählen" #: ../lib/CA.pm:508 #, c-format msgid "" "Can't read CA certificate file:\n" "%s" msgstr "" "Fehler beim Einlesen der CA Zertifikats-Datei:\n" "%s" #: ../lib/CA.pm:518 msgid "Please give a CA keyfile to import" msgstr "CA Schlüsseldatei zum Import auswählen" #: ../lib/CA.pm:523 #, c-format msgid "" "Can't read CA key file:\n" "%s" msgstr "" "Fehler beim Lesen der CA Schlüssel-Datei:\n" "%s" #: ../lib/CA.pm:535 msgid "Please give an Index file to import.\n" msgstr "Index Datei zum Import auswählen.\n" #: ../lib/CA.pm:536 msgid "If you don't have an Index file, i'll try to generate one.\n" msgstr "" "Falls keine Index Datei angegeben ist, wird versucht eine zu erstellen.\n" #: ../lib/CA.pm:537 msgid "Attention: This will cause all Certificates to show up as valid.\n" msgstr "Achtung: Dadurch werden alle Zertifikate als gültig angezeigt.\n" #: ../lib/CA.pm:538 msgid "Attention: Revoked Certificates will not be determined." msgstr "Achtung: Widerrufene Zertifikate werden nicht erkannt." #: ../lib/CA.pm:549 #, c-format msgid "" "Can't read Index file:\n" "%s" msgstr "" "Fehler beim Einlesen der Index-Datei:\n" "%s" #: ../lib/CA.pm:562 msgid "Please give a directory containing the certificates to import" msgstr "Verzeichnis mit Zertifikaten auswählen" #: ../lib/CA.pm:567 #, c-format msgid "" "Can't find certificate directory:\n" "%s" msgstr "" "Verzeichnis mit Zertifikaten nicht gefunden:\n" "%s" #: ../lib/CA.pm:578 #, c-format msgid "CA: %s already exists. Please choose another name" msgstr "" "Eine CA mit Namen: %s existiert bereits. Bitte wählen Sie einen anderen Namen" #: ../lib/CA.pm:594 msgid "Can't find X509v3 Basic Constraints in CA Certificate\n" msgstr "X509v3 Erweiterung Basic Constraints nicht in CA Zertifikat gefunden\n" #: ../lib/CA.pm:595 msgid "Import canceled" msgstr "Import abgebrochen" #: ../lib/CA.pm:601 msgid "The selected CA Certificate is no valid CA certificate\n" msgstr "Das gewählte Zertifikat ist kein gültiges CA Zertifikat\n" #: ../lib/CA.pm:602 #, c-format msgid "X509v3 Basic Constraint is set to: %s" msgstr "Die X509v3 Erweiterung Basic Constraints ist gesetzt auf: %s" #: ../lib/CA.pm:612 #, c-format msgid "" "Can't open Index file:\n" "%s" msgstr "" "Fehler beim Lesen der Index-Datei:\n" "%s" #: ../lib/CA.pm:665 ../lib/CERT.pm:61 #, c-format msgid "Can't open Certificate directory: %s" msgstr "Fehler beim Öffnen des Verzeichnis mit Zertifikaten: %s" #: ../lib/CA.pm:684 ../lib/CERT.pm:84 #, c-format msgid " Read Certificate: %s" msgstr " Lese Zertifikat: %s" #: ../lib/CA.pm:694 #, c-format msgid "Can't read Certificate file: %s" msgstr "Fehler beim Einlesen der Zertifikats-Datei: %s" #: ../lib/CA.pm:718 #, c-format msgid "Can't write Certificate file: %s" msgstr "Fehler beim Schreiben der Zertifikats-Datei: %s" #: ../lib/CA.pm:768 ../lib/CA.pm:927 msgid "Can't open Index file: " msgstr "Fehler beim Lesen der Index-Datei: " #: ../lib/CA.pm:780 #, c-format msgid "Can't write CA Certificate file: %s" msgstr "Fehler beim Schreiben der CA Zertifikats-Datei: %s" #: ../lib/CA.pm:800 ../lib/CA.pm:934 msgid "Can't write Serial file: " msgstr "Fehler beim Schreiben der Seriennummer: " #: ../lib/CA.pm:814 #, c-format msgid "Can't write CA Key file: %s" msgstr "Fehler beim Schreiben der CA Schlüssel Datei: %s" #: ../lib/CA.pm:831 ../lib/CA.pm:1155 msgid "Generating CRL failed" msgstr "Fehler beim Erstellen der Widerrufsliste" #: ../lib/CA.pm:844 #, c-format msgid "Succesfully imported %d certificates\n" msgstr "%d Zertifikate wurden erfolgreich importiert\n" #: ../lib/CA.pm:845 msgid "Check the configuration of your imported CA." msgstr "Überprüfen Sie bitte die Konfiguration der importierten CA" #: ../lib/CA.pm:862 ../lib/CA.pm:971 msgid "No CA name given" msgstr "Es wurde kein CA Name übergeben" #: ../lib/CA.pm:871 ../lib/CA.pm:876 ../lib/CA.pm:881 ../lib/CA.pm:886 #: ../lib/CA.pm:891 ../lib/CA.pm:896 msgid "Can't create directory: " msgstr "Fehler beim Erstellen des Verzeichnisses: " #: ../lib/CA.pm:905 #, c-format msgid "Can't open template file %s %s" msgstr "Fehler beim Öffnen der Vorlagen-Datei %s: %s" #: ../lib/CA.pm:910 ../lib/CA.pm:1207 ../lib/CA.pm:1274 ../lib/CERT.pm:637 #: ../lib/KEY.pm:227 ../lib/REQ.pm:740 #, c-format msgid "Can't open output file: %s: %s" msgstr "Fehler beim Öffnen der Ausgabe-Datei %s: %s" #: ../lib/CA.pm:984 ../lib/KEY.pm:482 ../lib/REQ.pm:167 msgid "Generating key failed" msgstr "Fehler beim Erstellen des Schlüssels" #: ../lib/CA.pm:1018 ../lib/REQ.pm:193 msgid "Generating Request failed" msgstr "Fehler beim Erstellen der Anforderung" #: ../lib/CA.pm:1027 ../lib/CA.pm:1041 ../lib/CERT.pm:102 msgid "Can't read Certificate" msgstr "Das Zertifikat kann nicht eingelesen werden" #: ../lib/CA.pm:1032 ../lib/CA.pm:1046 msgid "Can't write Certificate" msgstr "Fehler beim Schreiben der Zertifikats-Datei" #: ../lib/CA.pm:1086 msgid "Generating certificate failed" msgstr "Fehler beim erstellen des Zertifikats" #: ../lib/CA.pm:1106 ../lib/CA.pm:1131 #, c-format msgid "Can't open ca certificate file %s %s" msgstr "Fehler beim Öffnen der Zertifikats Datei %s: %s" #: ../lib/CA.pm:1115 #, c-format msgid "Can't create certificate chain file: %s: %s" msgstr "Fehler beim Erstellen der Datei für die Zertifikatskette: %s: %s" #: ../lib/CA.pm:1164 #, c-format msgid "CA: %s created" msgstr "Die CA %s wurde erfolgreich erstellt" #: ../lib/CA.pm:1199 #, c-format msgid "Can't open certificate chain file: %s: %s" msgstr "Fehler beim Öffnen der -Datei mit der Zertifikatskette %s: %s" #: ../lib/CA.pm:1220 #, c-format msgid "Certificate Chain succesfully exported to: %s" msgstr "Die Zertifikatskette wurden erfolgreich nach %s exportiert" #: ../lib/CA.pm:1255 ../lib/CERT.pm:580 ../lib/GUI.pm:166 ../lib/KEY.pm:348 #: ../lib/REQ.pm:71 ../lib/REQ.pm:389 msgid "Can't read CA certificate" msgstr "Fehler beim Einlesen des CA Zertifikats" #: ../lib/CA.pm:1265 #, c-format msgid "Invalid Format for export_ca_cert(): %s" msgstr "Ungültiges Format für den Export in export_ca_cert(): %s" #: ../lib/CA.pm:1287 #, c-format msgid "Certificate succesfully exported to: %s" msgstr "Das Zertifikat wurden erfolgreich nach %s exportiert" #: ../lib/CA.pm:1320 msgid "Please give the output file" msgstr "Bitte Ausgabedatei angeben" #: ../lib/CA.pm:1328 msgid "Please give the CA password to create the Revocation List" msgstr "Bitte geben Sie das CA Passwort an um die Widerrufsliste zu erstellen" #: ../lib/CA.pm:1349 msgid "" "Wrong CA password given\n" "Generating Revocation List failed" msgstr "" "Sie haben ein falsches CA PAsswort angegeben\n" "Fehler bei der Erstellung der Widerrufsliste" #: ../lib/CA.pm:1353 msgid "" "CA Key not found\n" "Generating Revocation List failed" msgstr "" "CA Schlüssel nicht gefunden\n" "Fehler bei der Erstellung der Widerrufsliste" #: ../lib/CA.pm:1357 ../lib/CA.pm:1363 msgid "Generating Revocation List failed" msgstr "Fehler bei der Erstellung der Widerrufsliste" #: ../lib/CA.pm:1371 #, c-format msgid "CRL successfully exported to: %s" msgstr "Die Widerrufsliste wurde erfolgreich nach %s exportiert" #: ../lib/CERT.pm:143 ../lib/CERT.pm:199 ../lib/CERT.pm:322 ../lib/CERT.pm:381 #: ../lib/GUI.pm:851 msgid "Please select a Certificate first" msgstr "Bitte erst ein Zertifikat auswählen" #: ../lib/CERT.pm:151 ../lib/CERT.pm:209 ../lib/CERT.pm:333 ../lib/CERT.pm:400 #: ../lib/GUI.pm:2706 ../lib/GUI.pm:2717 ../lib/OpenSSL.pm:702 #: ../lib/GUI/X509_browser.pm:276 msgid "VALID" msgstr "GÜLTIG" #: ../lib/CERT.pm:153 #, c-format msgid "" "Can't renew Certifikate with Status: %s\n" "Please revoke the Certificate first" msgstr "" "Ein Zertifikat mit Status %s kann nicht erneuert werden\n" "Bitte widerrufen Sie das Zertifikat vorher" #: ../lib/CERT.pm:168 msgid "" "Key and Request are necessary for renewal of a Certificate\n" "Renewal is not possible!" msgstr "" "Für die Erneuernung des Zertifikats werden Schlüssel und Anforderung " "benötigt\n" "Die Erneuerung ist nicht möglich!" #: ../lib/CERT.pm:210 #, c-format msgid "Can't revoke Certifikate with Status: %s" msgstr "Ein Zertifikat mit dem Status %s kann nicht widerrufen werden" #: ../lib/CERT.pm:256 msgid "" "Wrong CA password given\n" "Revoking the Certificate failed" msgstr "" "Sie haben ein falsches CA Passwort angegeben\n" "Fehler beim Widerruf des Zertifikats" #: ../lib/CERT.pm:263 msgid "" "CA Key not found\n" "Revoking the Certificate failed" msgstr "" "CA Schlüssel nicht gefunden\n" "Fehler beim Widerruf des Zertifikats" #: ../lib/CERT.pm:270 msgid "Revoking the Certificate failed" msgstr "Fehler beim Widerruf des Zertifikats" #: ../lib/CERT.pm:290 msgid "Generating a new Revocation List failed" msgstr "Fehler beim Erstellen der neuen Widerrufliste" #: ../lib/CERT.pm:335 msgid "" "Can't delete VALID certificate!\n" "Please revoke the Certificate first." msgstr "" "Ein Zertifikat mit Status GÜLTIG kann nicht gelöscht werden!\n" "Bitte widerrufen Sie vorher das Zertifikat." #: ../lib/CERT.pm:401 msgid "Certificate seems not to be VALID" msgstr "Das Zertifikat ist nicht GÜLTIG" #: ../lib/CERT.pm:403 msgid "Export is not possible" msgstr "Ein Export ist nicht möglich" #: ../lib/CERT.pm:430 ../lib/KEY.pm:172 msgid "Please give at least the output file" msgstr "Bitte geben Sie mindestens die Ausgabedatei an" #: ../lib/CERT.pm:436 msgid "Key is necessary for export as PKCS#12" msgstr "Für den Export als PKCS#12 wird ein Schlüssel benötigt" #: ../lib/CERT.pm:438 ../lib/CERT.pm:454 ../lib/KEY.pm:257 ../lib/KEY.pm:308 msgid "Export is not possible!" msgstr "Ein Export ist nicht möglich!" #: ../lib/CERT.pm:452 #, c-format msgid "Key is necessary for export as %s" msgstr "Für den Export als %s wird ein Schlüssel benötigt" #: ../lib/CERT.pm:492 ../lib/KEY.pm:216 #, c-format msgid "Can't open Certificate file: %s: %s" msgstr "Fehler beim Öffnen der Zertifikats Datei %s: %s " #: ../lib/CERT.pm:525 ../lib/KEY.pm:288 msgid "Generating PKCS#12 failed" msgstr "Fehler beim Erstellen der PKCS#12-Datei" #: ../lib/CERT.pm:533 ../lib/CERT.pm:616 ../lib/KEY.pm:295 ../lib/KEY.pm:381 #, c-format msgid "Certificate and Key successfully exported to %s" msgstr "Zertifikat und Schlüssel wurden erfolgreich nach %s exportiert" #: ../lib/CERT.pm:546 ../lib/CERT.pm:567 ../lib/REQ.pm:693 #, c-format msgid "Can't create temporary file: %s: %s" msgstr "Fehler beim Erstellen der temporären Datei: %s: %s" #: ../lib/CERT.pm:558 #, c-format msgid "Can't read Key file: %s: %s" msgstr "Fehler beim Öffnen der Schlüssel-Datei %s: %s" #: ../lib/CERT.pm:588 ../lib/KEY.pm:321 ../lib/KEY.pm:337 ../lib/KEY.pm:355 msgid "Can't create temporary file" msgstr "Fehler beim Erstellen einer temporären Datei" #: ../lib/CERT.pm:609 ../lib/KEY.pm:375 #, c-format msgid "Generating %s file failed" msgstr "Fehler beim Erzeugen der %s-Datei" #: ../lib/CERT.pm:628 #, c-format msgid "Invalid Format for export_cert(): %s" msgstr "Ungültiges Format für export_cert(): %s" #: ../lib/CERT.pm:648 #, c-format msgid "Certificate successfully exported to: %s" msgstr "Das Zertifikat wurde erfolgreich nach %s exportiert" #: ../lib/GUI.pm:171 ../lib/GUI.pm:178 msgid "CA" msgstr "CA" #: ../lib/GUI.pm:185 msgid "CA Information" msgstr "Informationen über die CA" #: ../lib/GUI.pm:204 msgid "Certificates" msgstr "Zertifikate" #: ../lib/GUI.pm:244 ../lib/GUI.pm:2689 ../lib/GUI/WORDS.pm:56 #: ../lib/GUI/X509_browser.pm:160 ../lib/GUI/X509_browser.pm:168 #: ../lib/GUI/X509_browser.pm:177 msgid "Common Name" msgstr "Allgemeiner Name" #: ../lib/GUI.pm:245 ../lib/GUI.pm:1273 ../lib/GUI.pm:2314 #: ../lib/GUI/WORDS.pm:57 ../lib/GUI/X509_browser.pm:161 #: ../lib/GUI/X509_browser.pm:169 ../lib/GUI/X509_browser.pm:178 msgid "eMail Address" msgstr "eMail Adresse" #: ../lib/GUI.pm:246 ../lib/GUI/WORDS.pm:59 ../lib/GUI/X509_browser.pm:162 #: ../lib/GUI/X509_browser.pm:170 ../lib/GUI/X509_browser.pm:179 msgid "Organizational Unit" msgstr "Organisationseinheit" #: ../lib/GUI.pm:247 ../lib/GUI/WORDS.pm:58 ../lib/GUI/X509_browser.pm:163 #: ../lib/GUI/X509_browser.pm:171 ../lib/GUI/X509_browser.pm:180 msgid "Organization" msgstr "Organisation" #: ../lib/GUI.pm:248 ../lib/GUI/WORDS.pm:60 ../lib/GUI/X509_browser.pm:164 #: ../lib/GUI/X509_browser.pm:172 ../lib/GUI/X509_browser.pm:181 msgid "Location" msgstr "Standort" #: ../lib/GUI.pm:249 ../lib/GUI/WORDS.pm:61 ../lib/GUI/X509_browser.pm:165 #: ../lib/GUI/X509_browser.pm:173 ../lib/GUI/X509_browser.pm:182 msgid "State" msgstr "Bundesstaat" #: ../lib/GUI.pm:250 ../lib/GUI/WORDS.pm:62 ../lib/GUI/X509_browser.pm:166 #: ../lib/GUI/X509_browser.pm:174 ../lib/GUI/X509_browser.pm:183 msgid "Country" msgstr "Land" #: ../lib/GUI.pm:251 ../lib/GUI/WORDS.pm:68 ../lib/GUI/X509_browser.pm:184 msgid "Type" msgstr "Typ" #: ../lib/GUI.pm:265 msgid "Keys" msgstr "Schlüssel" #: ../lib/GUI.pm:308 msgid "Requests" msgstr "Anforderungen" #: ../lib/GUI.pm:399 #, c-format msgid " Actual CA: %s" msgstr " Aktuelle CA: %s" #: ../lib/GUI.pm:402 #, c-format msgid " Actual CA: %s - Certificates" msgstr " Aktuelle CA: %s - Zertifikate" #: ../lib/GUI.pm:405 #, c-format msgid " Actual CA: %s - Keys" msgstr " Aktuelle CA: %s - Schlüssel" #: ../lib/GUI.pm:408 #, c-format msgid " Actual CA: %s - Requests" msgstr " Aktuelle CA: %s - Anforderungen" #: ../lib/GUI.pm:457 ../lib/GUI.pm:1141 msgid "Open CA" msgstr "CA öffnen" #: ../lib/GUI.pm:463 msgid "New CA" msgstr "CA erstellen" #: ../lib/GUI.pm:469 ../lib/GUI.pm:2382 msgid "Import CA" msgstr "CA Importieren" #: ../lib/GUI.pm:475 ../lib/GUI.pm:1143 msgid "Delete CA" msgstr "CA löschen" #: ../lib/GUI.pm:485 ../lib/GUI.pm:524 ../lib/GUI.pm:592 msgid "Details" msgstr "Details" #: ../lib/GUI.pm:491 msgid "History" msgstr "Verlauf" #: ../lib/GUI.pm:497 msgid "Sub CA" msgstr "Sub CA" #: ../lib/GUI.pm:503 msgid "Export CA" msgstr "CA Exportieren" #: ../lib/GUI.pm:509 ../lib/GUI.pm:1419 msgid "Export CRL" msgstr "CRL Exportieren" #: ../lib/GUI.pm:516 msgid "Export Chain" msgstr "Kette Exportieren" #: ../lib/GUI.pm:530 ../lib/GUI.pm:598 msgid "View" msgstr "Anzeigen" #: ../lib/GUI.pm:540 ../lib/GUI.pm:604 msgid "New" msgstr "Neu" #: ../lib/GUI.pm:547 ../lib/GUI.pm:578 msgid "Export" msgstr "Exportieren" #: ../lib/GUI.pm:553 msgid "Revoke" msgstr "Widerrufen" #: ../lib/GUI.pm:563 msgid "Renew" msgstr "Erneuern" #: ../lib/GUI.pm:570 ../lib/GUI.pm:584 ../lib/GUI.pm:627 msgid "Delete" msgstr "Löschen" #: ../lib/GUI.pm:610 msgid "Import" msgstr "Importieren" #: ../lib/GUI.pm:620 msgid "Sign" msgstr "Signieren" #: ../lib/GUI.pm:646 msgid "_CA" msgstr "_CA" #: ../lib/GUI.pm:649 msgid "_Open CA" msgstr "CA _öffnen" #: ../lib/GUI.pm:654 msgid "_New CA" msgstr "_Neue CA erstellen" #: ../lib/GUI.pm:659 msgid "_Delete CA" msgstr "CA _löschen" #: ../lib/GUI.pm:667 msgid "_Exit" msgstr "_Beenden" #: ../lib/GUI.pm:674 msgid "_Preferences" msgstr "_Einstellungen" #: ../lib/GUI.pm:677 msgid "Experts Only!!" msgstr "Nur für Experten!!" #: ../lib/GUI.pm:682 msgid "OpenSSL _Configuration" msgstr "OpenSSL _Konfiguration" #: ../lib/GUI.pm:689 ../lib/GUI.pm:692 msgid "_Help" msgstr "_Hilfe" #: ../lib/GUI.pm:697 msgid "_About TinyCA" msgstr "Über _TinyCA" #: ../lib/GUI.pm:728 msgid "Invalid mode for show_text():" msgstr "Ungültiger Modus für show_text():" #: ../lib/GUI.pm:733 ../lib/GUI.pm:848 ../lib/REQ.pm:236 ../lib/REQ.pm:367 msgid "Please select a Request first" msgstr "Bitte erst eine Anforderung auswählen" #: ../lib/GUI.pm:736 msgid "Please select a certificate first" msgstr "Bitte erst ein Zertifikat auswählen" #: ../lib/GUI.pm:752 ../lib/GUI.pm:867 ../lib/GUI/X509_browser.pm:456 #: ../lib/GUI/X509_browser.pm:515 msgid "Can't read file" msgstr "Fehler beim Lesen der Datei" #: ../lib/GUI.pm:754 msgid "Request" msgstr "Anforderung" #: ../lib/GUI.pm:754 msgid "Certificate" msgstr "Zertifikat" #: ../lib/GUI.pm:815 #, c-format msgid "Invalid mode for _show_popup_menu(): %s" msgstr "Ungültiger Modus für show_popup_menu(): %s" #: ../lib/GUI.pm:843 msgid "Invalid mode for show_details():" msgstr "Ungültiger Modus für show_details()" #: ../lib/GUI.pm:869 ../lib/GUI.pm:969 ../lib/GUI.pm:3040 msgid "Request Details" msgstr "Anforderungs Details" #: ../lib/GUI.pm:869 ../lib/GUI.pm:969 ../lib/GUI.pm:2897 msgid "Certificate Details" msgstr "Zertifikat Details" #: ../lib/GUI.pm:911 ../lib/GUI.pm:1679 ../lib/GUI.pm:3061 msgid "Import Request" msgstr "Importiere Anforderung" #: ../lib/GUI.pm:913 ../lib/GUI.pm:2438 msgid "Import CA Certificate" msgstr "CA Zertifikat Importieren" #: ../lib/GUI.pm:921 msgid "Do you want to import the following Certificate Request?" msgstr "Wollen Sie folgende Zertifikats Anforderung wirklich importieren?" #: ../lib/GUI.pm:923 msgid "Do you want to import the following CA Certificate?" msgstr "Wollen Sie das folgende CA Zertifikat wirklich importieren?" #: ../lib/GUI.pm:977 msgid "Subject DN" msgstr "Subject DN" #: ../lib/GUI.pm:1001 msgid "Issuer" msgstr "Aussteller" #: ../lib/GUI.pm:1027 msgid "Validity" msgstr "Gültigkeit" #: ../lib/GUI.pm:1043 msgid "Key/Request Details:" msgstr "Schlüssel/Anforderungs Details:" #: ../lib/GUI.pm:1043 msgid "Key/Certificate Details:" msgstr "Schlüssel/Zertifikats Details:" #: ../lib/GUI.pm:1059 msgid "Fingerprints" msgstr "Fingerabdrücke" #: ../lib/GUI.pm:1075 msgid "Requested X.509 Extensions" msgstr "Folgende X.509v3 Erweiterungen werden angefordert" #: ../lib/GUI.pm:1075 msgid "X.509v3 Extensions" msgstr "X.509v3 Erweiterungen" #: ../lib/GUI.pm:1100 msgid "Requested Netscape Extensions" msgstr "Angeforderte Netscape Erweiterungen" #: ../lib/GUI.pm:1100 msgid "Netscape Extensions" msgstr "Netscape-Erweiterungen" #: ../lib/GUI.pm:1145 msgid "Invalid action given: " msgstr "Ungültiges Aktion: " #: ../lib/GUI.pm:1167 ../lib/GUI.pm:1213 msgid "Invalid action for show_select_ca_dialog(): " msgstr "Ungültige Aktion für show_select_ca_dialog(): " #: ../lib/GUI.pm:1189 msgid "Available CAs" msgstr "Verfügbare CAs" #: ../lib/GUI.pm:1245 msgid "Create Request" msgstr "Erstelle Anforderung" #: ../lib/GUI.pm:1246 msgid "Create a new Certificate Request" msgstr "Erstellen einer neuen Zertifikats Anforderung" #: ../lib/GUI.pm:1260 msgid "Common Name (eg, your Name," msgstr "Comon Name (z.B. Ihr Name," #: ../lib/GUI.pm:1265 msgid "your eMail Address" msgstr "Ihre eMail Adresse" #: ../lib/GUI.pm:1269 msgid "or the Servers Name)" msgstr "oder der Name des Servers)" #: ../lib/GUI.pm:1277 msgid "Password (protect your private Key):" msgstr "Passwort (sichert den privaten Schlüssel):" #: ../lib/GUI.pm:1281 ../lib/GUI.pm:2294 msgid "Password (confirmation):" msgstr "Passwort (Bestätigung):" #: ../lib/GUI.pm:1285 ../lib/GUI.pm:2286 msgid "Country Name (2 letter code):" msgstr "Land (2 Buchstaben-Code)" #: ../lib/GUI.pm:1289 ../lib/GUI.pm:2298 msgid "State or Province Name:" msgstr "Bundesstaat oder Provinz:" #: ../lib/GUI.pm:1293 ../lib/GUI.pm:2302 msgid "Locality Name (eg. city):" msgstr "Standort (z.B. Stadt):" #: ../lib/GUI.pm:1297 ../lib/GUI.pm:2306 msgid "Organization Name (eg. company):" msgstr "Organisation (z.B. Firma):" #: ../lib/GUI.pm:1303 ../lib/GUI.pm:1308 ../lib/GUI.pm:2310 msgid "Organizational Unit Name (eg. section):" msgstr "Organisationseinheit (z.B. Abteilung):" #: ../lib/GUI.pm:1313 ../lib/GUI.pm:2322 ../lib/GUI/WORDS.pm:65 msgid "Keylength" msgstr "Schlüssellänge" #: ../lib/GUI.pm:1321 ../lib/GUI.pm:2352 msgid "Digest" msgstr "Digest" #: ../lib/GUI.pm:1328 msgid "Algorithm" msgstr "Algorithmus" #: ../lib/GUI.pm:1359 ../lib/GUI.pm:2918 msgid "Revoke Certificate" msgstr "Widerrufe Zertifikat" #: ../lib/GUI.pm:1368 ../lib/GUI.pm:1444 ../lib/GUI.pm:2093 msgid "CA Password:" msgstr "CA Passwort:" #: ../lib/GUI.pm:1374 msgid "Revocation Reason:" msgstr "Grund des Widerrufs:" #: ../lib/GUI.pm:1419 msgid "Export Revocation List to File" msgstr "Widerrufsliste in Datei exportieren" #: ../lib/GUI.pm:1427 ../lib/GUI.pm:1515 ../lib/GUI.pm:1563 ../lib/GUI.pm:1687 #: ../lib/GUI.pm:1755 msgid "File:" msgstr "Datei:" #: ../lib/GUI.pm:1438 ../lib/GUI.pm:1526 ../lib/GUI.pm:1574 ../lib/GUI.pm:1697 #: ../lib/GUI.pm:1772 ../lib/GUI.pm:2435 ../lib/GUI.pm:2454 ../lib/GUI.pm:2473 #: ../lib/GUI.pm:2492 msgid "Browse..." msgstr "Auswählen..." #: ../lib/GUI.pm:1441 ../lib/GUI.pm:1554 ../lib/GUI.pm:1577 msgid "Export CA Certificate" msgstr "CA Zertifikat Exportieren" #: ../lib/GUI.pm:1448 ../lib/GUI.pm:2099 ../lib/GUI.pm:2318 msgid "Valid for (Days):" msgstr "Gültigkeit (in Tagen):" #: ../lib/GUI.pm:1452 ../lib/GUI.pm:1581 ../lib/GUI.pm:1779 msgid "Export Format:" msgstr "Export Format:" #: ../lib/GUI.pm:1458 ../lib/GUI.pm:1587 msgid "PEM" msgstr "PEM" #: ../lib/GUI.pm:1467 ../lib/GUI.pm:1596 msgid "DER" msgstr "DER" #: ../lib/GUI.pm:1476 ../lib/GUI.pm:1605 msgid "TXT" msgstr "TXT" #: ../lib/GUI.pm:1507 ../lib/GUI.pm:1529 msgid "Export CA Certificate Chain" msgstr "Exportiere Zertifikatskette" #: ../lib/GUI.pm:1508 msgid "Export CA Certificate Chain to File" msgstr "Zertifikatskette in Datei exportieren" #: ../lib/GUI.pm:1555 msgid "Export CA Certificate to File" msgstr "CA Zertifikat in Datei exportieren" #: ../lib/GUI.pm:1635 ../lib/GUI.pm:1636 msgid "Export Key without Passphrase" msgstr "Schlüssel ohne Passwort exportieren" #: ../lib/GUI.pm:1640 msgid "I hope you know what you're doing?" msgstr "Ich hoffe Sie wissen was Sie tun?" #: ../lib/GUI.pm:1644 msgid "The Key Passphrase is needed for decryption of the Key" msgstr "Das Schlüssel Passwort wird zur Entschlüsselung benötigt" #: ../lib/GUI.pm:1653 msgid "Password:" msgstr "Passwort:" #: ../lib/GUI.pm:1679 ../lib/GUI.pm:1700 msgid "Import Request from File" msgstr "Importiere Anforderung aus Datei" #: ../lib/GUI.pm:1721 ../lib/GUI.pm:1759 ../lib/GUI.pm:2911 msgid "Export Certificate" msgstr "Zertifikat exportieren" #: ../lib/GUI.pm:1723 ../lib/GUI.pm:1761 ../lib/GUI.pm:2868 msgid "Export Key" msgstr "Schlüssel exportieren" #: ../lib/GUI.pm:1726 msgid "Invalid mode for show_export_dialog(): " msgstr "Ungültiger Modus für show_export_dialog():" #: ../lib/GUI.pm:1743 msgid "Export Certificate to File" msgstr "Zertifikat in Datei exportieren" #: ../lib/GUI.pm:1745 msgid "Export Key to File" msgstr "Schlüssel in Datei exportieren" #: ../lib/GUI.pm:1783 msgid "PEM (Certificate)" msgstr "PEM (Zertifikat)" #: ../lib/GUI.pm:1785 msgid "PEM (Key)" msgstr "PEM (Schlüssel)" #: ../lib/GUI.pm:1794 msgid "DER (Certificate)" msgstr "DER (Zertifikat)" #: ../lib/GUI.pm:1796 msgid "DER (Key without Passphrase)" msgstr "DER (Schlüssel ohne Passwort)" #: ../lib/GUI.pm:1804 msgid "PKCS#12 (Certificate & Key)" msgstr "PKCS#12 (Zertifikat & Schlüssel)" #: ../lib/GUI.pm:1811 msgid "Zip (Certificate & Key)" msgstr "Zip (Zertifikat & Schlüssel)" #: ../lib/GUI.pm:1821 msgid "Tar (Certificate & Key)" msgstr "Tar (Zertifikat & Schlüssel)" #: ../lib/GUI.pm:1833 msgid "TXT (Certificate)" msgstr "TXT (Zertifikat)" #: ../lib/GUI.pm:1839 msgid "Without Passphrase (PEM/PKCS#12)" msgstr "Ohne Passwort (PEM/PKCS#12)" #: ../lib/GUI.pm:1845 ../lib/GUI.pm:1872 ../lib/GUI.pm:1891 ../lib/GUI.pm:2018 #: ../lib/GUI.pm:2043 ../lib/GUI.pm:2196 msgid "Yes" msgstr "Ja" #: ../lib/GUI.pm:1850 ../lib/GUI.pm:1877 ../lib/GUI.pm:1896 ../lib/GUI.pm:2024 #: ../lib/GUI.pm:2049 ../lib/GUI.pm:2202 msgid "No" msgstr "Nein" #: ../lib/GUI.pm:1860 msgid "Include Key (PEM)" msgstr "Schlüssel hinzufügen (PEM)" #: ../lib/GUI.pm:1865 msgid "Include Certificate (PEM)" msgstr "Zertifikat hinzufügen (PEM)" #: ../lib/GUI.pm:1885 msgid "Include Fingerprint (PEM)" msgstr "Fingerabdruck hinzufügen (PEM)" #: ../lib/GUI.pm:1993 ../lib/GUI.pm:1994 msgid "Export to PKCS#12" msgstr "Export als PKCS#12" #: ../lib/GUI.pm:2001 msgid "Key Password:" msgstr "Schlüssel Passwort:" #: ../lib/GUI.pm:2005 msgid "Export Password:" msgstr "Export Passwort:" #: ../lib/GUI.pm:2008 msgid "Friendly Name:" msgstr "Anzeigename" #: ../lib/GUI.pm:2012 msgid "Without Passphrase" msgstr "Ohne Passwort" #: ../lib/GUI.pm:2037 msgid "Add CA Certificate to PKCS#12 structure" msgstr "CA Zertifikat zu PKCS#12 Struktur hinzufügen" #: ../lib/GUI.pm:2085 ../lib/GUI.pm:3068 msgid "Sign Request" msgstr "Signiere Anforderung" #: ../lib/GUI.pm:2085 msgid "Sign Request/Create Certificate" msgstr "Signiere die Anforderung/Erstelle ein Zertifikat" #: ../lib/GUI.pm:2110 ../lib/GUI.pm:2155 msgid "Subject alternative name (IP Address):" msgstr "Subject Alternative Name (IP Adresse):" #: ../lib/GUI.pm:2113 ../lib/GUI.pm:2158 msgid "Subject alternative name (DNS Name):" msgstr "Subject Alternative Name (DNS Name):" #: ../lib/GUI.pm:2116 ../lib/GUI.pm:2164 msgid "Subject alternative name (raw):" msgstr "Subject Alternative Name (raw):" #: ../lib/GUI.pm:2124 ../lib/GUI.pm:2172 msgid "Extended Key Usage:" msgstr "Verwendung des Schlüssels (erweitert):" #: ../lib/GUI.pm:2131 msgid "Netscape SSL Server Name:" msgstr "Netscape SSL Server Name:" #: ../lib/GUI.pm:2138 ../lib/GUI.pm:2179 msgid "Netscape Revocation URL:" msgstr "Netcape Widerrufs URL" #: ../lib/GUI.pm:2145 ../lib/GUI.pm:2186 msgid "Netscape Renewal URL:" msgstr "Netscape Erneuerungs URL:" #: ../lib/GUI.pm:2161 msgid "Subject alternative name (eMail Address):" msgstr "Subject Alternative Name (eMail Adresse):" #: ../lib/GUI.pm:2208 msgid "Add eMail Address to Subject DN:" msgstr "eMail Adresse zu Subject DN hinzufügen:" #: ../lib/GUI.pm:2238 ../lib/GUI.pm:2242 msgid "Create CA" msgstr "Erstelle CA" #: ../lib/GUI.pm:2238 msgid "Create a new Sub CA" msgstr "Erstellen einer neuen SubCA" #: ../lib/GUI.pm:2242 msgid "Create a new CA" msgstr "Neue CA erstellen" #: ../lib/GUI.pm:2255 msgid "CA Password (for creating the new CA):" msgstr "CA Passwort (für die Erstellung der neuen CA):" #: ../lib/GUI.pm:2266 ../lib/GUI.pm:2403 msgid "Name (for local storage):" msgstr "Name (für die lokale Speicherung):" #: ../lib/GUI.pm:2273 msgid "Data for CA Certificate" msgstr "Daten für das CA Zertifikat" #: ../lib/GUI.pm:2282 msgid "Common Name (for the CA):" msgstr "Common Name (für die CA):" #: ../lib/GUI.pm:2290 msgid "Password (needed for signing):" msgstr "Passwort (zum Signieren):" #: ../lib/GUI.pm:2382 msgid "Import an existing CA into TinyCA" msgstr "Bestehende CA in TinyCA importieren" #: ../lib/GUI.pm:2393 msgid "Password of the private CA key (Needed for import):" msgstr "Passwort des privaten Schlüssels (wird für den Import benötigt):" #: ../lib/GUI.pm:2407 msgid "New password for the CA:" msgstr "Neues CA Passwort:" #: ../lib/GUI.pm:2411 msgid "Confirm password:" msgstr "CA Passwort bestätigen:" #: ../lib/GUI.pm:2416 msgid "Files/Directories to import" msgstr "Dateien/Verzeichnisse zum Importieren" #: ../lib/GUI.pm:2424 msgid "CA Certificate (PEM/DER):" msgstr "CA Zertifikat (PEM/DER):" #: ../lib/GUI.pm:2443 msgid "CA private key (PEM/DER):" msgstr "Privater CA Schlüssel (PEM/DER):" #: ../lib/GUI.pm:2457 msgid "Import CA private Key" msgstr "Privaten CA Schlüssel importieren" #: ../lib/GUI.pm:2462 msgid "OpenSSL Index File (index.txt):" msgstr "OpenSSL Index Datei (index.txt):" #: ../lib/GUI.pm:2476 msgid "Import Index File" msgstr "Importiere Index Datei" #: ../lib/GUI.pm:2481 msgid "Directory containing certificates (PEM/DER):" msgstr "Verzeichnis mit Zertifikaten (PEM/DER):" #: ../lib/GUI.pm:2495 msgid "Import Certificates from directory" msgstr "Zertifikate aus Verzeichnis importieren" #: ../lib/GUI.pm:2509 msgid "You are kidding, are you??" msgstr "You are kidding, are you??" #: ../lib/GUI.pm:2531 msgid "Spanish: Ramon Pons Vivanco " msgstr "Spanisch: Ramon Pons Vivanco " #: ../lib/GUI.pm:2532 msgid "Czech: Robert Wolf " msgstr "Tschechisch: Robert Wolf " #: ../lib/GUI.pm:2533 msgid "French: Thibault Le Meur " msgstr "Französisch: Thibault Le Meur " #: ../lib/GUI.pm:2549 msgid "Do you really want to delete the selected Request?" msgstr "Wollen Sie die ausgewählte Anforderung wirklich löschen?" #: ../lib/GUI.pm:2551 msgid "Do you really want to delete the selected Key?" msgstr "Wollen Sie den ausgewählten Schlüssel wirklich löschen?" #: ../lib/GUI.pm:2553 msgid "Do you really want to delete the selected Certificate?" msgstr "Wollen Sie das ausgewählte Zertifikat wirklich löschen?" #: ../lib/GUI.pm:2603 msgid "Overwrite Request/Key" msgstr "Lösche Anforderung/Schlüssel" #: ../lib/GUI.pm:2609 msgid "The Key or the Request is already existing!" msgstr "Es existiert bereits ein Schlüssel oder eine Anforderung!" #: ../lib/GUI.pm:2614 msgid "You won't be able to sign this Request" msgstr "Sie werden die Anforderung nicht signieren können" #: ../lib/GUI.pm:2619 msgid "if the corresponding certificate is still valid" msgstr "falls das Zertifikat noch gültig ist" #: ../lib/GUI.pm:2636 msgid "The Certificate will be longer valid than your CA!" msgstr "Das Zertifikat wird länger gültig sein als die CA!" #: ../lib/GUI.pm:2638 msgid "This may cause problems with some software!!" msgstr "Das kann mit einigen Programmen Probleme bereiten!" #: ../lib/GUI.pm:2653 msgid "Expirationdate Warning" msgstr "Warnung - Gültigkeit" #: ../lib/GUI.pm:2688 ../lib/GUI/WORDS.pm:69 msgid "Serial" msgstr "Seriennummer" #: ../lib/GUI.pm:2690 ../lib/GUI/WORDS.pm:70 ../lib/GUI/X509_browser.pm:175 msgid "Status" msgstr "Status" #: ../lib/GUI.pm:2691 ../lib/GUI/WORDS.pm:64 msgid "Expiration Date" msgstr "Gültig bis" #: ../lib/GUI.pm:2692 msgid "Revocation Date" msgstr "Widerrufen am" #: ../lib/GUI.pm:2693 msgid "Revocation Reason" msgstr "Grund des Widerrufs:" #: ../lib/GUI.pm:2719 ../lib/OpenSSL.pm:705 msgid "EXPIRED" msgstr "ABGELAUFEN" #: ../lib/GUI.pm:2721 ../lib/OpenSSL.pm:718 msgid "REVOKED" msgstr "WIDERRUFEN" #: ../lib/GUI.pm:2741 msgid "CA History" msgstr "CA Verlauf" #: ../lib/GUI.pm:2775 msgid "Overwrite Certificate" msgstr "Zertifikat überschreiben" #: ../lib/GUI.pm:2781 msgid "There seems to be a certificate with the same Subject already." msgstr "Es existiert bereits ein Zertifikat mit identischem Namen." #: ../lib/GUI.pm:2786 msgid "" "Creating a new one (overwrite) will fail if it's not revoked or expired!" msgstr "" "Das Erstellen (Überschreiben) eines neuen Zertifikats wird fehlschlagen, " "falls das Alte nicht widerrufen oder abgelaufen ist!" #: ../lib/GUI.pm:2792 msgid "Really try to overwrite the Certificate?" msgstr "Wirklich versuchen das Zertifikat zu überschreiben?" #: ../lib/GUI.pm:2825 msgid "Convert CA" msgstr "Konvertiere CA" #: ../lib/GUI.pm:2833 msgid "" "This CA seems to be created with openssl 0.9.6x. And it seems like you have " "switched to openssl 0.9.7x." msgstr "" "Diese CA wurde mit OpenSSL 0.9.6x erstellt. Es schaut so aus, als ob Sie " "seither zu OpenSSL 0.9.7x gewechselt hätten." #: ../lib/GUI.pm:2841 msgid "" "You won't be able to revoke the existing certificates without converting the " "index file of this CA to the new format." msgstr "" "Existierende Zertifikate können nicht mehr widerrufen werden wenn die Index " "Datei nicht in das neue Format konvertiert wird." #: ../lib/GUI.pm:2849 msgid "" "Attention: it will not be easy to switch back, this has to be done manually" msgstr "Achtung: Der Rückweg ist nur manuell möglich" #: ../lib/GUI.pm:2875 msgid "Delete Key" msgstr "Schlüssel Löschen" #: ../lib/GUI.pm:2904 msgid "View Certificate" msgstr "Zertifikat anzeigen" #: ../lib/GUI.pm:2925 msgid "Renew Certificate" msgstr "Zertifikat Erneuern" #: ../lib/GUI.pm:2933 msgid "Delete Certificate" msgstr "Zertifikat löschen" #: ../lib/GUI.pm:2956 msgid "Create Key and Certificate (Server)" msgstr "Einen neuen Schlüssel und ein Zertifikat (Server) erzeugen" #: ../lib/GUI.pm:2962 msgid "Create Key and Certificate (Client)" msgstr "Einen neuen Schlüssel und ein Zertifikat (Benutzer) erzeugen" #: ../lib/GUI.pm:2983 msgid "Renew Certificate (Server)" msgstr "Zertifikat Erneuern (Server)" #: ../lib/GUI.pm:2990 msgid "Renew Certificate (Client)" msgstr "Zertifikat Erneuern (Benutzer)" #: ../lib/GUI.pm:3012 msgid "Sign Request (Server)" msgstr "Signiere Anforderung (Server)" #: ../lib/GUI.pm:3019 msgid "Sign Request (Client)" msgstr "Signiere Anforderung (Benutzer)" #: ../lib/GUI.pm:3047 msgid "View Request" msgstr "Anforderung anzeigen" #: ../lib/GUI.pm:3054 msgid "New Request" msgstr "Neue Anforderung" #: ../lib/GUI.pm:3076 msgid "Delete Request" msgstr "Lösche Anforderung" #: ../lib/HELPERS.pm:207 #, c-format msgid "Can't write exportdir: %s, %s" msgstr "Fehler beim Schreiben des Exportverzeichnisses: %s: %s" #: ../lib/KEY.pm:45 ../lib/KEY.pm:137 msgid "Please select a Key first" msgstr "Bitte erst einen Schlüssel auswählen" #: ../lib/KEY.pm:54 msgid "Key file not found:" msgstr "Schlüssel Datei nicht gefunden:" #: ../lib/KEY.pm:101 msgid "Can't open key directory" msgstr "Fehler beim Öffnen des Schlüssel Verzeichnisses" #: ../lib/KEY.pm:194 msgid "" "Wrong password given\n" "Decrypting of the Key failed\n" "Export is not possible" msgstr "" "Sie haben ein falsches Passwort angegeben\n" "Die Entschlüsselung des Schlüssels ist fehlgeschlagen\n" "Der Export ist nicht möglich" #: ../lib/KEY.pm:199 msgid "Converting failed, Export not possible" msgstr "Fehler bei der Konvertierung, Export ist nicht möglich" #: ../lib/KEY.pm:206 ../lib/KEY.pm:410 #, c-format msgid "Can't open Key file: %s: %s" msgstr "Fehler beim Öffnen der Schlüssel-Datei %s: %s" #: ../lib/KEY.pm:239 #, c-format msgid "Key succesfully exported to %s" msgstr "Der Schlüssel wurde erfolgreich exportiert: %s" #: ../lib/KEY.pm:255 msgid "Certificate is necessary for export as PKCS#12" msgstr "Für den Export als PKCS#12 wird das Zertifikat benötigt" #: ../lib/KEY.pm:305 #, c-format msgid "Certificate is necessary for export as %s file" msgstr "Für den Export als %s wird das Zertifikat benötigt" #: ../lib/KEY.pm:330 msgid "Can't read Key file" msgstr "Fehler beim Lesen der Schlüssel-Datei" #: ../lib/KEY.pm:392 #, c-format msgid "Invalid format for export requested: %s" msgstr "Ungültiges Format für den Export angefordert: %s" #: ../lib/KEY.pm:398 msgid "Something Failed ??" msgstr "Irgenwas ist wohl schiefgelaufen??" #: ../lib/KEY.pm:448 #, c-format msgid "" "Can't open Key file:\n" "%s" msgstr "" "Fehler beim Öffnen der Schlüssel-Datei\n" "%s" #: ../lib/KEY.pm:485 msgid "The password for your old CA Key is wrong" msgstr "Das Passwort für den importierten CA Schlüssel ist falsch" #: ../lib/OpenSSL.pm:73 msgid "Creating DSA key in progress..." msgstr "Die Erstellung des DSA Schlüssels läuft..." #: ../lib/OpenSSL.pm:107 msgid "Creating RSA key in progress..." msgstr "Die Erstellung des RSA Schlüssels läuft..." #: ../lib/OpenSSL.pm:456 #, c-format msgid "Can't open CRL '%s': %s" msgstr "Fehler beim Öffnen der Widerrufliste '%s': %s" #: ../lib/OpenSSL.pm:471 ../lib/OpenSSL.pm:484 msgid "Error converting CRL" msgstr "Fehler beim Konvertieren der Widerrufsliste" #: ../lib/OpenSSL.pm:582 ../lib/OpenSSL.pm:595 msgid "Error converting Certificate" msgstr "Fehler beim Konvertieren des Zertifikats" #: ../lib/OpenSSL.pm:655 ../lib/OpenSSL.pm:672 msgid "Error reading fingerprint from Certificate" msgstr "Fehler beim Lesen des Fingerbdrucks des Zertifikats" #: ../lib/OpenSSL.pm:690 msgid "Error reading subject from Certificate" msgstr "Fehler beim Lesen des Namens des Zertifikats" #: ../lib/OpenSSL.pm:700 msgid "Can't read CRL" msgstr "Fehler beim Einlesen der Widerrufsliste" #: ../lib/OpenSSL.pm:723 msgid "UNDEFINED" msgstr "UNDEFINIERT" #: ../lib/OpenSSL.pm:750 #, c-format msgid "Can't open Request file %s: %s" msgstr "Fehler beim Einlesen der Anforderungs-Datei %s: %s" #: ../lib/OpenSSL.pm:767 ../lib/OpenSSL.pm:781 ../lib/REQ.pm:685 msgid "Error converting Request" msgstr "Fehler beim Konvertieren der Anforderung" #: ../lib/OpenSSL.pm:863 #, c-format msgid "Can't open file %s: %s" msgstr "Fehler beim Einlesen der Datei %s: %s" #: ../lib/OpenSSL.pm:981 ../lib/OpenSSL.pm:1013 #, c-format msgid "Can't read index %s: %s" msgstr "Fehler beim Einlesen der Index-Datei %s: %s" #: ../lib/OpenSSL.pm:1023 #, c-format msgid "Can't write index %s: %s" msgstr "Fehler beim Schreiben der Index-Datei %s: %s" #: ../lib/REQ.pm:58 #, c-format msgid "Strange value for 'opts': %s" msgstr "Ungültiger Wert für 'opts': %s" #: ../lib/REQ.pm:101 msgid "Please specify at least Common Name " msgstr "Bitte geben Sie mindestens einen allgemeinen Namen " #: ../lib/REQ.pm:102 msgid "and Password" msgstr "und ein Passwort" #: ../lib/REQ.pm:246 ../lib/REQ.pm:376 msgid "Request file not found" msgstr "Anforderungs-Datei nicht gefunden" #: ../lib/REQ.pm:299 msgid "Can't open Request directory" msgstr "Fehler beim Öffnen des Anforderungs-Verzeichnisses" #: ../lib/REQ.pm:320 #, c-format msgid " Read Request: %s" msgstr "...Lese Anforderung: %s" #: ../lib/REQ.pm:414 msgid "Can't read Request file" msgstr "Fehler beim Lesen der Anforderungs-Datei" #: ../lib/REQ.pm:458 msgid "Can't read serial" msgstr "Fehler beim Einlesen der Seriennummer" #: ../lib/REQ.pm:531 msgid "" "Wrong CA password given\n" "Signing of the Request failed" msgstr "" "Sie haben ein falsches CA Passwort angegeben\n" "Fehler beim Signieren der Anforderung" #: ../lib/REQ.pm:537 msgid "" "CA Key not found\n" "Signing of the Request failed" msgstr "" "Der CA Schlüssel wurde nicht gefunden\n" "Fehler beim Signieren der Anforderung" #: ../lib/REQ.pm:543 msgid "" "Certificate already existing\n" "Signing of the Request failed" msgstr "" "Ein gültiges Zertifikat existiert bereits\n" "Fehler beim Signieren der Anforderung" #: ../lib/REQ.pm:549 msgid "" "Invalid IP Address given\n" "Signing of the Request failed" msgstr "" "Ungültige IP Adresse angegeben\n" "Fehler beim Signieren der Anforderung" #: ../lib/REQ.pm:556 ../lib/REQ.pm:574 msgid "Signing of the Request failed" msgstr "Fehler beim Signieren der Anforderung" #: ../lib/REQ.pm:581 msgid "Can't read Certificate file" msgstr "Fehler beim Einlesen der Zertifikats-Datei" #: ../lib/REQ.pm:587 ../lib/REQ.pm:597 msgid "Can't write Certificate file" msgstr "Fehler beim Schreiben der Zertifikats-Datei" #: ../lib/REQ.pm:609 msgid "" "Request signed succesfully.\n" "Certificate created" msgstr "" "Die Anforderung wurde erfolgreich unterschrieben.\n" "Das Zertifikat wurde erstellt." #: ../lib/REQ.pm:650 msgid "Please select a Request file first" msgstr "Bitte zuerst eine Anforderungs-Datei auswählen" #: ../lib/REQ.pm:656 msgid "Can't find Request file: " msgstr "Anforderungs-Datei wurde nicht gefunden: " #: ../lib/REQ.pm:662 msgid "Can't read Request file:" msgstr "Fehler beim Lesen der Anforderungs-Datei:" #: ../lib/REQ.pm:708 msgid "Parsing Request failed" msgstr "Fehler beim Analysieren der Anforderung" #: ../lib/TCONFIG.pm:42 msgid "Please select a CA first" msgstr "Bitte zuerst eine CA auswählen" #: ../lib/TCONFIG.pm:49 msgid "Can't open configuration" msgstr "Fehler beim Öffnen der Konfiguration" #: ../lib/TCONFIG.pm:284 ../lib/TCONFIG.pm:299 ../lib/GUI/TCONFIG.pm:47 #: ../lib/GUI/TCONFIG.pm:1302 msgid "Can't get CA name" msgstr "Es wurde kein CA Name übergeben" #: ../lib/TCONFIG.pm:327 msgid "Can't open configfile" msgstr "Fehler beim Öffnen der Konfigurations-Datei" #: ../lib/GUI/HELPERS.pm:54 ../lib/GUI/HELPERS.pm:94 ../lib/GUI/HELPERS.pm:135 msgid "Command Details" msgstr "Kommando Details" #: ../lib/GUI/HELPERS.pm:305 msgid "Request Files (*.pem, *.der, *.req)" msgstr "Anforderungs Dateien (*.pem, *.der, *.req)" #: ../lib/GUI/HELPERS.pm:312 msgid "All Files (*.*)" msgstr "Alle Dateien (*.*)" #: ../lib/GUI/TCONFIG.pm:74 msgid "" "All Settings are written unchanged to openssl.conf.\n" "So please study the documentation of OpenSSL if you don't know exactly what " "to do.\n" "If you are still unsure - keep the defaults and everything is expected to " "work fine." msgstr "" "Alle Einstellungen werden ungeändert in openssl.conf übernommen.\n" "Wenn Sie nicht genau wissen was das alles bedeutet, so nutzen Sie bitte die " "Dokumentation von OpenSSL.\n" "Falls Sie dann immer noch unsicher sind, lassen Sie einfach die " "Standardeinstellungen." #: ../lib/GUI/TCONFIG.pm:108 ../lib/GUI/TCONFIG.pm:116 msgid "OpenSSL Configuration" msgstr "OpenSSL Konfiguration" #: ../lib/GUI/TCONFIG.pm:129 msgid "Only change these options, if you really know, what you are doing!!" msgstr "Ändern Sie diese Optionen nur, wenn Sie wirklich wissen was Sie tun!" #: ../lib/GUI/TCONFIG.pm:137 msgid "You should be aware, that some options may break some crappy software!!" msgstr "" "Sie sollten sich bewusst sein, dass manche Software nicht mit allen " "möglichen Optionen umgehen kann." #: ../lib/GUI/TCONFIG.pm:146 ../lib/GUI/TCONFIG.pm:1348 msgid "If you are unsure: leave the defaults untouched" msgstr "Lassen Sie die Standard Einstellungen wenn Sie sich nicht sicher sind" #: ../lib/GUI/TCONFIG.pm:182 msgid "These Settings are passed to OpenSSL for creating Server Certificates" msgstr "Diese Optionen werden zum Erstellen von Server Zertifikaten eingesetzt" #: ../lib/GUI/TCONFIG.pm:187 ../lib/GUI/TCONFIG.pm:612 #: ../lib/GUI/TCONFIG.pm:1019 ../lib/GUI/TCONFIG.pm:1239 #: ../lib/GUI/TCONFIG.pm:1340 msgid "Multiple Values can be separated by \",\"" msgstr "Mehrere Werte können durch \",\" getrennt werden" #: ../lib/GUI/TCONFIG.pm:207 ../lib/GUI/TCONFIG.pm:209 msgid "Server Certificate Settings" msgstr "Server Zertifikate" #: ../lib/GUI/TCONFIG.pm:215 ../lib/GUI/TCONFIG.pm:638 #: ../lib/GUI/TCONFIG.pm:1047 ../lib/GUI/TCONFIG.pm:1462 msgid "Subject alternative name (subjectAltName):" msgstr "Subject Alternative Name (subjectAltName):" #: ../lib/GUI/TCONFIG.pm:312 ../lib/GUI/TCONFIG.pm:744 #: ../lib/GUI/TCONFIG.pm:1107 ../lib/GUI/TCONFIG.pm:1358 msgid "Key Usage (keyUsage):" msgstr "Verwendung des Schlüssels (keyUsage):" #: ../lib/GUI/TCONFIG.pm:391 ../lib/GUI/TCONFIG.pm:819 msgid "Extended Key Usage (extendedKeyUsage):" msgstr "Verwendung des Schlüssels (erweitert/extendedKeyUsage):" #: ../lib/GUI/TCONFIG.pm:467 ../lib/GUI/TCONFIG.pm:894 #: ../lib/GUI/TCONFIG.pm:1076 ../lib/GUI/TCONFIG.pm:1431 msgid "Netscape Certificate Type (nsCertType):" msgstr "Netscape Zertifikatstyp (nsCertType):" #: ../lib/GUI/TCONFIG.pm:496 msgid "Netscape SSL Server Name (nsSslServerName):" msgstr "Netscape SSL Server Name (nsSslServerName):" #: ../lib/GUI/TCONFIG.pm:521 ../lib/GUI/TCONFIG.pm:924 #: ../lib/GUI/TCONFIG.pm:1182 msgid "Netscape Revocation URL (nsRevocationUrl):" msgstr "Netscape Widerrufs URL (nsRevocationUrl):" #: ../lib/GUI/TCONFIG.pm:546 ../lib/GUI/TCONFIG.pm:948 msgid "Netscape Renewal URL (nsRenewalUrl):" msgstr "Netscape Erneuerungs URL (nsRenewalUrl):" #: ../lib/GUI/TCONFIG.pm:607 msgid "These Settings are passed to OpenSSL for creating Client Certificates" msgstr "" "Diese Optionen werden für die Erstellung von Benutzer Zertifikaten eingesetzt" #: ../lib/GUI/TCONFIG.pm:632 msgid "Client Certificate Settings" msgstr "Benutzer Zertifikate" #: ../lib/GUI/TCONFIG.pm:1014 msgid "These Settings are passed to OpenSSL for creating CA Certificates" msgstr "" "Diese Optionen werden für die Erstellung von CA Zertifikaten an OpenSSL " "weitergegeben" #: ../lib/GUI/TCONFIG.pm:1039 ../lib/GUI/TCONFIG.pm:1041 msgid "CA Certificate Settings" msgstr "CA Zertifikats Einstellungen" #: ../lib/GUI/TCONFIG.pm:1234 msgid "" "These Settings are passed to OpenSSL for creating Certificate Revocation " "Lists" msgstr "" "Diese Optionen werden für die Erstellung von Widerrufslisten eingesetzt" #: ../lib/GUI/TCONFIG.pm:1260 msgid "Revocation List Settings" msgstr "Widerrufslisten" #: ../lib/GUI/TCONFIG.pm:1322 msgid "CA Configuration" msgstr "Konfiguration der CA" #: ../lib/GUI/TCONFIG.pm:1330 msgid "These Settings are passed to OpenSSL for creating this CA Certificate" msgstr "Diese Optionen werden für die Erstellung dieses CA Zertifikats" #: ../lib/GUI/TCONFIG.pm:1335 msgid "and the CA Certificates of every SubCA, created with this CA." msgstr "und für die Erstellung aller SubCAs an OpenSSL weitergegeben." #: ../lib/GUI/WORDS.pm:26 ../lib/GUI/WORDS.pm:73 msgid "Not set" msgstr "Nicht gesetzt" #: ../lib/GUI/WORDS.pm:27 ../lib/GUI/WORDS.pm:74 msgid "Ask User" msgstr "Frage Benutzer" #: ../lib/GUI/WORDS.pm:28 ../lib/GUI/WORDS.pm:75 msgid "critical" msgstr "kritisch" #: ../lib/GUI/WORDS.pm:29 ../lib/GUI/WORDS.pm:76 msgid "not critical" msgstr "nicht kritisch" #: ../lib/GUI/WORDS.pm:30 ../lib/GUI/WORDS.pm:77 msgid "Copy Email" msgstr "Kopiere Email" #: ../lib/GUI/WORDS.pm:31 ../lib/GUI/WORDS.pm:78 msgid "raw" msgstr "raw" #: ../lib/GUI/WORDS.pm:32 ../lib/GUI/WORDS.pm:79 msgid "DNS Name" msgstr "DNS Name" #: ../lib/GUI/WORDS.pm:33 ../lib/GUI/WORDS.pm:81 msgid "IP Address" msgstr "IP Adresse" #: ../lib/GUI/WORDS.pm:34 ../lib/GUI/WORDS.pm:80 msgid "Email" msgstr "Email" #: ../lib/GUI/WORDS.pm:35 ../lib/GUI/WORDS.pm:82 msgid "SSL Server" msgstr "SSL Server" #: ../lib/GUI/WORDS.pm:36 ../lib/GUI/WORDS.pm:83 msgid "SSL Server, SSL Client" msgstr "SSL Server, SSL CLient" #: ../lib/GUI/WORDS.pm:37 ../lib/GUI/WORDS.pm:84 msgid "Key Encipherment" msgstr "Verschlüsselung" #: ../lib/GUI/WORDS.pm:38 ../lib/GUI/WORDS.pm:85 msgid "Digital Signature" msgstr "Digitale Signatur" #: ../lib/GUI/WORDS.pm:39 ../lib/GUI/WORDS.pm:86 msgid "Key Encipherment, Digital Signature" msgstr "Verschlüsselung, Digitale Signatur" #: ../lib/GUI/WORDS.pm:40 ../lib/GUI/WORDS.pm:87 msgid "Object Signing" msgstr "Objekt Signieren" #: ../lib/GUI/WORDS.pm:41 ../lib/GUI/WORDS.pm:91 msgid "SSL Client, Object Signing" msgstr "SSL Benutzer, Objekte Signieren" #: ../lib/GUI/WORDS.pm:42 ../lib/GUI/WORDS.pm:89 msgid "SSL Client, Email(S/MIME)" msgstr "SSL Benutzer, Email(S/MIME)" #: ../lib/GUI/WORDS.pm:43 ../lib/GUI/WORDS.pm:90 msgid "SSL Client" msgstr "SSL Benutzer" #: ../lib/GUI/WORDS.pm:44 ../lib/GUI/WORDS.pm:88 msgid "Email(S/MIME)" msgstr "Email(S/MIME)" #: ../lib/GUI/WORDS.pm:45 ../lib/GUI/WORDS.pm:92 msgid "SSL Client, Email, Object Signing" msgstr "SSL Benutzer, Email, Objekte Signieren" #: ../lib/GUI/WORDS.pm:46 ../lib/GUI/WORDS.pm:93 msgid "Object Signing CA" msgstr "Objekt Signierende CA" #: ../lib/GUI/WORDS.pm:47 ../lib/GUI/WORDS.pm:94 msgid "S/MIME CA" msgstr "S/MIME CA" #: ../lib/GUI/WORDS.pm:48 ../lib/GUI/WORDS.pm:95 msgid "SSL CA" msgstr "SSL CA" #: ../lib/GUI/WORDS.pm:49 ../lib/GUI/WORDS.pm:96 msgid "SSL CA, S/MIME CA" msgstr "SSL CA, S/MIME CA" #: ../lib/GUI/WORDS.pm:50 ../lib/GUI/WORDS.pm:97 msgid "SSL CA, Object Signing CA" msgstr "SSL CA, Objekt Signierende CA" #: ../lib/GUI/WORDS.pm:51 ../lib/GUI/WORDS.pm:98 msgid "S/MIME CA, Object Signing CA" msgstr "S/MIME CA, Objekt Signierende CA" #: ../lib/GUI/WORDS.pm:52 ../lib/GUI/WORDS.pm:99 msgid "SSL CA, S/MIME CA, Object Signing CA" msgstr "SSL CA, S/MIME CA, Objekt Signierende CA" #: ../lib/GUI/WORDS.pm:53 ../lib/GUI/WORDS.pm:100 msgid "Certificate Signing" msgstr "Zertifikate Signieren" #: ../lib/GUI/WORDS.pm:54 ../lib/GUI/WORDS.pm:101 msgid "CRL Signing" msgstr "CRL Signieren" #: ../lib/GUI/WORDS.pm:55 ../lib/GUI/WORDS.pm:102 msgid "Certificate Signing, CRL Signing" msgstr "Zertifikate Signieren, CRL Signieren" #: ../lib/GUI/WORDS.pm:63 msgid "Creation Date" msgstr "Gültig ab" #: ../lib/GUI/WORDS.pm:66 msgid "Public Key Algorithm" msgstr "Algorithmus des öff. Schlüssels" #: ../lib/GUI/WORDS.pm:67 msgid "Signature Algorithm" msgstr "Algorithmus der Signatur" #: ../lib/GUI/WORDS.pm:71 ../lib/GUI/X509_infobox.pm:80 msgid "Fingerprint (MD5)" msgstr "Fingerabdruck (MD5)" #: ../lib/GUI/WORDS.pm:72 ../lib/GUI/X509_infobox.pm:89 msgid "Fingerprint (SHA1)" msgstr "Fingerabdruck (SHA1)" #: ../lib/GUI/X509_browser.pm:448 msgid "Certificate Information" msgstr "Daten des Zertifikates" #: ../lib/GUI/X509_browser.pm:452 msgid "Request Information" msgstr "Daten der Anforderung" #: ../lib/GUI/X509_browser.pm:571 msgid "Invalid browser mode for selection_fname():" msgstr "Ungültiger Browser Modus für selection_fname()" #: ../lib/GUI/X509_browser.pm:571 ../lib/GUI/X509_browser.pm:607 #: ../lib/GUI/X509_browser.pm:656 ../lib/GUI/X509_browser.pm:677 #: ../lib/GUI/X509_browser.pm:698 ../lib/GUI/X509_browser.pm:725 msgid " " msgstr " " #: ../lib/GUI/X509_browser.pm:607 msgid "Invalid browser mode for selection_dn():" msgstr "Ungültiger Browser Modus für selection_dn()" #: ../lib/GUI/X509_browser.pm:656 ../lib/GUI/X509_browser.pm:677 msgid "Invalid browser mode for selection_cn():" msgstr "Ungültiger Browser Modus für selection_cn()" #: ../lib/GUI/X509_browser.pm:698 msgid "Invalid browser mode for selection_status():" msgstr "Ungültiger Browser Modus für selection_status():" #: ../lib/GUI/X509_browser.pm:725 msgid "Invalid browser mode for selection_type():" msgstr "Ungültiger Browser Modus für selection_type()" #: ../tinyca2:63 #, c-format msgid "Can't execute %s.\n" msgstr "Fehler beim Ausführen von %s\n" #: ../tinyca2:64 msgid "Configure correct path to openssl in tinyca.\n" msgstr "Bitte korrekten Pfad zu openssl in tinyca eintragen.\n" #: ../tinyca2:69 msgid "zip command not found, support disabled.\n" msgstr "Das zip Programm wurde nicht gefunden, Unterstützung deaktiviert.\n" #: ../tinyca2:70 msgid "Configure correct path to zip in tinyca.\n" msgstr "Bitte korrekten Pfad zu zip in tinyca eintragen.\n" #: ../tinyca2:74 msgid "tar command not found, support disabled.\n" msgstr "Das tar Programm wurde nicht gefunden, Unterstützung deaktiviert.\n" #: ../tinyca2:75 msgid "Configure correct path to tar in tinyca.\n" msgstr "Bitte korrekten Pfad zu tar in tinyca eintragen.\n" #: ../tinyca2:82 msgid "Can't find templatedir.\n" msgstr "Kann das Vorlagen-Verzeichnis nicht finden.\n" #: ../tinyca2:83 msgid "Please configure correct path with templates in tinyca.\n" msgstr "Bitte korrekten Pfad zu den Vorlagen in tinyca eintragen\n" tinyca2-0.7.5/po/cs.po0000644000175000017500000014676210461475420016152 0ustar schollerscholler00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: cs\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-07-13 23:47+0200\n" "PO-Revision-Date: 2004-11-22 19:55+0200\n" "Last-Translator: Robert Wolf \n" "Language-Team: czech\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../lib/CA.pm:44 msgid "error: can't open basedir: " msgstr "chyba: nelze otevřít hlavní adresář: " #: ../lib/CA.pm:102 msgid " Opening CA: " msgstr " Otevírání CA: " #: ../lib/CA.pm:109 ../lib/CA.pm:270 msgid "Invalid CA selected" msgstr "Zvolena neplatná CA" #: ../lib/CA.pm:154 msgid " Initializing OpenSSL" msgstr " Inicializace OpenSSL" #: ../lib/CA.pm:160 msgid " Check for CA Version" msgstr " Zjišťování verze CA" #: ../lib/CA.pm:167 ../lib/CA.pm:195 msgid "Can't open index file: " msgstr "Nelze otevřít indexový soubor: " #: ../lib/CA.pm:182 msgid " Convert CA" msgstr " Převádím CA" #: ../lib/CA.pm:201 msgid "Can't open index backup: " msgstr "Nelze otevřít zálohu indexů: " #: ../lib/CA.pm:218 msgid "This CA is converted for openssl 0.9.7x now." msgstr "Tato CA je nyní zkonvertována pro openssl 0.9.7x" #: ../lib/CA.pm:220 msgid "You will find a backup copy of the index file at: " msgstr "Záložní kopii indexového souboru najdete zde: " #: ../lib/CA.pm:229 msgid " Read Configuration" msgstr " Čtení konfigurace" #: ../lib/CA.pm:235 msgid " Create GUI" msgstr " Vytváření GUI" #: ../lib/CA.pm:241 msgid " Create Toolbar" msgstr " Vytváření panelu nástrojů" #: ../lib/CA.pm:247 msgid " Actual CA: " msgstr " Aktuální CA: " #: ../lib/CA.pm:332 #, c-format msgid "CA: %s deleted" msgstr "CA: odstraněno %s" #: ../lib/CA.pm:386 msgid "Password of parent CA is needed for creating a Sub CA" msgstr "Heslo nadřízené CA je nutné pro vytvoření podřízené CA" #: ../lib/CA.pm:395 msgid "Name must be filled in and must" msgstr "Jméno musí být zadáno a nesmí" #: ../lib/CA.pm:396 msgid " not contain Spaces" msgstr " obsahovat mezery" #: ../lib/CA.pm:408 msgid "Please specify at least Common Name, " msgstr "Prosím, zadejte alespoň Obecné jméno, " #: ../lib/CA.pm:409 msgid "Country and Password" msgstr "Stát a Heslo" #: ../lib/CA.pm:416 ../lib/REQ.pm:109 msgid "Passwords don't match" msgstr "Hesla nesouhlasí" #: ../lib/CA.pm:424 ../lib/REQ.pm:120 msgid "Country must be exact 2 letter code" msgstr "Stát musí obsahovat přesně 2 znaky" #: ../lib/CA.pm:428 #, c-format msgid "CA: %s already exists" msgstr "CA: %s již existuje" #: ../lib/CA.pm:468 msgid "Name for storage must be filled in and must not contain spaces" msgstr "Jméno pro úložiště musí být zadáno a nesmí obsahovat mezery" #: ../lib/CA.pm:477 msgid "You didn't give a password for the private CA key." msgstr "Nezadal jste heslo pro soukromý klíč CA." #: ../lib/CA.pm:479 msgid "The import will fail, if the key is encrypted." msgstr "Import neproběhne, pokud je klíč zašifrován." #: ../lib/CA.pm:488 msgid "Please give a new password for the CA" msgstr "Prosím, zadejte nové heslo pro CA" #: ../lib/CA.pm:495 msgid "New passwords don't match" msgstr "Nová Hesla nesouhlasí" #: ../lib/CA.pm:503 msgid "Please give a CA certificate to import" msgstr "Prosím, zvolte CA certifikát pro import" #: ../lib/CA.pm:508 #, c-format msgid "" "Can't read CA certificate file:\n" "%s" msgstr "" "Nelze číst soubor certifikátu CA:\n" "%s" #: ../lib/CA.pm:518 msgid "Please give a CA keyfile to import" msgstr "Prosím, zvolte soubor s klíčem CA pro import" #: ../lib/CA.pm:523 #, c-format msgid "" "Can't read CA key file:\n" "%s" msgstr "" "Nelze číst soubor s klíčem CA:\n" "%s" #: ../lib/CA.pm:535 msgid "Please give an Index file to import.\n" msgstr "Prosím, zvolte indexový soubor pro import.\n" #: ../lib/CA.pm:536 msgid "If you don't have an Index file, i'll try to generate one.\n" msgstr "Pokud nemáte indexový soubor, pokusím se jej vygenerovat.\n" #: ../lib/CA.pm:537 msgid "Attention: This will cause all Certificates to show up as valid.\n" msgstr "" "Pozor: Toto způsobí, že budou všechny certifikáty zobrazovány jako platné.\n" #: ../lib/CA.pm:538 msgid "Attention: Revoked Certificates will not be determined." msgstr "Pozor: Odvolané certifikáty nebudou zohledněny." #: ../lib/CA.pm:549 #, c-format msgid "" "Can't read Index file:\n" "%s" msgstr "" "Nelze číst indexový soubor:\n" "%s" #: ../lib/CA.pm:562 msgid "Please give a directory containing the certificates to import" msgstr "Prosím, zvolte adresář, který obsahuje certifikáty pro import" #: ../lib/CA.pm:567 #, c-format msgid "" "Can't find certificate directory:\n" "%s" msgstr "" "Nelze najít adresář s certifikáty:\n" "%s" #: ../lib/CA.pm:578 #, c-format msgid "CA: %s already exists. Please choose another name" msgstr "CA: %s již existuje. Prosím, zvolte jiné jméno" #: ../lib/CA.pm:594 msgid "Can't find X509v3 Basic Constraints in CA Certificate\n" msgstr "" "Nelze najít X509v3 základní omezení (Basic Constraints) v certifikátu CA\n" #: ../lib/CA.pm:595 msgid "Import canceled" msgstr "Import zrušen" #: ../lib/CA.pm:601 msgid "The selected CA Certificate is no valid CA certificate\n" msgstr "Vybraný certifikát CA není platný certifikát CA\n" #: ../lib/CA.pm:602 #, c-format msgid "X509v3 Basic Constraint is set to: %s" msgstr "X509v3 základní omezení (Basic Constraint) je nastaveno na: %s" #: ../lib/CA.pm:612 #, c-format msgid "" "Can't open Index file:\n" "%s" msgstr "" "Nelze otevřít indexový soubor:\n" "%s" #: ../lib/CA.pm:665 ../lib/CERT.pm:61 #, c-format msgid "Can't open Certificate directory: %s" msgstr "Nelze otevřít adresář s certifikáty: %s" #: ../lib/CA.pm:684 ../lib/CERT.pm:84 #, c-format msgid " Read Certificate: %s" msgstr " Čtení certifikátu: %s" #: ../lib/CA.pm:694 #, c-format msgid "Can't read Certificate file: %s" msgstr "Nelze číst soubor certifikátu: %s" #: ../lib/CA.pm:718 #, c-format msgid "Can't write Certificate file: %s" msgstr "Nelze zapsat soubor certifikátu: %s" #: ../lib/CA.pm:768 ../lib/CA.pm:927 msgid "Can't open Index file: " msgstr "Nelze otevřít indexový soubor: " #: ../lib/CA.pm:780 #, c-format msgid "Can't write CA Certificate file: %s" msgstr "Nelze zapsat soubor certifikátu CA: %s" #: ../lib/CA.pm:800 ../lib/CA.pm:934 msgid "Can't write Serial file: " msgstr "Nelze zapsat soubor serial: " #: ../lib/CA.pm:814 #, c-format msgid "Can't write CA Key file: %s" msgstr "Nelze zapsat soubor s klíčem CA: %s" #: ../lib/CA.pm:831 ../lib/CA.pm:1155 msgid "Generating CRL failed" msgstr "Selhalo vytváření CRL" #: ../lib/CA.pm:844 #, c-format msgid "Succesfully imported %d certificates\n" msgstr "Úspěšně bylo importováno %d certifikátů\n" #: ../lib/CA.pm:845 msgid "Check the configuration of your imported CA." msgstr "Zkontrolujte nastavení Vaší naimportované CA." #: ../lib/CA.pm:862 ../lib/CA.pm:971 msgid "No CA name given" msgstr "Nebylo zadáno jméno CA" #: ../lib/CA.pm:871 ../lib/CA.pm:876 ../lib/CA.pm:881 ../lib/CA.pm:886 #: ../lib/CA.pm:891 ../lib/CA.pm:896 msgid "Can't create directory: " msgstr "Nelze vytvořit adresář: " #: ../lib/CA.pm:905 #, c-format msgid "Can't open template file %s %s" msgstr "Nelze otevřít soubor šablony %s %s" #: ../lib/CA.pm:910 ../lib/CA.pm:1207 ../lib/CA.pm:1274 ../lib/CERT.pm:637 #: ../lib/KEY.pm:227 ../lib/REQ.pm:740 #, c-format msgid "Can't open output file: %s: %s" msgstr "Nelze otevřít výstupní soubor: %s: %s" #: ../lib/CA.pm:984 ../lib/KEY.pm:482 ../lib/REQ.pm:167 msgid "Generating key failed" msgstr "Selhalo vytváření klíče" #: ../lib/CA.pm:1018 ../lib/REQ.pm:193 msgid "Generating Request failed" msgstr "Selhalo vytváření požadavku-Request" #: ../lib/CA.pm:1027 ../lib/CA.pm:1041 ../lib/CERT.pm:102 msgid "Can't read Certificate" msgstr "Nelze číst certifikát" #: ../lib/CA.pm:1032 ../lib/CA.pm:1046 msgid "Can't write Certificate" msgstr "Nelze zapsat certifikát" #: ../lib/CA.pm:1086 msgid "Generating certificate failed" msgstr "Selhalo vytváření certifikátu" #: ../lib/CA.pm:1106 ../lib/CA.pm:1131 #, c-format msgid "Can't open ca certificate file %s %s" msgstr "Nelze otevřít soubor CA certifikátu %s %s" #: ../lib/CA.pm:1115 #, c-format msgid "Can't create certificate chain file: %s: %s" msgstr "Nelze vytvořit soubor řetězu certifikátů (certificate chain): %s: %s" #: ../lib/CA.pm:1164 #, c-format msgid "CA: %s created" msgstr "CA: vytvořeno %s" #: ../lib/CA.pm:1199 #, c-format msgid "Can't open certificate chain file: %s: %s" msgstr "Nelze otevřít soubor řetězu certifikátů (certificate chain): %s: %s" #: ../lib/CA.pm:1220 #, c-format msgid "Certificate Chain succesfully exported to: %s" msgstr "Řetěz certifikátů (Certificate chain) úspěšně exportován do: %s" #: ../lib/CA.pm:1255 ../lib/CERT.pm:580 ../lib/GUI.pm:166 ../lib/KEY.pm:348 #: ../lib/REQ.pm:71 ../lib/REQ.pm:389 msgid "Can't read CA certificate" msgstr "Nelze číst certifikát CA" #: ../lib/CA.pm:1265 #, c-format msgid "Invalid Format for export_ca_cert(): %s" msgstr "Neplatný formát pro export_ca_cert(): %s" #: ../lib/CA.pm:1287 #, c-format msgid "Certificate succesfully exported to: %s" msgstr "Certifikát úspěšně exportován do: %s" #: ../lib/CA.pm:1320 msgid "Please give the output file" msgstr "Zadejte prosím jméno výstupního souboru" #: ../lib/CA.pm:1328 msgid "Please give the CA password to create the Revocation List" msgstr "" "Zadejte prosím heslo CA pro vytvoření seznamu odvolaných certifikátů (CRL)" #: ../lib/CA.pm:1349 msgid "" "Wrong CA password given\n" "Generating Revocation List failed" msgstr "" "Zadáno nesprávné heslo CA\n" "Vytváření seznamu odvolaných certifikátů (CRL) selhalo" #: ../lib/CA.pm:1353 msgid "" "CA Key not found\n" "Generating Revocation List failed" msgstr "" "Klíč CA nebyl nalezen\n" "Vytváření seznamu odvolaných certifikátů (CRL) selhalo" #: ../lib/CA.pm:1357 ../lib/CA.pm:1363 msgid "Generating Revocation List failed" msgstr "Vytváření seznamu odvolaných certifikátů (CRL) selhalo" #: ../lib/CA.pm:1371 #, c-format msgid "CRL successfully exported to: %s" msgstr "CRL úspěšně exportován do: %s" #: ../lib/CERT.pm:143 ../lib/CERT.pm:199 ../lib/CERT.pm:322 ../lib/CERT.pm:381 #: ../lib/GUI.pm:851 msgid "Please select a Certificate first" msgstr "Prosím, nejdříve zvolte certifikát" #: ../lib/CERT.pm:151 ../lib/CERT.pm:209 ../lib/CERT.pm:333 ../lib/CERT.pm:400 #: ../lib/GUI.pm:2706 ../lib/GUI.pm:2717 ../lib/OpenSSL.pm:702 #: ../lib/GUI/X509_browser.pm:276 msgid "VALID" msgstr "PLATNÝ" #: ../lib/CERT.pm:153 #, c-format msgid "" "Can't renew Certifikate with Status: %s\n" "Please revoke the Certificate first" msgstr "" "Nelze obnovit certifikát s výsledkem: %s\n" "Prosím, nejdříve certifikát odvolejte" #: ../lib/CERT.pm:168 msgid "" "Key and Request are necessary for renewal of a Certificate\n" "Renewal is not possible!" msgstr "" "K obnovení certifikátu je nutný klíč a žádost (Request)\n" "Obnovení není možné!" #: ../lib/CERT.pm:210 #, c-format msgid "Can't revoke Certifikate with Status: %s" msgstr "Nelze odvolat certifikát s výsledkem: %s" #: ../lib/CERT.pm:256 msgid "" "Wrong CA password given\n" "Revoking the Certificate failed" msgstr "" "Zadáno neplatné heslo CA\n" "Odvolání certifikátu selhalo" #: ../lib/CERT.pm:263 msgid "" "CA Key not found\n" "Revoking the Certificate failed" msgstr "" "Klíč CA nenalezen\n" "Odvolání certifikátu selhalo" #: ../lib/CERT.pm:270 msgid "Revoking the Certificate failed" msgstr "Odvolání certifikátu selhalo" #: ../lib/CERT.pm:290 msgid "Generating a new Revocation List failed" msgstr "Vytvoření nového seznamu zneplatněných certifikátů (CRL) selhalo" #: ../lib/CERT.pm:335 msgid "" "Can't delete VALID certificate!\n" "Please revoke the Certificate first." msgstr "" "Nelze odstranit PLATNÝ certifikát!\n" "Prosím, nejdříve certifikát zneplatněte." #: ../lib/CERT.pm:401 msgid "Certificate seems not to be VALID" msgstr "Certifikát zřejmě není PLATNÝ" #: ../lib/CERT.pm:403 msgid "Export is not possible" msgstr "Export není možný" #: ../lib/CERT.pm:430 ../lib/KEY.pm:172 msgid "Please give at least the output file" msgstr "Prosím, zadejte alespoň výstupní soubor" #: ../lib/CERT.pm:436 msgid "Key is necessary for export as PKCS#12" msgstr "Klíč je nutný pro export jako PKCS#12" #: ../lib/CERT.pm:438 ../lib/CERT.pm:454 ../lib/KEY.pm:257 ../lib/KEY.pm:308 msgid "Export is not possible!" msgstr "Export není možný!" #: ../lib/CERT.pm:452 #, fuzzy, c-format msgid "Key is necessary for export as %s" msgstr "Klíč je nutný pro export jako %s" #: ../lib/CERT.pm:492 ../lib/KEY.pm:216 #, fuzzy, c-format msgid "Can't open Certificate file: %s: %s" msgstr "Nelze otevřít soubor CA certifikátu %s %s" #: ../lib/CERT.pm:525 ../lib/KEY.pm:288 msgid "Generating PKCS#12 failed" msgstr "Vytváření PKCS#12 selhalo" #: ../lib/CERT.pm:533 ../lib/CERT.pm:616 ../lib/KEY.pm:295 ../lib/KEY.pm:381 #, c-format msgid "Certificate and Key successfully exported to %s" msgstr "Certifikát a klíč úspěšně exportován do %s" #: ../lib/CERT.pm:546 ../lib/CERT.pm:567 ../lib/REQ.pm:693 #, c-format msgid "Can't create temporary file: %s: %s" msgstr "Nelze vytvořit dočasný soubor: %s: %s" #: ../lib/CERT.pm:558 #, fuzzy, c-format msgid "Can't read Key file: %s: %s" msgstr "Nelze číst soubor klíče: %s: %s" #: ../lib/CERT.pm:588 ../lib/KEY.pm:321 ../lib/KEY.pm:337 ../lib/KEY.pm:355 msgid "Can't create temporary file" msgstr "Nelze vytvořit dočasný soubor" #: ../lib/CERT.pm:609 ../lib/KEY.pm:375 #, fuzzy, c-format msgid "Generating %s file failed" msgstr "Vytváření souboru %s selhalo" #: ../lib/CERT.pm:628 #, c-format msgid "Invalid Format for export_cert(): %s" msgstr "Neplatný formát pro export_cert(): %s" #: ../lib/CERT.pm:648 #, c-format msgid "Certificate successfully exported to: %s" msgstr "Certifikát úspěšně exportován do: %s" #: ../lib/GUI.pm:171 ../lib/GUI.pm:178 msgid "CA" msgstr "CA" #: ../lib/GUI.pm:185 msgid "CA Information" msgstr "CA informace" #: ../lib/GUI.pm:204 msgid "Certificates" msgstr "Certifikáty" #: ../lib/GUI.pm:244 ../lib/GUI.pm:2689 ../lib/GUI/WORDS.pm:56 #: ../lib/GUI/X509_browser.pm:160 ../lib/GUI/X509_browser.pm:168 #: ../lib/GUI/X509_browser.pm:177 msgid "Common Name" msgstr "Obecné jméno (CN)" #: ../lib/GUI.pm:245 ../lib/GUI.pm:1273 ../lib/GUI.pm:2314 #: ../lib/GUI/WORDS.pm:57 ../lib/GUI/X509_browser.pm:161 #: ../lib/GUI/X509_browser.pm:169 ../lib/GUI/X509_browser.pm:178 msgid "eMail Address" msgstr "eMail adresa" #: ../lib/GUI.pm:246 ../lib/GUI/WORDS.pm:59 ../lib/GUI/X509_browser.pm:162 #: ../lib/GUI/X509_browser.pm:170 ../lib/GUI/X509_browser.pm:179 msgid "Organizational Unit" msgstr "Organizační jednotka (OU)" #: ../lib/GUI.pm:247 ../lib/GUI/WORDS.pm:58 ../lib/GUI/X509_browser.pm:163 #: ../lib/GUI/X509_browser.pm:171 ../lib/GUI/X509_browser.pm:180 msgid "Organization" msgstr "Organizace (O)" #: ../lib/GUI.pm:248 ../lib/GUI/WORDS.pm:60 ../lib/GUI/X509_browser.pm:164 #: ../lib/GUI/X509_browser.pm:172 ../lib/GUI/X509_browser.pm:181 msgid "Location" msgstr "Umístění" #: ../lib/GUI.pm:249 ../lib/GUI/WORDS.pm:61 ../lib/GUI/X509_browser.pm:165 #: ../lib/GUI/X509_browser.pm:173 ../lib/GUI/X509_browser.pm:182 msgid "State" msgstr "Stát" #: ../lib/GUI.pm:250 ../lib/GUI/WORDS.pm:62 ../lib/GUI/X509_browser.pm:166 #: ../lib/GUI/X509_browser.pm:174 ../lib/GUI/X509_browser.pm:183 msgid "Country" msgstr "Země" #: ../lib/GUI.pm:251 ../lib/GUI/WORDS.pm:68 ../lib/GUI/X509_browser.pm:184 msgid "Type" msgstr "Typ" #: ../lib/GUI.pm:265 msgid "Keys" msgstr "Klíče" #: ../lib/GUI.pm:308 msgid "Requests" msgstr "Žádosti" #: ../lib/GUI.pm:399 #, c-format msgid " Actual CA: %s" msgstr " Aktuální CA: %s" #: ../lib/GUI.pm:402 #, c-format msgid " Actual CA: %s - Certificates" msgstr " Aktuální CA: %s - Certifikáty" #: ../lib/GUI.pm:405 #, c-format msgid " Actual CA: %s - Keys" msgstr " Aktuální CA: %s - Klíče" #: ../lib/GUI.pm:408 #, c-format msgid " Actual CA: %s - Requests" msgstr " Aktuální CA: %s - Žádosti (Requests)" #: ../lib/GUI.pm:457 ../lib/GUI.pm:1141 msgid "Open CA" msgstr "Otevřít CA" #: ../lib/GUI.pm:463 msgid "New CA" msgstr "Nová CA" #: ../lib/GUI.pm:469 ../lib/GUI.pm:2382 msgid "Import CA" msgstr "Import CA" #: ../lib/GUI.pm:475 ../lib/GUI.pm:1143 msgid "Delete CA" msgstr "Odstranit CA" #: ../lib/GUI.pm:485 ../lib/GUI.pm:524 ../lib/GUI.pm:592 msgid "Details" msgstr "Detaily" #: ../lib/GUI.pm:491 msgid "History" msgstr "Historie" #: ../lib/GUI.pm:497 msgid "Sub CA" msgstr "Pod CA" #: ../lib/GUI.pm:503 msgid "Export CA" msgstr "Export CA" #: ../lib/GUI.pm:509 ../lib/GUI.pm:1419 msgid "Export CRL" msgstr "Export CRL" #: ../lib/GUI.pm:516 msgid "Export Chain" msgstr "Export řetězu" #: ../lib/GUI.pm:530 ../lib/GUI.pm:598 msgid "View" msgstr "Zobrazit" #: ../lib/GUI.pm:540 ../lib/GUI.pm:604 msgid "New" msgstr "Nový" #: ../lib/GUI.pm:547 ../lib/GUI.pm:578 msgid "Export" msgstr "Export" #: ../lib/GUI.pm:553 msgid "Revoke" msgstr "Odvolat" #: ../lib/GUI.pm:563 msgid "Renew" msgstr "Obnovit" #: ../lib/GUI.pm:570 ../lib/GUI.pm:584 ../lib/GUI.pm:627 msgid "Delete" msgstr "Odstranit" #: ../lib/GUI.pm:610 msgid "Import" msgstr "Import" #: ../lib/GUI.pm:620 msgid "Sign" msgstr "Podepsat" #: ../lib/GUI.pm:646 msgid "_CA" msgstr "_CA" #: ../lib/GUI.pm:649 msgid "_Open CA" msgstr "_Otevřít CA" #: ../lib/GUI.pm:654 msgid "_New CA" msgstr "_Nová CA" #: ../lib/GUI.pm:659 msgid "_Delete CA" msgstr "O_dstranit CA" #: ../lib/GUI.pm:667 msgid "_Exit" msgstr "Kon_ec" #: ../lib/GUI.pm:674 msgid "_Preferences" msgstr "_Předvolby" #: ../lib/GUI.pm:677 #, fuzzy msgid "Experts Only!!" msgstr "Pouze pro odborníky!!" #: ../lib/GUI.pm:682 msgid "OpenSSL _Configuration" msgstr "OpenSSL konfigura_ce" #: ../lib/GUI.pm:689 ../lib/GUI.pm:692 msgid "_Help" msgstr "_Help-Nápověda" #: ../lib/GUI.pm:697 msgid "_About TinyCA" msgstr "O _aplikaci TinyCA" #: ../lib/GUI.pm:728 msgid "Invalid mode for show_text():" msgstr "Neplatný mód pro show_text():" #: ../lib/GUI.pm:733 ../lib/GUI.pm:848 ../lib/REQ.pm:236 ../lib/REQ.pm:367 msgid "Please select a Request first" msgstr "Prosím, nejdříve vyberte žádost (Request)" #: ../lib/GUI.pm:736 msgid "Please select a certificate first" msgstr "Prosím, nejdříve vyberte certifikát" #: ../lib/GUI.pm:752 ../lib/GUI.pm:867 ../lib/GUI/X509_browser.pm:456 #: ../lib/GUI/X509_browser.pm:515 msgid "Can't read file" msgstr "Nelze číst soubor" #: ../lib/GUI.pm:754 msgid "Request" msgstr "Žádost" #: ../lib/GUI.pm:754 msgid "Certificate" msgstr "Certifikát" #: ../lib/GUI.pm:815 #, fuzzy, c-format msgid "Invalid mode for _show_popup_menu(): %s" msgstr "Neplatný mód pro _show_popup_menu(): %s" #: ../lib/GUI.pm:843 msgid "Invalid mode for show_details():" msgstr "Neplatný mód pro show_details():" #: ../lib/GUI.pm:869 ../lib/GUI.pm:969 ../lib/GUI.pm:3040 msgid "Request Details" msgstr "Detaily žádosti" #: ../lib/GUI.pm:869 ../lib/GUI.pm:969 ../lib/GUI.pm:2897 msgid "Certificate Details" msgstr "Detaily certifikátu" #: ../lib/GUI.pm:911 ../lib/GUI.pm:1679 ../lib/GUI.pm:3061 msgid "Import Request" msgstr "Importovat žádost" #: ../lib/GUI.pm:913 ../lib/GUI.pm:2438 msgid "Import CA Certificate" msgstr "Importovat CA certifikát" #: ../lib/GUI.pm:921 msgid "Do you want to import the following Certificate Request?" msgstr "Chcete importovat následující žádost o certifikát?" #: ../lib/GUI.pm:923 msgid "Do you want to import the following CA Certificate?" msgstr "Chcete importovat následující certifikát CA?" #: ../lib/GUI.pm:977 msgid "Subject DN" msgstr "DN subjektu" #: ../lib/GUI.pm:1001 msgid "Issuer" msgstr "Vydavatel" #: ../lib/GUI.pm:1027 msgid "Validity" msgstr "Platnost" #: ../lib/GUI.pm:1043 msgid "Key/Request Details:" msgstr "Detaily klíče/žádosti (Request):" #: ../lib/GUI.pm:1043 msgid "Key/Certificate Details:" msgstr "Detaily klíče/certifikátu:" #: ../lib/GUI.pm:1059 msgid "Fingerprints" msgstr "Fingerprints" #: ../lib/GUI.pm:1075 msgid "Requested X.509 Extensions" msgstr "Požadovaná X.509 rozšíření" #: ../lib/GUI.pm:1075 msgid "X.509v3 Extensions" msgstr "X.509v3 rozšíření" #: ../lib/GUI.pm:1100 msgid "Requested Netscape Extensions" msgstr "Požadovaná Netscape rozšíření" #: ../lib/GUI.pm:1100 msgid "Netscape Extensions" msgstr "Netscape rozšíření" #: ../lib/GUI.pm:1145 msgid "Invalid action given: " msgstr "Zadána neplatná akce: " #: ../lib/GUI.pm:1167 ../lib/GUI.pm:1213 msgid "Invalid action for show_select_ca_dialog(): " msgstr "Neplatná akce pro show_select_ca_dialog(): " #: ../lib/GUI.pm:1189 msgid "Available CAs" msgstr "CA k dispozici" #: ../lib/GUI.pm:1245 msgid "Create Request" msgstr "Vytvořit žádost" #: ../lib/GUI.pm:1246 msgid "Create a new Certificate Request" msgstr "Vytvořit novou žádost o certifikát" #: ../lib/GUI.pm:1260 msgid "Common Name (eg, your Name," msgstr "Obecné jméno (např. Vaše jméno," #: ../lib/GUI.pm:1265 msgid "your eMail Address" msgstr "Vaše emailová adresa" #: ../lib/GUI.pm:1269 msgid "or the Servers Name)" msgstr "nebo jméno serveru)" #: ../lib/GUI.pm:1277 msgid "Password (protect your private Key):" msgstr "Heslo (chrání Váš soukromý klíč):" #: ../lib/GUI.pm:1281 ../lib/GUI.pm:2294 msgid "Password (confirmation):" msgstr "Heslo (potvrzení):" #: ../lib/GUI.pm:1285 ../lib/GUI.pm:2286 msgid "Country Name (2 letter code):" msgstr "Jméno země (kód 2 písmena):" #: ../lib/GUI.pm:1289 ../lib/GUI.pm:2298 msgid "State or Province Name:" msgstr "Jméno státu nebo kraje" #: ../lib/GUI.pm:1293 ../lib/GUI.pm:2302 msgid "Locality Name (eg. city):" msgstr "Jméno místa (např. město):" #: ../lib/GUI.pm:1297 ../lib/GUI.pm:2306 msgid "Organization Name (eg. company):" msgstr "Jméno organizace (např. firma):" #: ../lib/GUI.pm:1303 ../lib/GUI.pm:1308 ../lib/GUI.pm:2310 msgid "Organizational Unit Name (eg. section):" msgstr "Jméno organizační jednotky (např. sekce):" #: ../lib/GUI.pm:1313 ../lib/GUI.pm:2322 ../lib/GUI/WORDS.pm:65 msgid "Keylength" msgstr "Délka klíče" #: ../lib/GUI.pm:1321 ../lib/GUI.pm:2352 msgid "Digest" msgstr "Výtah-digest" #: ../lib/GUI.pm:1328 msgid "Algorithm" msgstr "Algoritmus" #: ../lib/GUI.pm:1359 ../lib/GUI.pm:2918 msgid "Revoke Certificate" msgstr "Odvolat certifikát" #: ../lib/GUI.pm:1368 ../lib/GUI.pm:1444 ../lib/GUI.pm:2093 msgid "CA Password:" msgstr "Heslo CA:" #: ../lib/GUI.pm:1374 msgid "Revocation Reason:" msgstr "Důvod odvolání:" #: ../lib/GUI.pm:1419 msgid "Export Revocation List to File" msgstr "Exportovat seznam odvolaných certifikátů (CRL) do souboru" #: ../lib/GUI.pm:1427 ../lib/GUI.pm:1515 ../lib/GUI.pm:1563 ../lib/GUI.pm:1687 #: ../lib/GUI.pm:1755 msgid "File:" msgstr "Soubor:" #: ../lib/GUI.pm:1438 ../lib/GUI.pm:1526 ../lib/GUI.pm:1574 ../lib/GUI.pm:1697 #: ../lib/GUI.pm:1772 ../lib/GUI.pm:2435 ../lib/GUI.pm:2454 ../lib/GUI.pm:2473 #: ../lib/GUI.pm:2492 msgid "Browse..." msgstr "Procházet..." #: ../lib/GUI.pm:1441 ../lib/GUI.pm:1554 ../lib/GUI.pm:1577 msgid "Export CA Certificate" msgstr "Exportovat certifikát CA" #: ../lib/GUI.pm:1448 ../lib/GUI.pm:2099 ../lib/GUI.pm:2318 msgid "Valid for (Days):" msgstr "Platný (dnů):" #: ../lib/GUI.pm:1452 ../lib/GUI.pm:1581 ../lib/GUI.pm:1779 msgid "Export Format:" msgstr "Formát exportu:" #: ../lib/GUI.pm:1458 ../lib/GUI.pm:1587 msgid "PEM" msgstr "PEM" #: ../lib/GUI.pm:1467 ../lib/GUI.pm:1596 msgid "DER" msgstr "DER" #: ../lib/GUI.pm:1476 ../lib/GUI.pm:1605 msgid "TXT" msgstr "TXT" #: ../lib/GUI.pm:1507 ../lib/GUI.pm:1529 msgid "Export CA Certificate Chain" msgstr "Exportovat řetěz certifikátů CA (CA certificate chain)" #: ../lib/GUI.pm:1508 msgid "Export CA Certificate Chain to File" msgstr "Exportovat řetěz certifikátů CA (CA Certificate Chain) do souboru" #: ../lib/GUI.pm:1555 msgid "Export CA Certificate to File" msgstr "Exportovat certifikát CA do souboru" #: ../lib/GUI.pm:1635 ../lib/GUI.pm:1636 msgid "Export Key without Passphrase" msgstr "Exportovat klíč bez fráze" #: ../lib/GUI.pm:1640 msgid "I hope you know what you're doing?" msgstr "Doufám, že víte, co děláte!" #: ../lib/GUI.pm:1644 msgid "The Key Passphrase is needed for decryption of the Key" msgstr "Fráze klíče je nutná pro dekódování klíče" #: ../lib/GUI.pm:1653 msgid "Password:" msgstr "Heslo:" #: ../lib/GUI.pm:1679 ../lib/GUI.pm:1700 msgid "Import Request from File" msgstr "Importovat žádost ze souboru" #: ../lib/GUI.pm:1721 ../lib/GUI.pm:1759 ../lib/GUI.pm:2911 msgid "Export Certificate" msgstr "Exportovat certifikát" #: ../lib/GUI.pm:1723 ../lib/GUI.pm:1761 ../lib/GUI.pm:2868 msgid "Export Key" msgstr "Exportovat klíč" #: ../lib/GUI.pm:1726 msgid "Invalid mode for show_export_dialog(): " msgstr "Neplatný mód pro show_export_dialog(): " #: ../lib/GUI.pm:1743 msgid "Export Certificate to File" msgstr "Exportovat certifikát do souboru" #: ../lib/GUI.pm:1745 msgid "Export Key to File" msgstr "Exportovat klíč do souboru" #: ../lib/GUI.pm:1783 msgid "PEM (Certificate)" msgstr "PEM (certifikát)" #: ../lib/GUI.pm:1785 msgid "PEM (Key)" msgstr "PEM (klíč)" #: ../lib/GUI.pm:1794 msgid "DER (Certificate)" msgstr "DER (certifikát)" #: ../lib/GUI.pm:1796 msgid "DER (Key without Passphrase)" msgstr "DER (klíč bez fráze)" #: ../lib/GUI.pm:1804 msgid "PKCS#12 (Certificate & Key)" msgstr "PKCS#12 (certifikát a klíč)" #: ../lib/GUI.pm:1811 msgid "Zip (Certificate & Key)" msgstr "Zip (certifikát a klíč)" #: ../lib/GUI.pm:1821 #, fuzzy msgid "Tar (Certificate & Key)" msgstr "Tar (certifikát a klíč)" #: ../lib/GUI.pm:1833 msgid "TXT (Certificate)" msgstr "TXT (certifikát)" #: ../lib/GUI.pm:1839 #, fuzzy msgid "Without Passphrase (PEM/PKCS#12)" msgstr "Bez fráze (PEM/PKCS#12)" #: ../lib/GUI.pm:1845 ../lib/GUI.pm:1872 ../lib/GUI.pm:1891 ../lib/GUI.pm:2018 #: ../lib/GUI.pm:2043 ../lib/GUI.pm:2196 msgid "Yes" msgstr "Ano" #: ../lib/GUI.pm:1850 ../lib/GUI.pm:1877 ../lib/GUI.pm:1896 ../lib/GUI.pm:2024 #: ../lib/GUI.pm:2049 ../lib/GUI.pm:2202 msgid "No" msgstr "Ne" #: ../lib/GUI.pm:1860 msgid "Include Key (PEM)" msgstr "Včetně klíče (PEM)" #: ../lib/GUI.pm:1865 #, fuzzy msgid "Include Certificate (PEM)" msgstr "Včetně certifikátu (PEM)" #: ../lib/GUI.pm:1885 #, fuzzy msgid "Include Fingerprint (PEM)" msgstr "Včetně Fingerprintu (PEM)" #: ../lib/GUI.pm:1993 ../lib/GUI.pm:1994 msgid "Export to PKCS#12" msgstr "Exportovat do PKCS#12" #: ../lib/GUI.pm:2001 msgid "Key Password:" msgstr "Heslo klíče:" #: ../lib/GUI.pm:2005 msgid "Export Password:" msgstr "Heslo pro export:" #: ../lib/GUI.pm:2008 msgid "Friendly Name:" msgstr "Jednoduché jméno:" #: ../lib/GUI.pm:2012 #, fuzzy msgid "Without Passphrase" msgstr "Bez fráze" #: ../lib/GUI.pm:2037 msgid "Add CA Certificate to PKCS#12 structure" msgstr "Přidat certifikát CA do PKCS#12 struktury" #: ../lib/GUI.pm:2085 ../lib/GUI.pm:3068 msgid "Sign Request" msgstr "Podepsat žádost" #: ../lib/GUI.pm:2085 msgid "Sign Request/Create Certificate" msgstr "Podepsat žádost/Vytvořit certifikát" #: ../lib/GUI.pm:2110 ../lib/GUI.pm:2155 msgid "Subject alternative name (IP Address):" msgstr "Alternativní jméno subjektu (IP adresa):" #: ../lib/GUI.pm:2113 ../lib/GUI.pm:2158 msgid "Subject alternative name (DNS Name):" msgstr "Alternativní jméno subjektu (DNS jméno):" #: ../lib/GUI.pm:2116 ../lib/GUI.pm:2164 #, fuzzy msgid "Subject alternative name (raw):" msgstr "Alternativní jméno subjektu (raw):" #: ../lib/GUI.pm:2124 ../lib/GUI.pm:2172 msgid "Extended Key Usage:" msgstr "Rozšířené použití klíče:" #: ../lib/GUI.pm:2131 msgid "Netscape SSL Server Name:" msgstr "Netscape jméno serveru SSL:" #: ../lib/GUI.pm:2138 ../lib/GUI.pm:2179 msgid "Netscape Revocation URL:" msgstr "Netscape URL odvolaných:" #: ../lib/GUI.pm:2145 ../lib/GUI.pm:2186 msgid "Netscape Renewal URL:" msgstr "Netscape URL obnovených:" #: ../lib/GUI.pm:2161 msgid "Subject alternative name (eMail Address):" msgstr "Alternativní jméno subjektu (eMailová adresa):" #: ../lib/GUI.pm:2208 msgid "Add eMail Address to Subject DN:" msgstr "Přidat eMailovou adresu k DN subjektu:" #: ../lib/GUI.pm:2238 ../lib/GUI.pm:2242 msgid "Create CA" msgstr "Vytvořit CA" #: ../lib/GUI.pm:2238 msgid "Create a new Sub CA" msgstr "Vytvořit novou podřízenou CA" #: ../lib/GUI.pm:2242 msgid "Create a new CA" msgstr "Vytvořit novou CA" #: ../lib/GUI.pm:2255 msgid "CA Password (for creating the new CA):" msgstr "Heslo CA (pro vytvoření nové CA):" #: ../lib/GUI.pm:2266 ../lib/GUI.pm:2403 msgid "Name (for local storage):" msgstr "Jméno (pro lokální uložení):" #: ../lib/GUI.pm:2273 msgid "Data for CA Certificate" msgstr "Data pro certifikát CA" #: ../lib/GUI.pm:2282 msgid "Common Name (for the CA):" msgstr "Obecné jméno (pro CA):" #: ../lib/GUI.pm:2290 msgid "Password (needed for signing):" msgstr "Heslo (potřebné pro podepsování):" #: ../lib/GUI.pm:2382 msgid "Import an existing CA into TinyCA" msgstr "Import existující CA do TinyCA" #: ../lib/GUI.pm:2393 msgid "Password of the private CA key (Needed for import):" msgstr "Heslo soukromého klíče CA (potřebné pro import):" #: ../lib/GUI.pm:2407 msgid "New password for the CA:" msgstr "Nové heslo pro CA:" #: ../lib/GUI.pm:2411 msgid "Confirm password:" msgstr "Potvrzení hesla:" #: ../lib/GUI.pm:2416 msgid "Files/Directories to import" msgstr "Soubory/Adresáře pro import" #: ../lib/GUI.pm:2424 msgid "CA Certificate (PEM/DER):" msgstr "Certifikát CA (PEM/DER):" #: ../lib/GUI.pm:2443 msgid "CA private key (PEM/DER):" msgstr "Soukromý klíč CA (PEM/DER):" #: ../lib/GUI.pm:2457 #, fuzzy msgid "Import CA private Key" msgstr "Importovat soukromý klíč CA" #: ../lib/GUI.pm:2462 #, fuzzy msgid "OpenSSL Index File (index.txt):" msgstr "OpenSSL indexový soubor (index.txt):" #: ../lib/GUI.pm:2476 msgid "Import Index File" msgstr "Importovat indexový soubor" #: ../lib/GUI.pm:2481 msgid "Directory containing certificates (PEM/DER):" msgstr "Adresář obsahující certifikáty (PEM/DER):" #: ../lib/GUI.pm:2495 #, fuzzy msgid "Import Certificates from directory" msgstr "Importovat certifikáty z adresáře" #: ../lib/GUI.pm:2509 msgid "You are kidding, are you??" msgstr "Žertuješ, co?" #: ../lib/GUI.pm:2531 #, fuzzy msgid "Spanish: Ramon Pons Vivanco " msgstr "Španělský: Ramon Pons Vivanco " #: ../lib/GUI.pm:2532 #, fuzzy msgid "Czech: Robert Wolf " msgstr "Český: Robert Wolf " #: ../lib/GUI.pm:2533 #, fuzzy msgid "French: Thibault Le Meur " msgstr "Francouzský: Thibault Le Meur " #: ../lib/GUI.pm:2549 msgid "Do you really want to delete the selected Request?" msgstr "Opravdu chcete odstranit vybranou žádost (Request)?" #: ../lib/GUI.pm:2551 msgid "Do you really want to delete the selected Key?" msgstr "Opravdu chcete odstranit vybraný klíč?" #: ../lib/GUI.pm:2553 msgid "Do you really want to delete the selected Certificate?" msgstr "Opravdu chcete odstranit vybraný certifikát?" #: ../lib/GUI.pm:2603 #, fuzzy msgid "Overwrite Request/Key" msgstr "Přepsat žádost(Request)/klíč" #: ../lib/GUI.pm:2609 msgid "The Key or the Request is already existing!" msgstr "Klíč nebo žádost (Request) již existuje!" #: ../lib/GUI.pm:2614 #, fuzzy msgid "You won't be able to sign this Request" msgstr "Nebudete moci podepsat tuto žádost (Request)" #: ../lib/GUI.pm:2619 #, fuzzy msgid "if the corresponding certificate is still valid" msgstr "pokud odpovídající certifikát je stále platný" #: ../lib/GUI.pm:2636 msgid "The Certificate will be longer valid than your CA!" msgstr "Certifikát bude platný déle než Vaše CA!" #: ../lib/GUI.pm:2638 msgid "This may cause problems with some software!!" msgstr "Toto může způsobit problémy s některými programy!!" #: ../lib/GUI.pm:2653 msgid "Expirationdate Warning" msgstr "Varování data platnosti" #: ../lib/GUI.pm:2688 ../lib/GUI/WORDS.pm:69 msgid "Serial" msgstr "Seriové číslo" #: ../lib/GUI.pm:2690 ../lib/GUI/WORDS.pm:70 ../lib/GUI/X509_browser.pm:175 msgid "Status" msgstr "Stav" #: ../lib/GUI.pm:2691 ../lib/GUI/WORDS.pm:64 msgid "Expiration Date" msgstr "Datum zániku" #: ../lib/GUI.pm:2692 #, fuzzy msgid "Revocation Date" msgstr "Datum odvolání" #: ../lib/GUI.pm:2693 #, fuzzy msgid "Revocation Reason" msgstr "Důvod odvolání:" #: ../lib/GUI.pm:2719 ../lib/OpenSSL.pm:705 msgid "EXPIRED" msgstr "ZANIKLÝ" #: ../lib/GUI.pm:2721 ../lib/OpenSSL.pm:718 msgid "REVOKED" msgstr "ODVOLANÝ" #: ../lib/GUI.pm:2741 msgid "CA History" msgstr "Historie CA" #: ../lib/GUI.pm:2775 msgid "Overwrite Certificate" msgstr "Přepsat certifikát" #: ../lib/GUI.pm:2781 #, fuzzy msgid "There seems to be a certificate with the same Subject already." msgstr "Zdá se, že již existuje certifikát se stejným subjectem." #: ../lib/GUI.pm:2786 msgid "" "Creating a new one (overwrite) will fail if it's not revoked or expired!" msgstr "Vytvoření nového (přepsání) selže, pokud není odvolán nebo nezaniknul!" #: ../lib/GUI.pm:2792 msgid "Really try to overwrite the Certificate?" msgstr "Opravdu chcete zkusit přepsat certifikát?" #: ../lib/GUI.pm:2825 msgid "Convert CA" msgstr "Konvertovat CA" #: ../lib/GUI.pm:2833 msgid "" "This CA seems to be created with openssl 0.9.6x. And it seems like you have " "switched to openssl 0.9.7x." msgstr "" "Zdá se, že tato CA byla vytvořena pomocí openssl 0.9.6x. A zdá se, že jste " "změnil openssl na verzi 0.9.7x." #: ../lib/GUI.pm:2841 msgid "" "You won't be able to revoke the existing certificates without converting the " "index file of this CA to the new format." msgstr "" "Nebude možné odvolat existující certifikáty bez zkonvertování indexového " "souboru této CA na nový formát." #: ../lib/GUI.pm:2849 msgid "" "Attention: it will not be easy to switch back, this has to be done manually" msgstr "" "Pozor: nebude snadné vrátit se zpět, bude to muset být provedeno manuálně" #: ../lib/GUI.pm:2875 msgid "Delete Key" msgstr "Odstranit klíč" #: ../lib/GUI.pm:2904 msgid "View Certificate" msgstr "Zobrazit certifikát" #: ../lib/GUI.pm:2925 #, fuzzy msgid "Renew Certificate" msgstr "Obnovit certifikát" #: ../lib/GUI.pm:2933 msgid "Delete Certificate" msgstr "Odstranit certifikát" #: ../lib/GUI.pm:2956 msgid "Create Key and Certificate (Server)" msgstr "Vytvořit klíč a certifikát (Server)" #: ../lib/GUI.pm:2962 msgid "Create Key and Certificate (Client)" msgstr "Vytvořit klíč a certifikát (Klient)" #: ../lib/GUI.pm:2983 #, fuzzy msgid "Renew Certificate (Server)" msgstr "Obnovit certifikát (Server)" #: ../lib/GUI.pm:2990 #, fuzzy msgid "Renew Certificate (Client)" msgstr "Obnovit certifikát (Klient)" #: ../lib/GUI.pm:3012 msgid "Sign Request (Server)" msgstr "Podepsat žádost (Server)" #: ../lib/GUI.pm:3019 msgid "Sign Request (Client)" msgstr "Podepsat žádost (Klient)" #: ../lib/GUI.pm:3047 msgid "View Request" msgstr "Zobrazit žádost" #: ../lib/GUI.pm:3054 msgid "New Request" msgstr "Nová žádost" #: ../lib/GUI.pm:3076 msgid "Delete Request" msgstr "Odstranit žádost" #: ../lib/HELPERS.pm:207 #, c-format msgid "Can't write exportdir: %s, %s" msgstr "Nelze zapsat exportdir: %s, %s" #: ../lib/KEY.pm:45 ../lib/KEY.pm:137 msgid "Please select a Key first" msgstr "Prosím, vyberte nejdříve klíč" #: ../lib/KEY.pm:54 msgid "Key file not found:" msgstr "Soubor klíče nebyl nalezen:" #: ../lib/KEY.pm:101 msgid "Can't open key directory" msgstr "Nelze otevřít adresář klíčů" #: ../lib/KEY.pm:194 msgid "" "Wrong password given\n" "Decrypting of the Key failed\n" "Export is not possible" msgstr "" "Zadáno nesprávné heslo\n" "Dekódování klíče selhalo\n" "Není možné exportovat" #: ../lib/KEY.pm:199 msgid "Converting failed, Export not possible" msgstr "Konverze selhala, není možné exportovat" #: ../lib/KEY.pm:206 ../lib/KEY.pm:410 #, c-format msgid "Can't open Key file: %s: %s" msgstr "Nelze otevřít soubor klíče: %s: %s" #: ../lib/KEY.pm:239 #, c-format msgid "Key succesfully exported to %s" msgstr "Klíč úspěšně exportován do %s" #: ../lib/KEY.pm:255 msgid "Certificate is necessary for export as PKCS#12" msgstr "Certifikát je vyžadován pro export jako PKCS#12" #: ../lib/KEY.pm:305 #, fuzzy, c-format msgid "Certificate is necessary for export as %s file" msgstr "Certifikát je vyžadován pro export jako %s soubor" #: ../lib/KEY.pm:330 msgid "Can't read Key file" msgstr "Nelze číst soubor s klíčem" #: ../lib/KEY.pm:392 #, c-format msgid "Invalid format for export requested: %s" msgstr "Požadován neplatný formát pro export: %s" #: ../lib/KEY.pm:398 msgid "Something Failed ??" msgstr "Něco selhalo ??" #: ../lib/KEY.pm:448 #, c-format msgid "" "Can't open Key file:\n" "%s" msgstr "" "Nelze otevřít soubor klíče:\n" "%s" #: ../lib/KEY.pm:485 msgid "The password for your old CA Key is wrong" msgstr "Heslo pro Váš starý klíč CA je špatné" #: ../lib/OpenSSL.pm:73 msgid "Creating DSA key in progress..." msgstr "Probíhá tvorba DSA klíče..." #: ../lib/OpenSSL.pm:107 msgid "Creating RSA key in progress..." msgstr "Probíhá tvorba RSA klíče..." #: ../lib/OpenSSL.pm:456 #, c-format msgid "Can't open CRL '%s': %s" msgstr "Nelze otevřít CRL '%s': %s" #: ../lib/OpenSSL.pm:471 ../lib/OpenSSL.pm:484 msgid "Error converting CRL" msgstr "Chyba konverze CRL" #: ../lib/OpenSSL.pm:582 ../lib/OpenSSL.pm:595 msgid "Error converting Certificate" msgstr "Chyba konverze certifikátu" #: ../lib/OpenSSL.pm:655 ../lib/OpenSSL.pm:672 msgid "Error reading fingerprint from Certificate" msgstr "Chyba čtení fingerprintu z certifikátu" #: ../lib/OpenSSL.pm:690 msgid "Error reading subject from Certificate" msgstr "Chyba čtení subjektu z certifikátu" #: ../lib/OpenSSL.pm:700 msgid "Can't read CRL" msgstr "Nelze číst CRL" #: ../lib/OpenSSL.pm:723 msgid "UNDEFINED" msgstr "NEDEFINOVANÝ" #: ../lib/OpenSSL.pm:750 #, c-format msgid "Can't open Request file %s: %s" msgstr "Nelze otevřít soubor s žádostí %s: %s" #: ../lib/OpenSSL.pm:767 ../lib/OpenSSL.pm:781 ../lib/REQ.pm:685 msgid "Error converting Request" msgstr "Chyba při konverzi žádosti" #: ../lib/OpenSSL.pm:863 #, c-format msgid "Can't open file %s: %s" msgstr "Nelze otevřít soubor %s: %s" #: ../lib/OpenSSL.pm:981 ../lib/OpenSSL.pm:1013 #, c-format msgid "Can't read index %s: %s" msgstr "Nelze číst index %s: %s" #: ../lib/OpenSSL.pm:1023 #, c-format msgid "Can't write index %s: %s" msgstr "Nelze zapsat index %s: %s" #: ../lib/REQ.pm:58 #, c-format msgid "Strange value for 'opts': %s" msgstr "Zvláštní hodnota pro 'opts': %s" #: ../lib/REQ.pm:101 msgid "Please specify at least Common Name " msgstr "Prosím, zadejte alespoň obecné jméno " #: ../lib/REQ.pm:102 msgid "and Password" msgstr "a heslo" #: ../lib/REQ.pm:246 ../lib/REQ.pm:376 msgid "Request file not found" msgstr "Nebyl nalezen soubor žádosti" #: ../lib/REQ.pm:299 msgid "Can't open Request directory" msgstr "Nelze otevřít adresář žádostí" #: ../lib/REQ.pm:320 #, c-format msgid " Read Request: %s" msgstr " Čtení žádosti: %s" #: ../lib/REQ.pm:414 #, fuzzy msgid "Can't read Request file" msgstr "Nelze číst soubor žádosti:" #: ../lib/REQ.pm:458 msgid "Can't read serial" msgstr "Nelze číst sériové číslo" #: ../lib/REQ.pm:531 msgid "" "Wrong CA password given\n" "Signing of the Request failed" msgstr "" "Zadáno nesprávné heslo CA\n" "Podepsání žádosti selhalo" #: ../lib/REQ.pm:537 msgid "" "CA Key not found\n" "Signing of the Request failed" msgstr "" "Klíč CA nebyl nalezen\n" "Podepsání žádosti selhalo" #: ../lib/REQ.pm:543 msgid "" "Certificate already existing\n" "Signing of the Request failed" msgstr "" "Certifikát již existuje\n" "Podepsání žádosti selhalo" #: ../lib/REQ.pm:549 msgid "" "Invalid IP Address given\n" "Signing of the Request failed" msgstr "" "Byla zadána neplatná IP adresa\n" "Podepsání žádosti selhalo" #: ../lib/REQ.pm:556 ../lib/REQ.pm:574 msgid "Signing of the Request failed" msgstr "Podepsání žádosti selhalo" #: ../lib/REQ.pm:581 msgid "Can't read Certificate file" msgstr "Nelze číst soubor certifikátu" #: ../lib/REQ.pm:587 ../lib/REQ.pm:597 msgid "Can't write Certificate file" msgstr "Nelze zapsat soubor certifikátu" #: ../lib/REQ.pm:609 msgid "" "Request signed succesfully.\n" "Certificate created" msgstr "" "Žádost úspěšně podepsána.\n" "Certifikát vytvořen" #: ../lib/REQ.pm:650 msgid "Please select a Request file first" msgstr "Prosím, vyberte nejdříve soubor žádosti" #: ../lib/REQ.pm:656 msgid "Can't find Request file: " msgstr "Nelze najít soubor žádosti: " #: ../lib/REQ.pm:662 msgid "Can't read Request file:" msgstr "Nelze číst soubor žádosti:" #: ../lib/REQ.pm:708 msgid "Parsing Request failed" msgstr "Zpracování žádosti selhalo" #: ../lib/TCONFIG.pm:42 msgid "Please select a CA first" msgstr "Prosím, vyberte nejdříve CA" #: ../lib/TCONFIG.pm:49 msgid "Can't open configuration" msgstr "Nelze otevřít konfiguraci" #: ../lib/TCONFIG.pm:284 ../lib/TCONFIG.pm:299 ../lib/GUI/TCONFIG.pm:47 #: ../lib/GUI/TCONFIG.pm:1302 msgid "Can't get CA name" msgstr "Nelze získat jméno CA" #: ../lib/TCONFIG.pm:327 msgid "Can't open configfile" msgstr "Nelze otevřít configfile" #: ../lib/GUI/HELPERS.pm:54 ../lib/GUI/HELPERS.pm:94 ../lib/GUI/HELPERS.pm:135 #, fuzzy msgid "Command Details" msgstr "Detaily příkazu" #: ../lib/GUI/HELPERS.pm:305 msgid "Request Files (*.pem, *.der, *.req)" msgstr "Soubory žádosti (*.pem, *.der, *.req)" #: ../lib/GUI/HELPERS.pm:312 msgid "All Files (*.*)" msgstr "Všechny soubory (*.*)" #: ../lib/GUI/TCONFIG.pm:74 msgid "" "All Settings are written unchanged to openssl.conf.\n" "So please study the documentation of OpenSSL if you don't know exactly what " "to do.\n" "If you are still unsure - keep the defaults and everything is expected to " "work fine." msgstr "" "Všechna nastavení jsou zapsána beze změny do openssl.conf.\n" "Prosím, pročtěte si dokumentaci k OpenSSL, pokud nevíte přesně, co máte " "dělat.\n" "Pokud si stále nejste jisti, nechte výchozí nastavení a všechny by mělo " "fungovat správně." #: ../lib/GUI/TCONFIG.pm:108 ../lib/GUI/TCONFIG.pm:116 msgid "OpenSSL Configuration" msgstr "Konfigurace OpenSSL" #: ../lib/GUI/TCONFIG.pm:129 msgid "Only change these options, if you really know, what you are doing!!" msgstr "Tato nastavení měňte pouze v případě, že víte, co děláte!!" #: ../lib/GUI/TCONFIG.pm:137 msgid "You should be aware, that some options may break some crappy software!!" msgstr "" "Mějte na paměti, že některá nastavení mohou narušit některý špatný software!!" #: ../lib/GUI/TCONFIG.pm:146 ../lib/GUI/TCONFIG.pm:1348 msgid "If you are unsure: leave the defaults untouched" msgstr "Pokud jste nejistý: nechte výchozí hodnoty nezměněny" #: ../lib/GUI/TCONFIG.pm:182 msgid "These Settings are passed to OpenSSL for creating Server Certificates" msgstr "Tato nastavení jsou předána OpenSSL pro vytváření certifikátů serveru" #: ../lib/GUI/TCONFIG.pm:187 ../lib/GUI/TCONFIG.pm:612 #: ../lib/GUI/TCONFIG.pm:1019 ../lib/GUI/TCONFIG.pm:1239 #: ../lib/GUI/TCONFIG.pm:1340 msgid "Multiple Values can be separated by \",\"" msgstr "Více hodnot může být odděleno \",\"" #: ../lib/GUI/TCONFIG.pm:207 ../lib/GUI/TCONFIG.pm:209 msgid "Server Certificate Settings" msgstr "Nastavení certifikátu serveru" #: ../lib/GUI/TCONFIG.pm:215 ../lib/GUI/TCONFIG.pm:638 #: ../lib/GUI/TCONFIG.pm:1047 ../lib/GUI/TCONFIG.pm:1462 msgid "Subject alternative name (subjectAltName):" msgstr "Alternativní jméno subjektu (subjectAltName):" #: ../lib/GUI/TCONFIG.pm:312 ../lib/GUI/TCONFIG.pm:744 #: ../lib/GUI/TCONFIG.pm:1107 ../lib/GUI/TCONFIG.pm:1358 msgid "Key Usage (keyUsage):" msgstr "Užití klíče (keyUsage):" #: ../lib/GUI/TCONFIG.pm:391 ../lib/GUI/TCONFIG.pm:819 msgid "Extended Key Usage (extendedKeyUsage):" msgstr "Rozšíření užití klíče (extendedKeyUsage):" #: ../lib/GUI/TCONFIG.pm:467 ../lib/GUI/TCONFIG.pm:894 #: ../lib/GUI/TCONFIG.pm:1076 ../lib/GUI/TCONFIG.pm:1431 msgid "Netscape Certificate Type (nsCertType):" msgstr "Netscape typ certifikátu (nsCertType):" #: ../lib/GUI/TCONFIG.pm:496 msgid "Netscape SSL Server Name (nsSslServerName):" msgstr "Netscape jméno SSL serveru (nsSslServerName):" #: ../lib/GUI/TCONFIG.pm:521 ../lib/GUI/TCONFIG.pm:924 #: ../lib/GUI/TCONFIG.pm:1182 msgid "Netscape Revocation URL (nsRevocationUrl):" msgstr "Netscape URL odvolaných (nsRevocationUrl):" #: ../lib/GUI/TCONFIG.pm:546 ../lib/GUI/TCONFIG.pm:948 msgid "Netscape Renewal URL (nsRenewalUrl):" msgstr "Netscape URL obnovení (nsRenewalUrl):" #: ../lib/GUI/TCONFIG.pm:607 msgid "These Settings are passed to OpenSSL for creating Client Certificates" msgstr "Tato nastavení jsou předána OpenSSL pro vytváření certifikátů klienta" #: ../lib/GUI/TCONFIG.pm:632 msgid "Client Certificate Settings" msgstr "Nastavení certifikátu klienta" #: ../lib/GUI/TCONFIG.pm:1014 msgid "These Settings are passed to OpenSSL for creating CA Certificates" msgstr "Tato nastavení jsou předána OpenSSL pro vytváření certifikátů CA" #: ../lib/GUI/TCONFIG.pm:1039 ../lib/GUI/TCONFIG.pm:1041 msgid "CA Certificate Settings" msgstr "Nastavení certifikátu CA" #: ../lib/GUI/TCONFIG.pm:1234 msgid "" "These Settings are passed to OpenSSL for creating Certificate Revocation " "Lists" msgstr "" "Tato nastavení jsou předána OpenSSL pro vytváření seznamů odvolaných " "certifikátů" #: ../lib/GUI/TCONFIG.pm:1260 msgid "Revocation List Settings" msgstr "Nastavení seznamu odvolaných" #: ../lib/GUI/TCONFIG.pm:1322 msgid "CA Configuration" msgstr "Nastavení CA" #: ../lib/GUI/TCONFIG.pm:1330 msgid "These Settings are passed to OpenSSL for creating this CA Certificate" msgstr "Tato nastavení jsou předána OpenSSL pro vytvoření certifikátu této CA" #: ../lib/GUI/TCONFIG.pm:1335 msgid "and the CA Certificates of every SubCA, created with this CA." msgstr "a CA certifikátů každé podřízené CA, vytvořených touto CA." #: ../lib/GUI/WORDS.pm:26 ../lib/GUI/WORDS.pm:73 msgid "Not set" msgstr "Není nastaveno" #: ../lib/GUI/WORDS.pm:27 ../lib/GUI/WORDS.pm:74 msgid "Ask User" msgstr "Dotazovat uživatele" #: ../lib/GUI/WORDS.pm:28 ../lib/GUI/WORDS.pm:75 msgid "critical" msgstr "kritické" #: ../lib/GUI/WORDS.pm:29 ../lib/GUI/WORDS.pm:76 msgid "not critical" msgstr "není kritické" #: ../lib/GUI/WORDS.pm:30 ../lib/GUI/WORDS.pm:77 msgid "Copy Email" msgstr "Zkopírovat Email" #: ../lib/GUI/WORDS.pm:31 ../lib/GUI/WORDS.pm:78 msgid "raw" msgstr "raw" #: ../lib/GUI/WORDS.pm:32 ../lib/GUI/WORDS.pm:79 msgid "DNS Name" msgstr "DNS jméno" #: ../lib/GUI/WORDS.pm:33 ../lib/GUI/WORDS.pm:81 msgid "IP Address" msgstr "IP adresa" #: ../lib/GUI/WORDS.pm:34 ../lib/GUI/WORDS.pm:80 msgid "Email" msgstr "Email" #: ../lib/GUI/WORDS.pm:35 ../lib/GUI/WORDS.pm:82 msgid "SSL Server" msgstr "SSL server" #: ../lib/GUI/WORDS.pm:36 ../lib/GUI/WORDS.pm:83 msgid "SSL Server, SSL Client" msgstr "SSL server, SSL klient" #: ../lib/GUI/WORDS.pm:37 ../lib/GUI/WORDS.pm:84 msgid "Key Encipherment" msgstr "Šifrování klíčem" #: ../lib/GUI/WORDS.pm:38 ../lib/GUI/WORDS.pm:85 msgid "Digital Signature" msgstr "Digitální podpis" #: ../lib/GUI/WORDS.pm:39 ../lib/GUI/WORDS.pm:86 msgid "Key Encipherment, Digital Signature" msgstr "Šifrování klíčem, Digitální podpis" #: ../lib/GUI/WORDS.pm:40 ../lib/GUI/WORDS.pm:87 msgid "Object Signing" msgstr "Podepisování objektů" #: ../lib/GUI/WORDS.pm:41 ../lib/GUI/WORDS.pm:91 msgid "SSL Client, Object Signing" msgstr "SSL klient, Podepisování objektů" #: ../lib/GUI/WORDS.pm:42 ../lib/GUI/WORDS.pm:89 msgid "SSL Client, Email(S/MIME)" msgstr "SSL klient, Email(S/MIME)" #: ../lib/GUI/WORDS.pm:43 ../lib/GUI/WORDS.pm:90 msgid "SSL Client" msgstr "SSL klient" #: ../lib/GUI/WORDS.pm:44 ../lib/GUI/WORDS.pm:88 msgid "Email(S/MIME)" msgstr "Email(S/MIME)" #: ../lib/GUI/WORDS.pm:45 ../lib/GUI/WORDS.pm:92 msgid "SSL Client, Email, Object Signing" msgstr "SSL klient, Email, Podepisování objektů" #: ../lib/GUI/WORDS.pm:46 ../lib/GUI/WORDS.pm:93 msgid "Object Signing CA" msgstr "Podepisování objektů CA" #: ../lib/GUI/WORDS.pm:47 ../lib/GUI/WORDS.pm:94 msgid "S/MIME CA" msgstr "S/MIME CA" #: ../lib/GUI/WORDS.pm:48 ../lib/GUI/WORDS.pm:95 msgid "SSL CA" msgstr "SSL CA" #: ../lib/GUI/WORDS.pm:49 ../lib/GUI/WORDS.pm:96 msgid "SSL CA, S/MIME CA" msgstr "SSL CA, S/MIME CA" #: ../lib/GUI/WORDS.pm:50 ../lib/GUI/WORDS.pm:97 msgid "SSL CA, Object Signing CA" msgstr "SSL CA, Podepisování objektů CA" #: ../lib/GUI/WORDS.pm:51 ../lib/GUI/WORDS.pm:98 msgid "S/MIME CA, Object Signing CA" msgstr "S/MIME CA, Podepisování objektů CA" #: ../lib/GUI/WORDS.pm:52 ../lib/GUI/WORDS.pm:99 msgid "SSL CA, S/MIME CA, Object Signing CA" msgstr "SSL CA, S/MIME CA, Podepisování objektů CA" #: ../lib/GUI/WORDS.pm:53 ../lib/GUI/WORDS.pm:100 msgid "Certificate Signing" msgstr "Podepisování certifikátů" #: ../lib/GUI/WORDS.pm:54 ../lib/GUI/WORDS.pm:101 msgid "CRL Signing" msgstr "Podepisování CRL" #: ../lib/GUI/WORDS.pm:55 ../lib/GUI/WORDS.pm:102 msgid "Certificate Signing, CRL Signing" msgstr "Podepisování certifikátů, Podepisování CRL" #: ../lib/GUI/WORDS.pm:63 msgid "Creation Date" msgstr "Datum vytvoření" #: ../lib/GUI/WORDS.pm:66 msgid "Public Key Algorithm" msgstr "Algoritmus veřejného klíče" #: ../lib/GUI/WORDS.pm:67 msgid "Signature Algorithm" msgstr "Algoritmus podpisu" #: ../lib/GUI/WORDS.pm:71 ../lib/GUI/X509_infobox.pm:80 msgid "Fingerprint (MD5)" msgstr "Fingerprint (MD5)" #: ../lib/GUI/WORDS.pm:72 ../lib/GUI/X509_infobox.pm:89 msgid "Fingerprint (SHA1)" msgstr "Fingerprint (SHA1)" #: ../lib/GUI/X509_browser.pm:448 msgid "Certificate Information" msgstr "Informace certifikátu" #: ../lib/GUI/X509_browser.pm:452 msgid "Request Information" msgstr "Informace žádosti" #: ../lib/GUI/X509_browser.pm:571 #, fuzzy msgid "Invalid browser mode for selection_fname():" msgstr "Neplatný mód prohlížeče pro selection_fname():" #: ../lib/GUI/X509_browser.pm:571 ../lib/GUI/X509_browser.pm:607 #: ../lib/GUI/X509_browser.pm:656 ../lib/GUI/X509_browser.pm:677 #: ../lib/GUI/X509_browser.pm:698 ../lib/GUI/X509_browser.pm:725 msgid " " msgstr " " #: ../lib/GUI/X509_browser.pm:607 msgid "Invalid browser mode for selection_dn():" msgstr "Neplatný mód prohlížeče pro selection_dn():" #: ../lib/GUI/X509_browser.pm:656 ../lib/GUI/X509_browser.pm:677 msgid "Invalid browser mode for selection_cn():" msgstr "Neplatný mód prohlížeče pro selection_cn():" #: ../lib/GUI/X509_browser.pm:698 msgid "Invalid browser mode for selection_status():" msgstr "Neplatný mód prohlížeče pro selection_status():" #: ../lib/GUI/X509_browser.pm:725 #, fuzzy msgid "Invalid browser mode for selection_type():" msgstr "Neplatný mód prohlížeče pro selection_dn():" #: ../tinyca2:63 #, c-format msgid "Can't execute %s.\n" msgstr "Nelze spustit %s.\n" #: ../tinyca2:64 msgid "Configure correct path to openssl in tinyca.\n" msgstr "Nastavte v tinyca správnou cestu k openssl.\n" #: ../tinyca2:69 msgid "zip command not found, support disabled.\n" msgstr "Příkaz zip nenalezen, podpora vypnuta.\n" #: ../tinyca2:70 msgid "Configure correct path to zip in tinyca.\n" msgstr "Nastavte v tinyca správnou cestu k zipu.\n" #: ../tinyca2:74 #, fuzzy msgid "tar command not found, support disabled.\n" msgstr "Příkaz tar nenalezen, podpora vypnuta.\n" #: ../tinyca2:75 #, fuzzy msgid "Configure correct path to tar in tinyca.\n" msgstr "Nastavte v tinyca správnou cestu k taru.\n" #: ../tinyca2:82 msgid "Can't find templatedir.\n" msgstr "Nelze najít templatedir.\n" #: ../tinyca2:83 msgid "Please configure correct path with templates in tinyca.\n" msgstr "Prosím, nastavte v tinyca správnou cestu k šablonám.\n" #~ msgid "Can't export PKCS#12 without passphrase" #~ msgstr "Nelze exportovat do PKCS#12 bez fráze" tinyca2-0.7.5/po/es.po0000644000175000017500000014676310461475420016155 0ustar schollerscholler00000000000000# translation of es.po to spanish # This file is distributed under the same license as the tinyca package. # Copyright (C) 2004 Ramn Pons Vivanco # msgid "" msgstr "" "Project-Id-Version: es\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-07-13 23:47+0200\n" "PO-Revision-Date: 2004-11-10 18:15+0100\n" "Last-Translator: Ramn Pons Vivanco \n" "Language-Team: spanish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: emacs21\n" #: ../lib/CA.pm:44 msgid "error: can't open basedir: " msgstr "error: no se puede abrir el directorio base: " #: ../lib/CA.pm:102 msgid " Opening CA: " msgstr " Abriendo CA: " #: ../lib/CA.pm:109 ../lib/CA.pm:270 msgid "Invalid CA selected" msgstr "CA seleccionada no vlida" #: ../lib/CA.pm:154 msgid " Initializing OpenSSL" msgstr " Inicializando OpenSSL" #: ../lib/CA.pm:160 msgid " Check for CA Version" msgstr " Comprobar versin de la CA" #: ../lib/CA.pm:167 ../lib/CA.pm:195 msgid "Can't open index file: " msgstr "No se puede abir el ndice: " #: ../lib/CA.pm:182 msgid " Convert CA" msgstr " Convertir CA" #: ../lib/CA.pm:201 msgid "Can't open index backup: " msgstr "No se puede abir la copia de seguridad del ndice: " #: ../lib/CA.pm:218 msgid "This CA is converted for openssl 0.9.7x now." msgstr "Esta CA se convertir a openssl 0.9.7x ahora." #: ../lib/CA.pm:220 msgid "You will find a backup copy of the index file at: " msgstr "Encontrar una copia de seguridad del ndice en: " #: ../lib/CA.pm:229 msgid " Read Configuration" msgstr " Leer Configuracin" #: ../lib/CA.pm:235 msgid " Create GUI" msgstr " Crear GUI" #: ../lib/CA.pm:241 msgid " Create Toolbar" msgstr " Crear barra de herramientas" #: ../lib/CA.pm:247 msgid " Actual CA: " msgstr " CA actual: " #: ../lib/CA.pm:332 #, c-format msgid "CA: %s deleted" msgstr "CA: %s eliminada" #: ../lib/CA.pm:386 msgid "Password of parent CA is needed for creating a Sub CA" msgstr "Se necesita el password de la CA padre para crear una Sub CA" #: ../lib/CA.pm:395 msgid "Name must be filled in and must" msgstr "El nombre debe ser rellenado obligatoriamente" #: ../lib/CA.pm:396 msgid " not contain Spaces" msgstr " no debe contener Espacios" #: ../lib/CA.pm:408 msgid "Please specify at least Common Name, " msgstr "Por favor introduzca por lo menos el Nombre Comn, " #: ../lib/CA.pm:409 msgid "Country and Password" msgstr "Pas y Password" #: ../lib/CA.pm:416 ../lib/REQ.pm:109 msgid "Passwords don't match" msgstr "Los Passwords no coinciden" #: ../lib/CA.pm:424 ../lib/REQ.pm:120 msgid "Country must be exact 2 letter code" msgstr "El Pas debe tener un cdigo exactamente de 2 letras" #: ../lib/CA.pm:428 #, c-format msgid "CA: %s already exists" msgstr "Ya existe la CA: %s" #: ../lib/CA.pm:468 msgid "Name for storage must be filled in and must not contain spaces" msgstr "" "El nombre debe ser rellenado obligatoriamente y no debe contener espacios" #: ../lib/CA.pm:477 msgid "You didn't give a password for the private CA key." msgstr "No ha introducido password para la Clave privada." #: ../lib/CA.pm:479 msgid "The import will fail, if the key is encrypted." msgstr "La importacin fallar si la clave est cifrada." #: ../lib/CA.pm:488 msgid "Please give a new password for the CA" msgstr "Por favor introduzca el password de la CA" #: ../lib/CA.pm:495 msgid "New passwords don't match" msgstr "Los passwords nuevos no coinciden" #: ../lib/CA.pm:503 msgid "Please give a CA certificate to import" msgstr "Por favor seleccione un Certificado para importar" #: ../lib/CA.pm:508 #, c-format msgid "" "Can't read CA certificate file:\n" "%s" msgstr "" "No se puede leer el fichero del Certificado de la CA:\n" "%s" #: ../lib/CA.pm:518 msgid "Please give a CA keyfile to import" msgstr "Por favor seleccione un fichero con la Clave de la CA para importar" #: ../lib/CA.pm:523 #, c-format msgid "" "Can't read CA key file:\n" "%s" msgstr "" "No se puede leer el fichero con la Clave de la CA:\n" "%s" #: ../lib/CA.pm:535 msgid "Please give an Index file to import.\n" msgstr "Por favor introduzca el fichero ndice a importar.\n" #: ../lib/CA.pm:536 msgid "If you don't have an Index file, i'll try to generate one.\n" msgstr "Si no existe un fichero ndice se generar uno.\n" #: ../lib/CA.pm:537 msgid "Attention: This will cause all Certificates to show up as valid.\n" msgstr "" "Atencin: esto causar que todos los Certificados se muestren como vlidos.\n" #: ../lib/CA.pm:538 msgid "Attention: Revoked Certificates will not be determined." msgstr "Atencin: los Certificados revocados no se determinaran." #: ../lib/CA.pm:549 #, c-format msgid "" "Can't read Index file:\n" "%s" msgstr "" "No se puede leer el ndice:\n" "%s" #: ../lib/CA.pm:562 msgid "Please give a directory containing the certificates to import" msgstr "" "Por favor, seleccione un directorio que contenga los Certificados a importar" #: ../lib/CA.pm:567 #, c-format msgid "" "Can't find certificate directory:\n" "%s" msgstr "" "No se puede encontrar el directorio del Certificado:\n" "%s" #: ../lib/CA.pm:578 #, c-format msgid "CA: %s already exists. Please choose another name" msgstr "Ya existe la CA: %s. Por favor elija otro nombre" #: ../lib/CA.pm:594 msgid "Can't find X509v3 Basic Constraints in CA Certificate\n" msgstr "" "No se pueden encontrar las restricciones bsicas X509v3 en el Certificado de " "la CA\n" #: ../lib/CA.pm:595 msgid "Import canceled" msgstr "Importacin abortada" #: ../lib/CA.pm:601 msgid "The selected CA Certificate is no valid CA certificate\n" msgstr "" "Los Certificados de la CA seleccionados no son Certificados de CA vlidos\n" #: ../lib/CA.pm:602 #, c-format msgid "X509v3 Basic Constraint is set to: %s" msgstr "La restriccin bsica X509v3 vale: %s" #: ../lib/CA.pm:612 #, c-format msgid "" "Can't open Index file:\n" "%s" msgstr "" "No se puede abir el fichero ndice:\n" "%s" #: ../lib/CA.pm:665 ../lib/CERT.pm:61 #, c-format msgid "Can't open Certificate directory: %s" msgstr "No se puede abrir el directorio con los Certificados: %s" #: ../lib/CA.pm:684 ../lib/CERT.pm:84 #, c-format msgid " Read Certificate: %s" msgstr " Leer Certificado: %s" #: ../lib/CA.pm:694 #, c-format msgid "Can't read Certificate file: %s" msgstr "No se puede leer el fichero del Certificado: %s" #: ../lib/CA.pm:718 #, c-format msgid "Can't write Certificate file: %s" msgstr "No se puede escribir el fichero del Certificado: %s" #: ../lib/CA.pm:768 ../lib/CA.pm:927 msgid "Can't open Index file: " msgstr "No se puede abrir el fichero ndice: " #: ../lib/CA.pm:780 #, c-format msgid "Can't write CA Certificate file: %s" msgstr "No se puede escribir el fichero del Certificado: %s" #: ../lib/CA.pm:800 ../lib/CA.pm:934 msgid "Can't write Serial file: " msgstr "No se puede escribir el nmero de serie: " #: ../lib/CA.pm:814 #, c-format msgid "Can't write CA Key file: %s" msgstr "No se puede escribir la Clave de la CA: %s" #: ../lib/CA.pm:831 ../lib/CA.pm:1155 msgid "Generating CRL failed" msgstr "Fall la generacin de CRL" #: ../lib/CA.pm:844 #, c-format msgid "Succesfully imported %d certificates\n" msgstr "Certificados %d importados correctamente\n" #: ../lib/CA.pm:845 msgid "Check the configuration of your imported CA." msgstr "Compruebe la configuracin de la CA importada." #: ../lib/CA.pm:862 ../lib/CA.pm:971 msgid "No CA name given" msgstr "Nombre de la CA no introducido" #: ../lib/CA.pm:871 ../lib/CA.pm:876 ../lib/CA.pm:881 ../lib/CA.pm:886 #: ../lib/CA.pm:891 ../lib/CA.pm:896 msgid "Can't create directory: " msgstr "No se puede crear el directorio: " #: ../lib/CA.pm:905 #, c-format msgid "Can't open template file %s %s" msgstr "No se puede abrir la plantilla %s: %s" #: ../lib/CA.pm:910 ../lib/CA.pm:1207 ../lib/CA.pm:1274 ../lib/CERT.pm:637 #: ../lib/KEY.pm:227 ../lib/REQ.pm:740 #, c-format msgid "Can't open output file: %s: %s" msgstr "No se puede abrir el fichero de salida %s: %s" #: ../lib/CA.pm:984 ../lib/KEY.pm:482 ../lib/REQ.pm:167 msgid "Generating key failed" msgstr "Fall la generacin de clave" #: ../lib/CA.pm:1018 ../lib/REQ.pm:193 msgid "Generating Request failed" msgstr "Fall la generacin de Peticin" #: ../lib/CA.pm:1027 ../lib/CA.pm:1041 ../lib/CERT.pm:102 msgid "Can't read Certificate" msgstr "No se puede leer el Certificado" #: ../lib/CA.pm:1032 ../lib/CA.pm:1046 msgid "Can't write Certificate" msgstr "No se puede escribir el Certificado" #: ../lib/CA.pm:1086 msgid "Generating certificate failed" msgstr "Fall la generacin del Certificado" #: ../lib/CA.pm:1106 ../lib/CA.pm:1131 #, c-format msgid "Can't open ca certificate file %s %s" msgstr "No se puede abrir el fichero del Certificado de la CA %s %s" #: ../lib/CA.pm:1115 #, c-format msgid "Can't create certificate chain file: %s: %s" msgstr "No se puede crear el fichero con la Cadena de Certificados: %s: %s" #: ../lib/CA.pm:1164 #, c-format msgid "CA: %s created" msgstr "CA: %s creada" #: ../lib/CA.pm:1199 #, c-format msgid "Can't open certificate chain file: %s: %s" msgstr "No se puede abrir el fichero con la cadena de Certificados: %s: %s" #: ../lib/CA.pm:1220 #, c-format msgid "Certificate Chain succesfully exported to: %s" msgstr "Cadena de Certificados exportada correctamente a: %s " #: ../lib/CA.pm:1255 ../lib/CERT.pm:580 ../lib/GUI.pm:166 ../lib/KEY.pm:348 #: ../lib/REQ.pm:71 ../lib/REQ.pm:389 msgid "Can't read CA certificate" msgstr "No se puede leer el Certificado de la CA" #: ../lib/CA.pm:1265 #, c-format msgid "Invalid Format for export_ca_cert(): %s" msgstr "Formato erroneo para export_ca_cert(): %s" #: ../lib/CA.pm:1287 #, c-format msgid "Certificate succesfully exported to: %s" msgstr "Certificado exportado correctamente a: %s" #: ../lib/CA.pm:1320 msgid "Please give the output file" msgstr "Por favor introduzca fichero de salida" #: ../lib/CA.pm:1328 msgid "Please give the CA password to create the Revocation List" msgstr "" "Por favor introduzca el password de la CA para crear la Lista de Revocacin" #: ../lib/CA.pm:1349 msgid "" "Wrong CA password given\n" "Generating Revocation List failed" msgstr "" "Password de la CA introducido incorrecto\n" "Fall la generacin de la Lista de Revocacin" #: ../lib/CA.pm:1353 msgid "" "CA Key not found\n" "Generating Revocation List failed" msgstr "" "Clave de la CA no encontrada\n" "Fall la generacin de la Lista de Revocacin" #: ../lib/CA.pm:1357 ../lib/CA.pm:1363 msgid "Generating Revocation List failed" msgstr "Fall la generacin de la Lista de Revocacin" #: ../lib/CA.pm:1371 #, c-format msgid "CRL successfully exported to: %s" msgstr "CRL exportada correctamente a: %s" #: ../lib/CERT.pm:143 ../lib/CERT.pm:199 ../lib/CERT.pm:322 ../lib/CERT.pm:381 #: ../lib/GUI.pm:851 msgid "Please select a Certificate first" msgstr "Por favor seleccione un Certificado antes" #: ../lib/CERT.pm:151 ../lib/CERT.pm:209 ../lib/CERT.pm:333 ../lib/CERT.pm:400 #: ../lib/GUI.pm:2706 ../lib/GUI.pm:2717 ../lib/OpenSSL.pm:702 #: ../lib/GUI/X509_browser.pm:276 msgid "VALID" msgstr "VLIDO" #: ../lib/CERT.pm:153 #, c-format msgid "" "Can't renew Certifikate with Status: %s\n" "Please revoke the Certificate first" msgstr "" "No se puede renovar el Certificado con Estado: %s\n" "Por favor revoque el Certificado antes" #: ../lib/CERT.pm:168 msgid "" "Key and Request are necessary for renewal of a Certificate\n" "Renewal is not possible!" msgstr "" "Se necesitan Clave y Peticin para renovar un Certificado\n" "No se puede renovar!" #: ../lib/CERT.pm:210 #, c-format msgid "Can't revoke Certifikate with Status: %s" msgstr "No se puede revocar un Certificado con Estado: %s" #: ../lib/CERT.pm:256 msgid "" "Wrong CA password given\n" "Revoking the Certificate failed" msgstr "" "El password de la CA introducido no es correcto\n" "Fall la revocacin del Certificado" #: ../lib/CERT.pm:263 msgid "" "CA Key not found\n" "Revoking the Certificate failed" msgstr "" "Clave de la CA no encontrada\n" "Fall la revocacin del Certificado" #: ../lib/CERT.pm:270 msgid "Revoking the Certificate failed" msgstr "Fall la revocacin del Certificado" #: ../lib/CERT.pm:290 msgid "Generating a new Revocation List failed" msgstr "Fall la generacin de la Lista de Revocacin" #: ../lib/CERT.pm:335 msgid "" "Can't delete VALID certificate!\n" "Please revoke the Certificate first." msgstr "" "No se puede eliminar un Certificado VLIDO!\n" "Por favor revoque el Certificado antes." #: ../lib/CERT.pm:401 msgid "Certificate seems not to be VALID" msgstr "El Certificado parece no ser VLIDO" #: ../lib/CERT.pm:403 msgid "Export is not possible" msgstr "No se puede exportar" #: ../lib/CERT.pm:430 ../lib/KEY.pm:172 msgid "Please give at least the output file" msgstr "Por favor al menos introduzca el fichero de salida" #: ../lib/CERT.pm:436 msgid "Key is necessary for export as PKCS#12" msgstr "Se necesita la Clave para exportar como PKCS#12" #: ../lib/CERT.pm:438 ../lib/CERT.pm:454 ../lib/KEY.pm:257 ../lib/KEY.pm:308 msgid "Export is not possible!" msgstr "No se puede exportar!" #: ../lib/CERT.pm:452 #, fuzzy, c-format msgid "Key is necessary for export as %s" msgstr "Se necesita la Clave para exportar como Zip" #: ../lib/CERT.pm:492 ../lib/KEY.pm:216 #, fuzzy, c-format msgid "Can't open Certificate file: %s: %s" msgstr "No se puede abrir el fichero del Certificado de la CA %s %s" #: ../lib/CERT.pm:525 ../lib/KEY.pm:288 msgid "Generating PKCS#12 failed" msgstr "Fall la generacin de PKCS#12" #: ../lib/CERT.pm:533 ../lib/CERT.pm:616 ../lib/KEY.pm:295 ../lib/KEY.pm:381 #, c-format msgid "Certificate and Key successfully exported to %s" msgstr "El Certificado y la Clave han sido correctamente exportados a %s" #: ../lib/CERT.pm:546 ../lib/CERT.pm:567 ../lib/REQ.pm:693 #, c-format msgid "Can't create temporary file: %s: %s" msgstr "No se puede crear el fichero temporal: %s: %s" #: ../lib/CERT.pm:558 #, fuzzy, c-format msgid "Can't read Key file: %s: %s" msgstr "No se puede abrir el fichero de Claves: %s: %s" #: ../lib/CERT.pm:588 ../lib/KEY.pm:321 ../lib/KEY.pm:337 ../lib/KEY.pm:355 msgid "Can't create temporary file" msgstr "No se puede crear un fichero temporal" #: ../lib/CERT.pm:609 ../lib/KEY.pm:375 #, fuzzy, c-format msgid "Generating %s file failed" msgstr "Fall la generacin del fichero Zip" #: ../lib/CERT.pm:628 #, c-format msgid "Invalid Format for export_cert(): %s" msgstr "Formato erroneo para export_cert(): %s" #: ../lib/CERT.pm:648 #, c-format msgid "Certificate successfully exported to: %s" msgstr "Certificado correctamente exportado a: %s" #: ../lib/GUI.pm:171 ../lib/GUI.pm:178 msgid "CA" msgstr "CA" #: ../lib/GUI.pm:185 msgid "CA Information" msgstr "Informacin CA" #: ../lib/GUI.pm:204 msgid "Certificates" msgstr "Certificados" #: ../lib/GUI.pm:244 ../lib/GUI.pm:2689 ../lib/GUI/WORDS.pm:56 #: ../lib/GUI/X509_browser.pm:160 ../lib/GUI/X509_browser.pm:168 #: ../lib/GUI/X509_browser.pm:177 msgid "Common Name" msgstr "Nombre Comn" #: ../lib/GUI.pm:245 ../lib/GUI.pm:1273 ../lib/GUI.pm:2314 #: ../lib/GUI/WORDS.pm:57 ../lib/GUI/X509_browser.pm:161 #: ../lib/GUI/X509_browser.pm:169 ../lib/GUI/X509_browser.pm:178 msgid "eMail Address" msgstr "Direccin eMail" #: ../lib/GUI.pm:246 ../lib/GUI/WORDS.pm:59 ../lib/GUI/X509_browser.pm:162 #: ../lib/GUI/X509_browser.pm:170 ../lib/GUI/X509_browser.pm:179 msgid "Organizational Unit" msgstr "Unidad Organizativa" #: ../lib/GUI.pm:247 ../lib/GUI/WORDS.pm:58 ../lib/GUI/X509_browser.pm:163 #: ../lib/GUI/X509_browser.pm:171 ../lib/GUI/X509_browser.pm:180 msgid "Organization" msgstr "Organizacin" #: ../lib/GUI.pm:248 ../lib/GUI/WORDS.pm:60 ../lib/GUI/X509_browser.pm:164 #: ../lib/GUI/X509_browser.pm:172 ../lib/GUI/X509_browser.pm:181 msgid "Location" msgstr "Ubicacin" #: ../lib/GUI.pm:249 ../lib/GUI/WORDS.pm:61 ../lib/GUI/X509_browser.pm:165 #: ../lib/GUI/X509_browser.pm:173 ../lib/GUI/X509_browser.pm:182 msgid "State" msgstr "Provincia" #: ../lib/GUI.pm:250 ../lib/GUI/WORDS.pm:62 ../lib/GUI/X509_browser.pm:166 #: ../lib/GUI/X509_browser.pm:174 ../lib/GUI/X509_browser.pm:183 msgid "Country" msgstr "Pas" #: ../lib/GUI.pm:251 ../lib/GUI/WORDS.pm:68 ../lib/GUI/X509_browser.pm:184 msgid "Type" msgstr "Tipo" #: ../lib/GUI.pm:265 msgid "Keys" msgstr "Claves" #: ../lib/GUI.pm:308 msgid "Requests" msgstr "Peticiones" #: ../lib/GUI.pm:399 #, c-format msgid " Actual CA: %s" msgstr " CA actual: %s" #: ../lib/GUI.pm:402 #, c-format msgid " Actual CA: %s - Certificates" msgstr " CA actual: %s - Certificados" #: ../lib/GUI.pm:405 #, c-format msgid " Actual CA: %s - Keys" msgstr " CA actual : %s - Claves" #: ../lib/GUI.pm:408 #, c-format msgid " Actual CA: %s - Requests" msgstr " CA actual: %s - Peticiones" #: ../lib/GUI.pm:457 ../lib/GUI.pm:1141 msgid "Open CA" msgstr "Abrir CA" #: ../lib/GUI.pm:463 msgid "New CA" msgstr "Nueva CA" #: ../lib/GUI.pm:469 ../lib/GUI.pm:2382 msgid "Import CA" msgstr "Importar CA" #: ../lib/GUI.pm:475 ../lib/GUI.pm:1143 msgid "Delete CA" msgstr "Eliminar CA" #: ../lib/GUI.pm:485 ../lib/GUI.pm:524 ../lib/GUI.pm:592 msgid "Details" msgstr "Detalles" #: ../lib/GUI.pm:491 msgid "History" msgstr "" #: ../lib/GUI.pm:497 msgid "Sub CA" msgstr "Sub CA" #: ../lib/GUI.pm:503 msgid "Export CA" msgstr "Exportar CA" #: ../lib/GUI.pm:509 ../lib/GUI.pm:1419 msgid "Export CRL" msgstr "Exportar CRL" #: ../lib/GUI.pm:516 msgid "Export Chain" msgstr "Exportar Cadena" #: ../lib/GUI.pm:530 ../lib/GUI.pm:598 msgid "View" msgstr "Ver" #: ../lib/GUI.pm:540 ../lib/GUI.pm:604 msgid "New" msgstr "Nuevo" #: ../lib/GUI.pm:547 ../lib/GUI.pm:578 msgid "Export" msgstr "Exportar" #: ../lib/GUI.pm:553 msgid "Revoke" msgstr "Revocar" #: ../lib/GUI.pm:563 msgid "Renew" msgstr "Renovar" #: ../lib/GUI.pm:570 ../lib/GUI.pm:584 ../lib/GUI.pm:627 msgid "Delete" msgstr "Eliminar" #: ../lib/GUI.pm:610 msgid "Import" msgstr "Importar" #: ../lib/GUI.pm:620 msgid "Sign" msgstr "Firmar" #: ../lib/GUI.pm:646 msgid "_CA" msgstr "_CA" #: ../lib/GUI.pm:649 msgid "_Open CA" msgstr "_Abrir CA" #: ../lib/GUI.pm:654 msgid "_New CA" msgstr "_Nueva CA" #: ../lib/GUI.pm:659 msgid "_Delete CA" msgstr "_Eliminar CA" #: ../lib/GUI.pm:667 msgid "_Exit" msgstr "_Salir" #: ../lib/GUI.pm:674 msgid "_Preferences" msgstr "_Preferencias" #: ../lib/GUI.pm:677 #, fuzzy msgid "Experts Only!!" msgstr "Solo expertos!!" #: ../lib/GUI.pm:682 msgid "OpenSSL _Configuration" msgstr "_Configuracin OpenSSL" #: ../lib/GUI.pm:689 ../lib/GUI.pm:692 msgid "_Help" msgstr "_Ayuda" #: ../lib/GUI.pm:697 msgid "_About TinyCA" msgstr "_Sobre TinyCA" #: ../lib/GUI.pm:728 msgid "Invalid mode for show_text():" msgstr "Modo errneo para show_text():" #: ../lib/GUI.pm:733 ../lib/GUI.pm:848 ../lib/REQ.pm:236 ../lib/REQ.pm:367 msgid "Please select a Request first" msgstr "Por favor seleccione antes una Peticin" #: ../lib/GUI.pm:736 msgid "Please select a certificate first" msgstr "Por favor seleccione antes un Certificado" #: ../lib/GUI.pm:752 ../lib/GUI.pm:867 ../lib/GUI/X509_browser.pm:456 #: ../lib/GUI/X509_browser.pm:515 msgid "Can't read file" msgstr "No se puede leer fichero" #: ../lib/GUI.pm:754 msgid "Request" msgstr "Peticin" #: ../lib/GUI.pm:754 msgid "Certificate" msgstr "Certificado" #: ../lib/GUI.pm:815 #, fuzzy, c-format msgid "Invalid mode for _show_popup_menu(): %s" msgstr "Modo errneo para show_text():" #: ../lib/GUI.pm:843 msgid "Invalid mode for show_details():" msgstr "Modo erroneo para show_details()" #: ../lib/GUI.pm:869 ../lib/GUI.pm:969 ../lib/GUI.pm:3040 msgid "Request Details" msgstr "Detalles de la Peticin" #: ../lib/GUI.pm:869 ../lib/GUI.pm:969 ../lib/GUI.pm:2897 msgid "Certificate Details" msgstr "Detalles del Certificado" #: ../lib/GUI.pm:911 ../lib/GUI.pm:1679 ../lib/GUI.pm:3061 msgid "Import Request" msgstr "Importar Peticin" #: ../lib/GUI.pm:913 ../lib/GUI.pm:2438 msgid "Import CA Certificate" msgstr "Importar Certificado de la CA" #: ../lib/GUI.pm:921 msgid "Do you want to import the following Certificate Request?" msgstr "Quiere importar la siguiente Peticin de Certificado?" #: ../lib/GUI.pm:923 msgid "Do you want to import the following CA Certificate?" msgstr "Quiere importar la siguiente Peticin de Certificado?" #: ../lib/GUI.pm:977 msgid "Subject DN" msgstr "Asunto DN" #: ../lib/GUI.pm:1001 msgid "Issuer" msgstr "Firmante" #: ../lib/GUI.pm:1027 msgid "Validity" msgstr "Validez" #: ../lib/GUI.pm:1043 msgid "Key/Request Details:" msgstr "Detalles de Clave/Peticin:" #: ../lib/GUI.pm:1043 msgid "Key/Certificate Details:" msgstr "Detalles de Clave/Certificado:" #: ../lib/GUI.pm:1059 msgid "Fingerprints" msgstr "Huella digital" #: ../lib/GUI.pm:1075 msgid "Requested X.509 Extensions" msgstr "Extensiones X.509 pedidas" #: ../lib/GUI.pm:1075 msgid "X.509v3 Extensions" msgstr "Extensiones X.509v3" #: ../lib/GUI.pm:1100 msgid "Requested Netscape Extensions" msgstr "Extensiones Netscape pedidas" #: ../lib/GUI.pm:1100 msgid "Netscape Extensions" msgstr "Extensiones Netscape" #: ../lib/GUI.pm:1145 msgid "Invalid action given: " msgstr "Accin introducida erronea: " #: ../lib/GUI.pm:1167 ../lib/GUI.pm:1213 msgid "Invalid action for show_select_ca_dialog(): " msgstr "Accin erronea para show_select_ca_dialog(): " #: ../lib/GUI.pm:1189 msgid "Available CAs" msgstr "" #: ../lib/GUI.pm:1245 msgid "Create Request" msgstr "Crear Peticin" #: ../lib/GUI.pm:1246 msgid "Create a new Certificate Request" msgstr "Crear una nueva Peticin de Certificado" #: ../lib/GUI.pm:1260 msgid "Common Name (eg, your Name," msgstr "Nombre Comn (ej. su Nombre," #: ../lib/GUI.pm:1265 msgid "your eMail Address" msgstr "su Direccin eMail" #: ../lib/GUI.pm:1269 msgid "or the Servers Name)" msgstr "or el Nombre del Servidor)" #: ../lib/GUI.pm:1277 msgid "Password (protect your private Key):" msgstr "Password (protege su Clave privada):" #: ../lib/GUI.pm:1281 ../lib/GUI.pm:2294 msgid "Password (confirmation):" msgstr "Password (confirmacin):" #: ../lib/GUI.pm:1285 ../lib/GUI.pm:2286 msgid "Country Name (2 letter code):" msgstr "Nombre Pas (cdigo de 2 letras):" #: ../lib/GUI.pm:1289 ../lib/GUI.pm:2298 msgid "State or Province Name:" msgstr "Estado o Nombre de Provincia:" #: ../lib/GUI.pm:1293 ../lib/GUI.pm:2302 msgid "Locality Name (eg. city):" msgstr "Nombre Ubicacin (ej. ciudad):" #: ../lib/GUI.pm:1297 ../lib/GUI.pm:2306 msgid "Organization Name (eg. company):" msgstr "Nombre Organizacin (ej. compaa):" #: ../lib/GUI.pm:1303 ../lib/GUI.pm:1308 ../lib/GUI.pm:2310 msgid "Organizational Unit Name (eg. section):" msgstr "Unidad Organizativa (ej. seccin):" #: ../lib/GUI.pm:1313 ../lib/GUI.pm:2322 ../lib/GUI/WORDS.pm:65 msgid "Keylength" msgstr "Longitud Clave" #: ../lib/GUI.pm:1321 ../lib/GUI.pm:2352 msgid "Digest" msgstr "Resumen" #: ../lib/GUI.pm:1328 msgid "Algorithm" msgstr "Algoritmo" #: ../lib/GUI.pm:1359 ../lib/GUI.pm:2918 msgid "Revoke Certificate" msgstr "Revocar Certificado" #: ../lib/GUI.pm:1368 ../lib/GUI.pm:1444 ../lib/GUI.pm:2093 msgid "CA Password:" msgstr "Password CA:" #: ../lib/GUI.pm:1374 msgid "Revocation Reason:" msgstr "Razn Revocacin:" #: ../lib/GUI.pm:1419 msgid "Export Revocation List to File" msgstr "Exportar Lista de Revocacin a fichero" #: ../lib/GUI.pm:1427 ../lib/GUI.pm:1515 ../lib/GUI.pm:1563 ../lib/GUI.pm:1687 #: ../lib/GUI.pm:1755 msgid "File:" msgstr "Fichero:" #: ../lib/GUI.pm:1438 ../lib/GUI.pm:1526 ../lib/GUI.pm:1574 ../lib/GUI.pm:1697 #: ../lib/GUI.pm:1772 ../lib/GUI.pm:2435 ../lib/GUI.pm:2454 ../lib/GUI.pm:2473 #: ../lib/GUI.pm:2492 msgid "Browse..." msgstr "" #: ../lib/GUI.pm:1441 ../lib/GUI.pm:1554 ../lib/GUI.pm:1577 msgid "Export CA Certificate" msgstr "Exportar Certificado de la CA" #: ../lib/GUI.pm:1448 ../lib/GUI.pm:2099 ../lib/GUI.pm:2318 msgid "Valid for (Days):" msgstr "Vlido para (Das):" #: ../lib/GUI.pm:1452 ../lib/GUI.pm:1581 ../lib/GUI.pm:1779 msgid "Export Format:" msgstr "Formato a Exportar:" #: ../lib/GUI.pm:1458 ../lib/GUI.pm:1587 msgid "PEM" msgstr "PEM" #: ../lib/GUI.pm:1467 ../lib/GUI.pm:1596 msgid "DER" msgstr "DER" #: ../lib/GUI.pm:1476 ../lib/GUI.pm:1605 msgid "TXT" msgstr "TXT" #: ../lib/GUI.pm:1507 ../lib/GUI.pm:1529 msgid "Export CA Certificate Chain" msgstr "Exportar Cadena de Certificados de la CA" #: ../lib/GUI.pm:1508 msgid "Export CA Certificate Chain to File" msgstr "Exportar cadena de Certificados de la CA a fichero" #: ../lib/GUI.pm:1555 msgid "Export CA Certificate to File" msgstr "Exportar Certificado de la CA a fichero" #: ../lib/GUI.pm:1635 ../lib/GUI.pm:1636 msgid "Export Key without Passphrase" msgstr "Exportar Clave sin Password" #: ../lib/GUI.pm:1640 msgid "I hope you know what you're doing?" msgstr "Espero que sepa lo que hace?" #: ../lib/GUI.pm:1644 msgid "The Key Passphrase is needed for decryption of the Key" msgstr "Se necesita el Password para descifrar la Clave" #: ../lib/GUI.pm:1653 msgid "Password:" msgstr "Password:" #: ../lib/GUI.pm:1679 ../lib/GUI.pm:1700 msgid "Import Request from File" msgstr "Importar Peticin de un fichero" #: ../lib/GUI.pm:1721 ../lib/GUI.pm:1759 ../lib/GUI.pm:2911 msgid "Export Certificate" msgstr "Exportar Certificado" #: ../lib/GUI.pm:1723 ../lib/GUI.pm:1761 ../lib/GUI.pm:2868 msgid "Export Key" msgstr "Exportar Clave" #: ../lib/GUI.pm:1726 msgid "Invalid mode for show_export_dialog(): " msgstr "Modo erroneo para show_export_dialog():" #: ../lib/GUI.pm:1743 msgid "Export Certificate to File" msgstr "Exportar Certificado a Fichero" #: ../lib/GUI.pm:1745 msgid "Export Key to File" msgstr "Exportar Clave a Fichero" #: ../lib/GUI.pm:1783 msgid "PEM (Certificate)" msgstr "PEM (Certificado)" #: ../lib/GUI.pm:1785 msgid "PEM (Key)" msgstr "PEM (Clave)" #: ../lib/GUI.pm:1794 msgid "DER (Certificate)" msgstr "DER (Certificado)" #: ../lib/GUI.pm:1796 msgid "DER (Key without Passphrase)" msgstr "DER (Clave sin Password)" #: ../lib/GUI.pm:1804 msgid "PKCS#12 (Certificate & Key)" msgstr "PKCS#12 (Certificado & Clave)" #: ../lib/GUI.pm:1811 msgid "Zip (Certificate & Key)" msgstr "Zip (Certificado & Clave)" #: ../lib/GUI.pm:1821 #, fuzzy msgid "Tar (Certificate & Key)" msgstr "Zip (Certificado & Clave)" #: ../lib/GUI.pm:1833 msgid "TXT (Certificate)" msgstr "TXT (Certificado)" #: ../lib/GUI.pm:1839 #, fuzzy msgid "Without Passphrase (PEM/PKCS#12)" msgstr "Sin Password (PEM)" #: ../lib/GUI.pm:1845 ../lib/GUI.pm:1872 ../lib/GUI.pm:1891 ../lib/GUI.pm:2018 #: ../lib/GUI.pm:2043 ../lib/GUI.pm:2196 msgid "Yes" msgstr "S" #: ../lib/GUI.pm:1850 ../lib/GUI.pm:1877 ../lib/GUI.pm:1896 ../lib/GUI.pm:2024 #: ../lib/GUI.pm:2049 ../lib/GUI.pm:2202 msgid "No" msgstr "No" #: ../lib/GUI.pm:1860 msgid "Include Key (PEM)" msgstr "" #: ../lib/GUI.pm:1865 #, fuzzy msgid "Include Certificate (PEM)" msgstr "Certificado de la CA (PEM/DER):" #: ../lib/GUI.pm:1885 #, fuzzy msgid "Include Fingerprint (PEM)" msgstr "Huella Digital (MD5)" #: ../lib/GUI.pm:1993 ../lib/GUI.pm:1994 msgid "Export to PKCS#12" msgstr "Exportar a PKCS#12" #: ../lib/GUI.pm:2001 msgid "Key Password:" msgstr "Password Clave:" #: ../lib/GUI.pm:2005 msgid "Export Password:" msgstr "Exportar Password:" #: ../lib/GUI.pm:2008 msgid "Friendly Name:" msgstr "" #: ../lib/GUI.pm:2012 #, fuzzy msgid "Without Passphrase" msgstr "Sin Password (PEM)" #: ../lib/GUI.pm:2037 msgid "Add CA Certificate to PKCS#12 structure" msgstr "Aadir Certificado de la CA a la estructura del PKCS#12" #: ../lib/GUI.pm:2085 ../lib/GUI.pm:3068 msgid "Sign Request" msgstr "Firmar Peticin" #: ../lib/GUI.pm:2085 msgid "Sign Request/Create Certificate" msgstr "Firmar Peticin/Crear Certificado" #: ../lib/GUI.pm:2110 ../lib/GUI.pm:2155 msgid "Subject alternative name (IP Address):" msgstr "Nombre asunto alternativo (Direccin IP):" #: ../lib/GUI.pm:2113 ../lib/GUI.pm:2158 msgid "Subject alternative name (DNS Name):" msgstr "Nombre asunto alternativo (Nombre DNS):" #: ../lib/GUI.pm:2116 ../lib/GUI.pm:2164 #, fuzzy msgid "Subject alternative name (raw):" msgstr "Nombre asunto alternativo (raw):" #: ../lib/GUI.pm:2124 ../lib/GUI.pm:2172 msgid "Extended Key Usage:" msgstr "Uso Clave (extendido):" #: ../lib/GUI.pm:2131 msgid "Netscape SSL Server Name:" msgstr "Nombre Servidor Netscape SSL:" #: ../lib/GUI.pm:2138 ../lib/GUI.pm:2179 msgid "Netscape Revocation URL:" msgstr "URL Revocacin Netscape" #: ../lib/GUI.pm:2145 ../lib/GUI.pm:2186 msgid "Netscape Renewal URL:" msgstr "URL Renovacin Netscape:" #: ../lib/GUI.pm:2161 msgid "Subject alternative name (eMail Address):" msgstr "Nombre asunto alternativo (Direccin eMail):" #: ../lib/GUI.pm:2208 msgid "Add eMail Address to Subject DN:" msgstr "Aadir Direccin eMail al Asunto DN:" #: ../lib/GUI.pm:2238 ../lib/GUI.pm:2242 msgid "Create CA" msgstr "Crear CA" #: ../lib/GUI.pm:2238 msgid "Create a new Sub CA" msgstr "Crear una nueva Sub CA" #: ../lib/GUI.pm:2242 msgid "Create a new CA" msgstr "Crear una CA nueva" #: ../lib/GUI.pm:2255 msgid "CA Password (for creating the new CA):" msgstr "Password CA (para crear la nueva CA):" #: ../lib/GUI.pm:2266 ../lib/GUI.pm:2403 msgid "Name (for local storage):" msgstr "Nombre (para almacenarlo localmente):" #: ../lib/GUI.pm:2273 msgid "Data for CA Certificate" msgstr "Informacin para el Certificado de la CA" #: ../lib/GUI.pm:2282 msgid "Common Name (for the CA):" msgstr "Nombre Comn (para la CA):" #: ../lib/GUI.pm:2290 msgid "Password (needed for signing):" msgstr "Password (necesario para firmar):" #: ../lib/GUI.pm:2382 msgid "Import an existing CA into TinyCA" msgstr "Importar una CA exitente" #: ../lib/GUI.pm:2393 msgid "Password of the private CA key (Needed for import):" msgstr "Password de la Clave privada (Necesario para importar):" #: ../lib/GUI.pm:2407 msgid "New password for the CA:" msgstr "Nuevo password para la CA:" #: ../lib/GUI.pm:2411 msgid "Confirm password:" msgstr "Confirmar Password:" #: ../lib/GUI.pm:2416 msgid "Files/Directories to import" msgstr "Fichers/Directorios a importar" #: ../lib/GUI.pm:2424 msgid "CA Certificate (PEM/DER):" msgstr "Certificado de la CA (PEM/DER):" #: ../lib/GUI.pm:2443 msgid "CA private key (PEM/DER):" msgstr "Clave privada de la CA (PEM/DER):" #: ../lib/GUI.pm:2457 #, fuzzy msgid "Import CA private Key" msgstr "Importar clave privada de CA" #: ../lib/GUI.pm:2462 #, fuzzy msgid "OpenSSL Index File (index.txt):" msgstr "Fichero ndice (index.txt):" #: ../lib/GUI.pm:2476 msgid "Import Index File" msgstr "Importar fichero ndice" #: ../lib/GUI.pm:2481 msgid "Directory containing certificates (PEM/DER):" msgstr "Directorio que contiene los Certificados (PEM/DER):" #: ../lib/GUI.pm:2495 #, fuzzy msgid "Import Certificates from directory" msgstr "Importar Certificados de directorio" #: ../lib/GUI.pm:2509 msgid "You are kidding, are you??" msgstr "Est bromeando, verdad?" #: ../lib/GUI.pm:2531 #, fuzzy msgid "Spanish: Ramon Pons Vivanco " msgstr "Castellano: Ramon Pons Vivanco " #: ../lib/GUI.pm:2532 #, fuzzy msgid "Czech: Robert Wolf " msgstr "Checo: Robert Wolf " #: ../lib/GUI.pm:2533 msgid "French: Thibault Le Meur " msgstr "" #: ../lib/GUI.pm:2549 msgid "Do you really want to delete the selected Request?" msgstr "Est seguro de que desea eliminar las Peticiones seleccionadas?" #: ../lib/GUI.pm:2551 msgid "Do you really want to delete the selected Key?" msgstr "Est seguro de que desea eliminar las Claves seleccionadas?" #: ../lib/GUI.pm:2553 msgid "Do you really want to delete the selected Certificate?" msgstr "Est seguro de que desea eliminar los Certificados seleccionados?" #: ../lib/GUI.pm:2603 #, fuzzy msgid "Overwrite Request/Key" msgstr "Eliminar Peticin" #: ../lib/GUI.pm:2609 msgid "The Key or the Request is already existing!" msgstr "La Clave o la Peticin ya existen!" #: ../lib/GUI.pm:2614 #, fuzzy msgid "You won't be able to sign this Request" msgstr "no podr firmar la Peticin!" #: ../lib/GUI.pm:2619 #, fuzzy msgid "if the corresponding certificate is still valid" msgstr "Si el Certificado correspondiente no ha caducado o ha sido revocado " #: ../lib/GUI.pm:2636 msgid "The Certificate will be longer valid than your CA!" msgstr "El Certificado tendr mayor duracin que la CA!" #: ../lib/GUI.pm:2638 msgid "This may cause problems with some software!!" msgstr "Esto puede causar problemas con algunos programas!!" #: ../lib/GUI.pm:2653 msgid "Expirationdate Warning" msgstr "Advertencia - Caducado" #: ../lib/GUI.pm:2688 ../lib/GUI/WORDS.pm:69 msgid "Serial" msgstr "Nmero de Serie" #: ../lib/GUI.pm:2690 ../lib/GUI/WORDS.pm:70 ../lib/GUI/X509_browser.pm:175 msgid "Status" msgstr "Estado" #: ../lib/GUI.pm:2691 ../lib/GUI/WORDS.pm:64 msgid "Expiration Date" msgstr "Fecha Caducidad" #: ../lib/GUI.pm:2692 #, fuzzy msgid "Revocation Date" msgstr "Fecha Creacin" #: ../lib/GUI.pm:2693 #, fuzzy msgid "Revocation Reason" msgstr "Razn Revocacin:" #: ../lib/GUI.pm:2719 ../lib/OpenSSL.pm:705 msgid "EXPIRED" msgstr "CADUCADO" #: ../lib/GUI.pm:2721 ../lib/OpenSSL.pm:718 msgid "REVOKED" msgstr "REVOCADO" #: ../lib/GUI.pm:2741 msgid "CA History" msgstr "" #: ../lib/GUI.pm:2775 msgid "Overwrite Certificate" msgstr "Sobreescribrir Certificado" #: ../lib/GUI.pm:2781 #, fuzzy msgid "There seems to be a certificate with the same Subject already." msgstr "Parece que ya hay un Certificado." #: ../lib/GUI.pm:2786 msgid "" "Creating a new one (overwrite) will fail if it's not revoked or expired!" msgstr "" "Al crear uno nuevo (sobreescribir) fallar si no est revocado o ha " "caducado!" #: ../lib/GUI.pm:2792 msgid "Really try to overwrite the Certificate?" msgstr "Quiere realmente sobreescribir el Certificado?" #: ../lib/GUI.pm:2825 msgid "Convert CA" msgstr "Convertir CA" #: ../lib/GUI.pm:2833 msgid "" "This CA seems to be created with openssl 0.9.6x. And it seems like you have " "switched to openssl 0.9.7x." msgstr "" "Est CA parece que ha sido creada con OpenSSL 0.9.6x. Y parece que ha " "cambiado a OpenSSL 0.9.7x." #: ../lib/GUI.pm:2841 msgid "" "You won't be able to revoke the existing certificates without converting the " "index file of this CA to the new format." msgstr "" "No podr revocar los Certificados existentes sin convertir el fichero ndice " "de esta CA al nuevo formato." #: ../lib/GUI.pm:2849 msgid "" "Attention: it will not be easy to switch back, this has to be done manually" msgstr "" "Atencin: no ser fcil volver atras, esto tiene que hacerse manualmente" #: ../lib/GUI.pm:2875 msgid "Delete Key" msgstr "Eliminar Clave" #: ../lib/GUI.pm:2904 msgid "View Certificate" msgstr "Ver Certificado" #: ../lib/GUI.pm:2925 #, fuzzy msgid "Renew Certificate" msgstr "Revocar Certificado" #: ../lib/GUI.pm:2933 msgid "Delete Certificate" msgstr "Eliminar Certificado" #: ../lib/GUI.pm:2956 msgid "Create Key and Certificate (Server)" msgstr "Crear Clave y Certificado (Servidor)" #: ../lib/GUI.pm:2962 msgid "Create Key and Certificate (Client)" msgstr "Crear Clave y Certificado (Cliente)" #: ../lib/GUI.pm:2983 #, fuzzy msgid "Renew Certificate (Server)" msgstr "Renovar Certificado" #: ../lib/GUI.pm:2990 #, fuzzy msgid "Renew Certificate (Client)" msgstr "Renovar Certificado" #: ../lib/GUI.pm:3012 msgid "Sign Request (Server)" msgstr "Firmar Peticin (Servidor)" #: ../lib/GUI.pm:3019 msgid "Sign Request (Client)" msgstr "Firmar Peticin (Cliente)" #: ../lib/GUI.pm:3047 msgid "View Request" msgstr "Ver Peticin" #: ../lib/GUI.pm:3054 msgid "New Request" msgstr "Nueva Peticin" #: ../lib/GUI.pm:3076 msgid "Delete Request" msgstr "Eliminar Peticin" #: ../lib/HELPERS.pm:207 #, c-format msgid "Can't write exportdir: %s, %s" msgstr "No se puede escribir en el directorio para exportar: %s: %s" #: ../lib/KEY.pm:45 ../lib/KEY.pm:137 msgid "Please select a Key first" msgstr "Por favor seleccione antes una Clave" #: ../lib/KEY.pm:54 msgid "Key file not found:" msgstr "Fichero de Claves no encontrado:" #: ../lib/KEY.pm:101 msgid "Can't open key directory" msgstr "No se puede abrir el directorio de Claves" #: ../lib/KEY.pm:194 msgid "" "Wrong password given\n" "Decrypting of the Key failed\n" "Export is not possible" msgstr "" "Password introducido incorrecto\n" "Fall el descifrado de la Clave\n" "No se puede exportar" #: ../lib/KEY.pm:199 msgid "Converting failed, Export not possible" msgstr "Conversin erronea, no se puede exportar" #: ../lib/KEY.pm:206 ../lib/KEY.pm:410 #, c-format msgid "Can't open Key file: %s: %s" msgstr "No se puede abrir el fichero de Claves: %s: %s" #: ../lib/KEY.pm:239 #, c-format msgid "Key succesfully exported to %s" msgstr "Clave exportada correctamente: %s" #: ../lib/KEY.pm:255 msgid "Certificate is necessary for export as PKCS#12" msgstr "Es necesario un Certificado para exportar como PKCS#12" #: ../lib/KEY.pm:305 #, fuzzy, c-format msgid "Certificate is necessary for export as %s file" msgstr "Es necesario un Certificado para exportar como fichero Zip" #: ../lib/KEY.pm:330 msgid "Can't read Key file" msgstr "No se puede leer el fichero con la Clave" #: ../lib/KEY.pm:392 #, c-format msgid "Invalid format for export requested: %s" msgstr "Formato no vlido para exportar una Peticin: %s" #: ../lib/KEY.pm:398 msgid "Something Failed ??" msgstr "Ha fallado algo??" #: ../lib/KEY.pm:448 #, c-format msgid "" "Can't open Key file:\n" "%s" msgstr "" "No se puede abrir el fichero de Claves:\n" "%s" #: ../lib/KEY.pm:485 msgid "The password for your old CA Key is wrong" msgstr "El password de la Clave antigua no es correcto" #: ../lib/OpenSSL.pm:73 msgid "Creating DSA key in progress..." msgstr "Creacin de una clave DSA en progreso..." #: ../lib/OpenSSL.pm:107 msgid "Creating RSA key in progress..." msgstr "Creacin de una clave RSA en progreso..." #: ../lib/OpenSSL.pm:456 #, c-format msgid "Can't open CRL '%s': %s" msgstr "No se puede abrir CRL '%s': %s" #: ../lib/OpenSSL.pm:471 ../lib/OpenSSL.pm:484 msgid "Error converting CRL" msgstr "Error al convertir CRL" #: ../lib/OpenSSL.pm:582 ../lib/OpenSSL.pm:595 msgid "Error converting Certificate" msgstr "Error al convetir Certificado" #: ../lib/OpenSSL.pm:655 ../lib/OpenSSL.pm:672 msgid "Error reading fingerprint from Certificate" msgstr "Error al leer la huella digital del Certificado" #: ../lib/OpenSSL.pm:690 msgid "Error reading subject from Certificate" msgstr "Error al leer el asunto del Certificado" #: ../lib/OpenSSL.pm:700 msgid "Can't read CRL" msgstr "No se puede leer la CRL" #: ../lib/OpenSSL.pm:723 msgid "UNDEFINED" msgstr "SIN DEFINIR" #: ../lib/OpenSSL.pm:750 #, c-format msgid "Can't open Request file %s: %s" msgstr "No se puede abrir fichero de Peticin %s: %s" #: ../lib/OpenSSL.pm:767 ../lib/OpenSSL.pm:781 ../lib/REQ.pm:685 msgid "Error converting Request" msgstr "Error al convertir Peticin" #: ../lib/OpenSSL.pm:863 #, c-format msgid "Can't open file %s: %s" msgstr "No se puede abrir fichero %s: %s" #: ../lib/OpenSSL.pm:981 ../lib/OpenSSL.pm:1013 #, c-format msgid "Can't read index %s: %s" msgstr "No se puede leer el ndice %s: %s" #: ../lib/OpenSSL.pm:1023 #, c-format msgid "Can't write index %s: %s" msgstr "No se puede escribir el ndice %s: %s" #: ../lib/REQ.pm:58 #, c-format msgid "Strange value for 'opts': %s" msgstr "Valor extrao para 'opts': %s" #: ../lib/REQ.pm:101 msgid "Please specify at least Common Name " msgstr "Por favor expecifique al menos el Nombre Comn " #: ../lib/REQ.pm:102 msgid "and Password" msgstr "y Password" #: ../lib/REQ.pm:246 ../lib/REQ.pm:376 msgid "Request file not found" msgstr "Fichero de Peticin no encontrado" #: ../lib/REQ.pm:299 msgid "Can't open Request directory" msgstr "No se puede abrir el directorio de Peticiones" #: ../lib/REQ.pm:320 #, c-format msgid " Read Request: %s" msgstr " Lectura de la Peticin: %s" #: ../lib/REQ.pm:414 #, fuzzy msgid "Can't read Request file" msgstr "No se puede leer el fichero de Peticin:" #: ../lib/REQ.pm:458 msgid "Can't read serial" msgstr "No se puede leer el nmero de serie" #: ../lib/REQ.pm:531 msgid "" "Wrong CA password given\n" "Signing of the Request failed" msgstr "" "El password de la CA introducido es erroneo\n" "Fall la firma de la Peticin" #: ../lib/REQ.pm:537 msgid "" "CA Key not found\n" "Signing of the Request failed" msgstr "" "Clave de la CA no encontrada\n" "Fall la firma de la Peticin" #: ../lib/REQ.pm:543 msgid "" "Certificate already existing\n" "Signing of the Request failed" msgstr "" "El Certificado ya existe\n" "Fall la firma de la Peticin" #: ../lib/REQ.pm:549 msgid "" "Invalid IP Address given\n" "Signing of the Request failed" msgstr "" "Direccin IP introducida erronea\n" "Fall la firma de la Peticin" #: ../lib/REQ.pm:556 ../lib/REQ.pm:574 msgid "Signing of the Request failed" msgstr "Fall la firma de la Peticin" #: ../lib/REQ.pm:581 msgid "Can't read Certificate file" msgstr "No se puede leer el fichero del Certificado" #: ../lib/REQ.pm:587 ../lib/REQ.pm:597 msgid "Can't write Certificate file" msgstr "No se puede escribir el fichero del Certificado" #: ../lib/REQ.pm:609 msgid "" "Request signed succesfully.\n" "Certificate created" msgstr "" "Peticin firmada correctamente.\n" "Certificado creado." #: ../lib/REQ.pm:650 msgid "Please select a Request file first" msgstr "Por favor seleccione un fichero de Peticin antes" #: ../lib/REQ.pm:656 msgid "Can't find Request file: " msgstr "No se puede encontrar el fichero: " #: ../lib/REQ.pm:662 msgid "Can't read Request file:" msgstr "No se puede leer el fichero de Peticin:" #: ../lib/REQ.pm:708 msgid "Parsing Request failed" msgstr "Fall el anlisis de la Peticin" #: ../lib/TCONFIG.pm:42 msgid "Please select a CA first" msgstr "Por favor seleccione una CA antes" #: ../lib/TCONFIG.pm:49 msgid "Can't open configuration" msgstr "No se puede abrir la configuracin" #: ../lib/TCONFIG.pm:284 ../lib/TCONFIG.pm:299 ../lib/GUI/TCONFIG.pm:47 #: ../lib/GUI/TCONFIG.pm:1302 msgid "Can't get CA name" msgstr "No se puede obtener el nombre de la CA" #: ../lib/TCONFIG.pm:327 msgid "Can't open configfile" msgstr "No se puede abrir el fichero de configuracin" #: ../lib/GUI/HELPERS.pm:54 ../lib/GUI/HELPERS.pm:94 ../lib/GUI/HELPERS.pm:135 #, fuzzy msgid "Command Details" msgstr "Detalles" #: ../lib/GUI/HELPERS.pm:305 msgid "Request Files (*.pem, *.der, *.req)" msgstr "" #: ../lib/GUI/HELPERS.pm:312 msgid "All Files (*.*)" msgstr "" #: ../lib/GUI/TCONFIG.pm:74 msgid "" "All Settings are written unchanged to openssl.conf.\n" "So please study the documentation of OpenSSL if you don't know exactly what " "to do.\n" "If you are still unsure - keep the defaults and everything is expected to " "work fine." msgstr "" "Toda la configuracin se escribe sin cambios en openssl.conf.\n" "As que por favor consulte la documentacin de OpenSSl si no sabe " "exactamente qu hacer.\n" "Si todava no sabe qu hacer, mantenga la configuracin por defecto y todo " "funcionar bien." #: ../lib/GUI/TCONFIG.pm:108 ../lib/GUI/TCONFIG.pm:116 msgid "OpenSSL Configuration" msgstr "Configuracin OpenSSL" #: ../lib/GUI/TCONFIG.pm:129 msgid "Only change these options, if you really know, what you are doing!!" msgstr "Cambie estas opciones slo si realmente sabe lo que est haciendo!!" #: ../lib/GUI/TCONFIG.pm:137 msgid "You should be aware, that some options may break some crappy software!!" msgstr "" "Sea consciente: algunas opciones pueden producir fallos en programas " "incorrectos!!" #: ../lib/GUI/TCONFIG.pm:146 ../lib/GUI/TCONFIG.pm:1348 msgid "If you are unsure: leave the defaults untouched" msgstr "Si no est seguro: deje las opciones por defecto" #: ../lib/GUI/TCONFIG.pm:182 msgid "These Settings are passed to OpenSSL for creating Server Certificates" msgstr "" "Estas opciones se le pasan a OpenSSL para crear Certificados de Servidor" #: ../lib/GUI/TCONFIG.pm:187 ../lib/GUI/TCONFIG.pm:612 #: ../lib/GUI/TCONFIG.pm:1019 ../lib/GUI/TCONFIG.pm:1239 #: ../lib/GUI/TCONFIG.pm:1340 msgid "Multiple Values can be separated by \",\"" msgstr "Los valores multiples se pueden separar por \",\"" #: ../lib/GUI/TCONFIG.pm:207 ../lib/GUI/TCONFIG.pm:209 msgid "Server Certificate Settings" msgstr "Opciones Certificado Servidor" #: ../lib/GUI/TCONFIG.pm:215 ../lib/GUI/TCONFIG.pm:638 #: ../lib/GUI/TCONFIG.pm:1047 ../lib/GUI/TCONFIG.pm:1462 msgid "Subject alternative name (subjectAltName):" msgstr "Nombre asunto alternativo (subjectAltName):" #: ../lib/GUI/TCONFIG.pm:312 ../lib/GUI/TCONFIG.pm:744 #: ../lib/GUI/TCONFIG.pm:1107 ../lib/GUI/TCONFIG.pm:1358 msgid "Key Usage (keyUsage):" msgstr "Uso Clave (keyUsage):" #: ../lib/GUI/TCONFIG.pm:391 ../lib/GUI/TCONFIG.pm:819 msgid "Extended Key Usage (extendedKeyUsage):" msgstr "Uso Clave Extendida (extendedKeyUsage):" #: ../lib/GUI/TCONFIG.pm:467 ../lib/GUI/TCONFIG.pm:894 #: ../lib/GUI/TCONFIG.pm:1076 ../lib/GUI/TCONFIG.pm:1431 msgid "Netscape Certificate Type (nsCertType):" msgstr "Tipo Certificado Netscape (nsCertType):" #: ../lib/GUI/TCONFIG.pm:496 msgid "Netscape SSL Server Name (nsSslServerName):" msgstr "Nombre Servidor SSL Netscape (nsSslServerName):" #: ../lib/GUI/TCONFIG.pm:521 ../lib/GUI/TCONFIG.pm:924 #: ../lib/GUI/TCONFIG.pm:1182 msgid "Netscape Revocation URL (nsRevocationUrl):" msgstr "URL Revocacin Netscape (nsRevocationUrl):" #: ../lib/GUI/TCONFIG.pm:546 ../lib/GUI/TCONFIG.pm:948 msgid "Netscape Renewal URL (nsRenewalUrl):" msgstr "URL Renovacin Netscape (nsRenewalUrl):" #: ../lib/GUI/TCONFIG.pm:607 msgid "These Settings are passed to OpenSSL for creating Client Certificates" msgstr "Estas opciones se pasan a OpenSSL para crear Certificados de Cliente" #: ../lib/GUI/TCONFIG.pm:632 msgid "Client Certificate Settings" msgstr "Opciones Certificado Cliente" #: ../lib/GUI/TCONFIG.pm:1014 msgid "These Settings are passed to OpenSSL for creating CA Certificates" msgstr "Estas opciones se pasan a OpenSSL para crear Certificados de la CA" #: ../lib/GUI/TCONFIG.pm:1039 ../lib/GUI/TCONFIG.pm:1041 msgid "CA Certificate Settings" msgstr "Opciones Certificado CA" #: ../lib/GUI/TCONFIG.pm:1234 msgid "" "These Settings are passed to OpenSSL for creating Certificate Revocation " "Lists" msgstr "" "Estas opciones se pasan a OpenSSL para crear Listas de Revocacin de " "Certificados" #: ../lib/GUI/TCONFIG.pm:1260 msgid "Revocation List Settings" msgstr "Opciones Lista Revocacin" #: ../lib/GUI/TCONFIG.pm:1322 msgid "CA Configuration" msgstr "Configuracin CA" #: ../lib/GUI/TCONFIG.pm:1330 msgid "These Settings are passed to OpenSSL for creating this CA Certificate" msgstr "Estas opciones se pasan a OpenSSL para crear este Certificado de la CA" #: ../lib/GUI/TCONFIG.pm:1335 msgid "and the CA Certificates of every SubCA, created with this CA." msgstr "y el Certificado de la CA y de todas las SubCA creadas con esta CA." #: ../lib/GUI/WORDS.pm:26 ../lib/GUI/WORDS.pm:73 msgid "Not set" msgstr "No establecido" #: ../lib/GUI/WORDS.pm:27 ../lib/GUI/WORDS.pm:74 msgid "Ask User" msgstr "Preguntar Usuario" #: ../lib/GUI/WORDS.pm:28 ../lib/GUI/WORDS.pm:75 msgid "critical" msgstr "crtico" #: ../lib/GUI/WORDS.pm:29 ../lib/GUI/WORDS.pm:76 msgid "not critical" msgstr "no crtico" #: ../lib/GUI/WORDS.pm:30 ../lib/GUI/WORDS.pm:77 msgid "Copy Email" msgstr "Copia Email" #: ../lib/GUI/WORDS.pm:31 ../lib/GUI/WORDS.pm:78 msgid "raw" msgstr "raw" #: ../lib/GUI/WORDS.pm:32 ../lib/GUI/WORDS.pm:79 msgid "DNS Name" msgstr "Nombre DNS" #: ../lib/GUI/WORDS.pm:33 ../lib/GUI/WORDS.pm:81 msgid "IP Address" msgstr "Direccin IP" #: ../lib/GUI/WORDS.pm:34 ../lib/GUI/WORDS.pm:80 msgid "Email" msgstr "Email" #: ../lib/GUI/WORDS.pm:35 ../lib/GUI/WORDS.pm:82 msgid "SSL Server" msgstr "Servidor SSL" #: ../lib/GUI/WORDS.pm:36 ../lib/GUI/WORDS.pm:83 msgid "SSL Server, SSL Client" msgstr "Servidor SSL, Cliente SSL" #: ../lib/GUI/WORDS.pm:37 ../lib/GUI/WORDS.pm:84 msgid "Key Encipherment" msgstr "Cifrado Clave" #: ../lib/GUI/WORDS.pm:38 ../lib/GUI/WORDS.pm:85 msgid "Digital Signature" msgstr "Firma Digital" #: ../lib/GUI/WORDS.pm:39 ../lib/GUI/WORDS.pm:86 msgid "Key Encipherment, Digital Signature" msgstr "Cifrado Clave, Firma Digital" #: ../lib/GUI/WORDS.pm:40 ../lib/GUI/WORDS.pm:87 msgid "Object Signing" msgstr "Firmar Objeto" #: ../lib/GUI/WORDS.pm:41 ../lib/GUI/WORDS.pm:91 msgid "SSL Client, Object Signing" msgstr "Cliente SSL, Firmar Objeto" #: ../lib/GUI/WORDS.pm:42 ../lib/GUI/WORDS.pm:89 msgid "SSL Client, Email(S/MIME)" msgstr "Cliente SSL, Email(S/MIME)" #: ../lib/GUI/WORDS.pm:43 ../lib/GUI/WORDS.pm:90 msgid "SSL Client" msgstr "Cliente SSL" #: ../lib/GUI/WORDS.pm:44 ../lib/GUI/WORDS.pm:88 msgid "Email(S/MIME)" msgstr "Email(S/MIME)" #: ../lib/GUI/WORDS.pm:45 ../lib/GUI/WORDS.pm:92 msgid "SSL Client, Email, Object Signing" msgstr "Cliente SSL, Email, Firmar Objeto" #: ../lib/GUI/WORDS.pm:46 ../lib/GUI/WORDS.pm:93 msgid "Object Signing CA" msgstr "Firmar Objeto CA" #: ../lib/GUI/WORDS.pm:47 ../lib/GUI/WORDS.pm:94 msgid "S/MIME CA" msgstr "S/MIME CA" #: ../lib/GUI/WORDS.pm:48 ../lib/GUI/WORDS.pm:95 msgid "SSL CA" msgstr "SSL CA" #: ../lib/GUI/WORDS.pm:49 ../lib/GUI/WORDS.pm:96 msgid "SSL CA, S/MIME CA" msgstr "SSL CA, S/MIME CA" #: ../lib/GUI/WORDS.pm:50 ../lib/GUI/WORDS.pm:97 msgid "SSL CA, Object Signing CA" msgstr "SSL CA, Firmar Objeto CA" #: ../lib/GUI/WORDS.pm:51 ../lib/GUI/WORDS.pm:98 msgid "S/MIME CA, Object Signing CA" msgstr "S/MIME CA, Firmar Objeto CA" #: ../lib/GUI/WORDS.pm:52 ../lib/GUI/WORDS.pm:99 msgid "SSL CA, S/MIME CA, Object Signing CA" msgstr "SSL CA, S/MIME CA, Firmar Objeto CA" #: ../lib/GUI/WORDS.pm:53 ../lib/GUI/WORDS.pm:100 msgid "Certificate Signing" msgstr "Firmar Certificado" #: ../lib/GUI/WORDS.pm:54 ../lib/GUI/WORDS.pm:101 msgid "CRL Signing" msgstr "Firmar CRL" #: ../lib/GUI/WORDS.pm:55 ../lib/GUI/WORDS.pm:102 msgid "Certificate Signing, CRL Signing" msgstr "Firmar Certificado, Firmar CRL" #: ../lib/GUI/WORDS.pm:63 msgid "Creation Date" msgstr "Fecha Creacin" #: ../lib/GUI/WORDS.pm:66 msgid "Public Key Algorithm" msgstr "Algoritmo de Clave Publica" #: ../lib/GUI/WORDS.pm:67 msgid "Signature Algorithm" msgstr "Algoritmo de Firma" #: ../lib/GUI/WORDS.pm:71 ../lib/GUI/X509_infobox.pm:80 msgid "Fingerprint (MD5)" msgstr "Huella Digital (MD5)" #: ../lib/GUI/WORDS.pm:72 ../lib/GUI/X509_infobox.pm:89 msgid "Fingerprint (SHA1)" msgstr "Huella Digital (SHA1)" #: ../lib/GUI/X509_browser.pm:448 msgid "Certificate Information" msgstr "Informacin Certificado" #: ../lib/GUI/X509_browser.pm:452 msgid "Request Information" msgstr "Informacin Peticin" #: ../lib/GUI/X509_browser.pm:571 #, fuzzy msgid "Invalid browser mode for selection_fname():" msgstr "Modo de exploracin erroneo para selection_dn()" #: ../lib/GUI/X509_browser.pm:571 ../lib/GUI/X509_browser.pm:607 #: ../lib/GUI/X509_browser.pm:656 ../lib/GUI/X509_browser.pm:677 #: ../lib/GUI/X509_browser.pm:698 ../lib/GUI/X509_browser.pm:725 msgid " " msgstr " " #: ../lib/GUI/X509_browser.pm:607 msgid "Invalid browser mode for selection_dn():" msgstr "Modo de exploracin erroneo para selection_dn()" #: ../lib/GUI/X509_browser.pm:656 ../lib/GUI/X509_browser.pm:677 msgid "Invalid browser mode for selection_cn():" msgstr "Modo de exploracin erroneo para selection_cn()" #: ../lib/GUI/X509_browser.pm:698 msgid "Invalid browser mode for selection_status():" msgstr "Modo de exploracin para selection_status():" #: ../lib/GUI/X509_browser.pm:725 #, fuzzy msgid "Invalid browser mode for selection_type():" msgstr "Modo de exploracin erroneo para selection_dn()" #: ../tinyca2:63 #, c-format msgid "Can't execute %s.\n" msgstr "No se puede ejecutar %s.\n" #: ../tinyca2:64 msgid "Configure correct path to openssl in tinyca.\n" msgstr "Configure correctamente la ruta de openssl en tinyca.\n" #: ../tinyca2:69 msgid "zip command not found, support disabled.\n" msgstr "comando zip no encontrado, soporte deshabilitado.\n" #: ../tinyca2:70 msgid "Configure correct path to zip in tinyca.\n" msgstr "Configure correctamente la ruta de zip en tinyca.\n" #: ../tinyca2:74 #, fuzzy msgid "tar command not found, support disabled.\n" msgstr "comando zip no encontrado, soporte deshabilitado.\n" #: ../tinyca2:75 #, fuzzy msgid "Configure correct path to tar in tinyca.\n" msgstr "Configure correctamente la ruta de zip en tinyca.\n" #: ../tinyca2:82 msgid "Can't find templatedir.\n" msgstr "No se puede encontrar el directorio de plantillas.\n" #: ../tinyca2:83 msgid "Please configure correct path with templates in tinyca.\n" msgstr "Por favor configure correctamente la ruta de plantillas en tinyca.\n" #~ msgid "Can't export PKCS#12 without passphrase" #~ msgstr "No se puede exportar PKCS#12 sin Password" tinyca2-0.7.5/po/fr.po0000600000175000017500000015202510461475420016131 0ustar schollerscholler00000000000000# translation of fr.po to # translation of es.po to spanish # This file is distributed under the same license as the tinyca package. # Copyright (C) 2004 Ramn Pons Vivanco # Stephan Martin, 2006. # msgid "" msgstr "" "Project-Id-Version: fr\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-07-13 23:47+0200\n" "PO-Revision-Date: 2006-02-18 23:11+0100\n" "Last-Translator: Stephan Martin\n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.10\n" #: ../lib/CA.pm:44 msgid "error: can't open basedir: " msgstr "erreur: impossible d'ouvrir le rpertoire: " #: ../lib/CA.pm:102 msgid " Opening CA: " msgstr " Ouverture de la CA: " #: ../lib/CA.pm:109 ../lib/CA.pm:270 msgid "Invalid CA selected" msgstr "CA selectionne invalide" #: ../lib/CA.pm:154 msgid " Initializing OpenSSL" msgstr " Initialisation d'OpenSSL" #: ../lib/CA.pm:160 msgid " Check for CA Version" msgstr " Vrification de la version de la CA" #: ../lib/CA.pm:167 ../lib/CA.pm:195 msgid "Can't open index file: " msgstr "Impossible d'ouvrir le fichier d'index: " #: ../lib/CA.pm:182 msgid " Convert CA" msgstr " Convertir la CA" #: ../lib/CA.pm:201 msgid "Can't open index backup: " msgstr "Impossible d'ouvrir la sauvegarde du fichier d'index: " #: ../lib/CA.pm:218 msgid "This CA is converted for openssl 0.9.7x now." msgstr "Cette CA est maintenant convertie pour openssl 0.9.7x." #: ../lib/CA.pm:220 msgid "You will find a backup copy of the index file at: " msgstr "Vous trouverez une copie de sauvegarde du fichier d'index ici: " #: ../lib/CA.pm:229 msgid " Read Configuration" msgstr " Lecture de la Configuration" #: ../lib/CA.pm:235 msgid " Create GUI" msgstr " Cration du GUI" #: ../lib/CA.pm:241 msgid " Create Toolbar" msgstr " Cration de la barre d'outils" #: ../lib/CA.pm:247 msgid " Actual CA: " msgstr " CA actuelle: " #: ../lib/CA.pm:332 #, c-format msgid "CA: %s deleted" msgstr "CA: %s dtruite" #: ../lib/CA.pm:386 msgid "Password of parent CA is needed for creating a Sub CA" msgstr "" "Le mot de passe de la CA parent est requis pour la cration d'une CA " "intermdiaire" #: ../lib/CA.pm:395 msgid "Name must be filled in and must" msgstr "Le nom doit tre renseign" #: ../lib/CA.pm:396 msgid " not contain Spaces" msgstr " ne doit pas contenir d'espace" #: ../lib/CA.pm:408 msgid "Please specify at least Common Name, " msgstr "S'il vous plait renseignez au moins le Common Name, " #: ../lib/CA.pm:409 msgid "Country and Password" msgstr "Pays et mot de passe" #: ../lib/CA.pm:416 ../lib/REQ.pm:109 msgid "Passwords don't match" msgstr "Les mots de passe ne sont pas identiques" #: ../lib/CA.pm:424 ../lib/REQ.pm:120 msgid "Country must be exact 2 letter code" msgstr "Le Pays doit contenir un code sur 2 lettres" #: ../lib/CA.pm:428 #, c-format msgid "CA: %s already exists" msgstr "La CA: %s existe dj" #: ../lib/CA.pm:468 msgid "Name for storage must be filled in and must not contain spaces" msgstr "Le nom doit tre renseign et ne doit pas contenir d'espace" #: ../lib/CA.pm:477 msgid "You didn't give a password for the private CA key." msgstr "" "Vous n'avez pas donn de mot de passe pour protger la cl prive de la CA." #: ../lib/CA.pm:479 msgid "The import will fail, if the key is encrypted." msgstr "L'importation chouera si la cl est chiffre." #: ../lib/CA.pm:488 msgid "Please give a new password for the CA" msgstr "Veuillez donner un nouveau mot de passe pour la CA" #: ../lib/CA.pm:495 msgid "New passwords don't match" msgstr "Les nouveaux mots de passe ne sont pas identiques" #: ../lib/CA.pm:503 msgid "Please give a CA certificate to import" msgstr "" "Veuillez renseigner le nom du fichier contenant le certificat de la CA " "importer" #: ../lib/CA.pm:508 #, c-format msgid "" "Can't read CA certificate file:\n" "%s" msgstr "" "Impossible de lire le fichier de certificat de la CA:\n" "%s" #: ../lib/CA.pm:518 msgid "Please give a CA keyfile to import" msgstr "" "Veuillez renseigner le nom du fichier contenant la cl prive de la CA " "importer" #: ../lib/CA.pm:523 #, c-format msgid "" "Can't read CA key file:\n" "%s" msgstr "" "Impossible de lire le fichier de cl prive de la CA:\n" "%s" #: ../lib/CA.pm:535 msgid "Please give an Index file to import.\n" msgstr "Veuillez renseigner le nom du fichier d'index de la CA importer.\n" #: ../lib/CA.pm:536 msgid "If you don't have an Index file, i'll try to generate one.\n" msgstr "" "Si vous ne disposez pas d'un fichier d'index, je tenterai d'en gnrer un.\n" #: ../lib/CA.pm:537 msgid "Attention: This will cause all Certificates to show up as valid.\n" msgstr "" "Attention: Aprs cette opration tous les certificats seront affichs comme " "tant valides.\n" #: ../lib/CA.pm:538 msgid "Attention: Revoked Certificates will not be determined." msgstr "Attention: Les certificats rvoqus ne seront plus affichs comme tel." #: ../lib/CA.pm:549 #, c-format msgid "" "Can't read Index file:\n" "%s" msgstr "" "Impossible de lire le fichier d'index:\n" "%s" #: ../lib/CA.pm:562 msgid "Please give a directory containing the certificates to import" msgstr "" "Veuillez donner le nom du rpertoire contenant les certificats importer" #: ../lib/CA.pm:567 #, c-format msgid "" "Can't find certificate directory:\n" "%s" msgstr "" "Impossible de trouver le rpertoire contenant les certificats:\n" "%s" #: ../lib/CA.pm:578 #, c-format msgid "CA: %s already exists. Please choose another name" msgstr "la CA: %s existe dj. Veuillez vhoisir un autre nom" #: ../lib/CA.pm:594 msgid "Can't find X509v3 Basic Constraints in CA Certificate\n" msgstr "" "Impossible de trouver l'extension X509v3 Basic Constraints dans le " "certificat de la CA\n" #: ../lib/CA.pm:595 msgid "Import canceled" msgstr "Importation annule" #: ../lib/CA.pm:601 msgid "The selected CA Certificate is no valid CA certificate\n" msgstr "Le certificat slectionn n'est pas un certificat de CA valide\n" #: ../lib/CA.pm:602 #, c-format msgid "X509v3 Basic Constraint is set to: %s" msgstr "L'extension X509v3 Basic Constraint vaut: %s" #: ../lib/CA.pm:612 #, c-format msgid "" "Can't open Index file:\n" "%s" msgstr "" "Impossible d'ouvrir le fichier d'index:\n" "%s" #: ../lib/CA.pm:665 ../lib/CERT.pm:61 #, c-format msgid "Can't open Certificate directory: %s" msgstr "Impossible d'ouvrir le rpertoire de certificat: %s" #: ../lib/CA.pm:684 ../lib/CERT.pm:84 #, c-format msgid " Read Certificate: %s" msgstr " Lecture du certificat: %s" #: ../lib/CA.pm:694 #, c-format msgid "Can't read Certificate file: %s" msgstr "Impossible de lire le fichier de certificat: %s" #: ../lib/CA.pm:718 #, c-format msgid "Can't write Certificate file: %s" msgstr "Impossible d'crire le fichier de certificat: %s" #: ../lib/CA.pm:768 ../lib/CA.pm:927 msgid "Can't open Index file: " msgstr "Impossible d'ouvrir le fichier d'index: " #: ../lib/CA.pm:780 #, c-format msgid "Can't write CA Certificate file: %s" msgstr "Impossible d'crire le fichier de certificat de la CA: %s" #: ../lib/CA.pm:800 ../lib/CA.pm:934 msgid "Can't write Serial file: " msgstr "Impossible d'crire le numro de srie: " #: ../lib/CA.pm:814 #, c-format msgid "Can't write CA Key file: %s" msgstr "Impossible d'crire le fichier de cl prive de la CA: %s" #: ../lib/CA.pm:831 ../lib/CA.pm:1155 msgid "Generating CRL failed" msgstr "Echec de la generation de la CRL" #: ../lib/CA.pm:844 #, c-format msgid "Succesfully imported %d certificates\n" msgstr "Certificats %d imports avec succs\n" #: ../lib/CA.pm:845 msgid "Check the configuration of your imported CA." msgstr "vrification de la configuration de la CA importe." #: ../lib/CA.pm:862 ../lib/CA.pm:971 msgid "No CA name given" msgstr "Aucun nom de CA n'a t donn" #: ../lib/CA.pm:871 ../lib/CA.pm:876 ../lib/CA.pm:881 ../lib/CA.pm:886 #: ../lib/CA.pm:891 ../lib/CA.pm:896 msgid "Can't create directory: " msgstr "Impossible de crer le rpertoire: " #: ../lib/CA.pm:905 #, c-format msgid "Can't open template file %s %s" msgstr "Impossible d'ouvrir le fichier modle %s: %s" #: ../lib/CA.pm:910 ../lib/CA.pm:1207 ../lib/CA.pm:1274 ../lib/CERT.pm:637 #: ../lib/KEY.pm:227 ../lib/REQ.pm:740 #, c-format msgid "Can't open output file: %s: %s" msgstr "Impossible d'ouvrir le fichier de sortie %s: %s" #: ../lib/CA.pm:984 ../lib/KEY.pm:482 ../lib/REQ.pm:167 msgid "Generating key failed" msgstr "Echec de la gnration de la cl" #: ../lib/CA.pm:1018 ../lib/REQ.pm:193 msgid "Generating Request failed" msgstr "Echec de la gnration de la requte de certification" #: ../lib/CA.pm:1027 ../lib/CA.pm:1041 ../lib/CERT.pm:102 msgid "Can't read Certificate" msgstr "Impossible de lire le certificat" #: ../lib/CA.pm:1032 ../lib/CA.pm:1046 msgid "Can't write Certificate" msgstr "Impossible d'crire le certificat" #: ../lib/CA.pm:1086 msgid "Generating certificate failed" msgstr "Echec de la gnration du certificat" #: ../lib/CA.pm:1106 ../lib/CA.pm:1131 #, c-format msgid "Can't open ca certificate file %s %s" msgstr "Impossible d'ouvrir le fichier certificat de la CA %s %s" #: ../lib/CA.pm:1115 #, c-format msgid "Can't create certificate chain file: %s: %s" msgstr "" "Impossible de crer le fichier contenant la chane de certification: %s: %s" #: ../lib/CA.pm:1164 #, c-format msgid "CA: %s created" msgstr "CA: %s cre" #: ../lib/CA.pm:1199 #, c-format msgid "Can't open certificate chain file: %s: %s" msgstr "" "Impossible d'ouvrir le fichier contenant la chane de certification: %s: %s" #: ../lib/CA.pm:1220 #, c-format msgid "Certificate Chain succesfully exported to: %s" msgstr "Chane de certification exporte avec succs dans: %s " #: ../lib/CA.pm:1255 ../lib/CERT.pm:580 ../lib/GUI.pm:166 ../lib/KEY.pm:348 #: ../lib/REQ.pm:71 ../lib/REQ.pm:389 msgid "Can't read CA certificate" msgstr "Impossible de lire le certificat de la CA" #: ../lib/CA.pm:1265 #, c-format msgid "Invalid Format for export_ca_cert(): %s" msgstr "Format invalide pour la fonction export_ca_cert(): %s" #: ../lib/CA.pm:1287 #, c-format msgid "Certificate succesfully exported to: %s" msgstr "Certificat export avec succs dans: %s" #: ../lib/CA.pm:1320 msgid "Please give the output file" msgstr "Veuillez renseigner le nom du fichier de sortie" #: ../lib/CA.pm:1328 msgid "Please give the CA password to create the Revocation List" msgstr "" "Veuillez donner le mot de passe de la CA pour crer la Liste de Rvocation" #: ../lib/CA.pm:1349 msgid "" "Wrong CA password given\n" "Generating Revocation List failed" msgstr "" "Erreur dans le mot de passe de la CA\n" "Echec de la gnration de la Liste de Rvocation" #: ../lib/CA.pm:1353 msgid "" "CA Key not found\n" "Generating Revocation List failed" msgstr "" "Impossible de trouver la cl prive de la CA\n" "Echec de la gnration de la Liste de Rvocation" #: ../lib/CA.pm:1357 ../lib/CA.pm:1363 msgid "Generating Revocation List failed" msgstr "Echec de la gnration de la Liste de Rvocation" #: ../lib/CA.pm:1371 #, c-format msgid "CRL successfully exported to: %s" msgstr "CRL exporte avec succs dans : %s" #: ../lib/CERT.pm:143 ../lib/CERT.pm:199 ../lib/CERT.pm:322 ../lib/CERT.pm:381 #: ../lib/GUI.pm:851 msgid "Please select a Certificate first" msgstr "Veuillez d'abord slectionner un certificat" #: ../lib/CERT.pm:151 ../lib/CERT.pm:209 ../lib/CERT.pm:333 ../lib/CERT.pm:400 #: ../lib/GUI.pm:2706 ../lib/GUI.pm:2717 ../lib/OpenSSL.pm:702 #: ../lib/GUI/X509_browser.pm:276 msgid "VALID" msgstr "VALIDE" #: ../lib/CERT.pm:153 #, c-format msgid "" "Can't renew Certifikate with Status: %s\n" "Please revoke the Certificate first" msgstr "" "Impossible de renouveler le certificat dont le status est: %s\n" "Veuillez d'abord rvoquer le certificat" #: ../lib/CERT.pm:168 msgid "" "Key and Request are necessary for renewal of a Certificate\n" "Renewal is not possible!" msgstr "" "La cl prive et la requte de certification sont ncessaires pour le " "renouvellement du certificat\n" "Renouvellement de certificat impossible!" #: ../lib/CERT.pm:210 #, c-format msgid "Can't revoke Certifikate with Status: %s" msgstr "Impossible de rvoquer le certificat dont le status est: %s" #: ../lib/CERT.pm:256 msgid "" "Wrong CA password given\n" "Revoking the Certificate failed" msgstr "" "Erreur dans le mot de passe de la CA\n" "Echec de la rvocation du certificat" #: ../lib/CERT.pm:263 msgid "" "CA Key not found\n" "Revoking the Certificate failed" msgstr "" "Impossible de trouver la cl prive de la CA\n" "Echec de la rvocation du certificat" #: ../lib/CERT.pm:270 msgid "Revoking the Certificate failed" msgstr "Echec de la rvocation du certificat" #: ../lib/CERT.pm:290 msgid "Generating a new Revocation List failed" msgstr "Echec de la gnration de la nouvelle Liste de Rvocation" #: ../lib/CERT.pm:335 msgid "" "Can't delete VALID certificate!\n" "Please revoke the Certificate first." msgstr "" "Impossible de supprimer un certificat VALIDE!\n" "Veuillez d'abord rvoquer le certificat." #: ../lib/CERT.pm:401 msgid "Certificate seems not to be VALID" msgstr "Le certificat ne semble pas VALIDE" #: ../lib/CERT.pm:403 msgid "Export is not possible" msgstr "Export impossible" #: ../lib/CERT.pm:430 ../lib/KEY.pm:172 msgid "Please give at least the output file" msgstr "Veuillez rensigner au minimum le fichier de sortie" #: ../lib/CERT.pm:436 msgid "Key is necessary for export as PKCS#12" msgstr "La cl prive est ncessaire pour exporter au format PKCS#12" #: ../lib/CERT.pm:438 ../lib/CERT.pm:454 ../lib/KEY.pm:257 ../lib/KEY.pm:308 msgid "Export is not possible!" msgstr "Export impossible!" #: ../lib/CERT.pm:452 #, c-format msgid "Key is necessary for export as %s" msgstr "La cl prive est ncessaire pour exporter au format %s" #: ../lib/CERT.pm:492 ../lib/KEY.pm:216 #, c-format msgid "Can't open Certificate file: %s: %s" msgstr "Impossible d'ouvrir le fichier de certificat: %s: %s" #: ../lib/CERT.pm:525 ../lib/KEY.pm:288 msgid "Generating PKCS#12 failed" msgstr "Echec de la gnration du fichier PKCS#12" #: ../lib/CERT.pm:533 ../lib/CERT.pm:616 ../lib/KEY.pm:295 ../lib/KEY.pm:381 #, c-format msgid "Certificate and Key successfully exported to %s" msgstr "Le certificat et la cl prive ont t correctement exports dans %s" #: ../lib/CERT.pm:546 ../lib/CERT.pm:567 ../lib/REQ.pm:693 #, c-format msgid "Can't create temporary file: %s: %s" msgstr "Impossible de crer le fichier temporaire: %s: %s" #: ../lib/CERT.pm:558 #, c-format msgid "Can't read Key file: %s: %s" msgstr "Impossible d'ouvrir le fichier de cl prive: %s: %s" #: ../lib/CERT.pm:588 ../lib/KEY.pm:321 ../lib/KEY.pm:337 ../lib/KEY.pm:355 msgid "Can't create temporary file" msgstr "Cration du fichier temporaire impossible" #: ../lib/CERT.pm:609 ../lib/KEY.pm:375 #, c-format msgid "Generating %s file failed" msgstr "Echec de la gnration du fichier %s" #: ../lib/CERT.pm:628 #, c-format msgid "Invalid Format for export_cert(): %s" msgstr "Format invalide pour la fonction export_cert(): %s" #: ../lib/CERT.pm:648 #, c-format msgid "Certificate successfully exported to: %s" msgstr "Certificat export avec succs dans: %s" #: ../lib/GUI.pm:171 ../lib/GUI.pm:178 msgid "CA" msgstr "CA" #: ../lib/GUI.pm:185 msgid "CA Information" msgstr "Informations CA" #: ../lib/GUI.pm:204 msgid "Certificates" msgstr "Certificats" #: ../lib/GUI.pm:244 ../lib/GUI.pm:2689 ../lib/GUI/WORDS.pm:56 #: ../lib/GUI/X509_browser.pm:160 ../lib/GUI/X509_browser.pm:168 #: ../lib/GUI/X509_browser.pm:177 msgid "Common Name" msgstr "Nom Commun (Common Name)" #: ../lib/GUI.pm:245 ../lib/GUI.pm:1273 ../lib/GUI.pm:2314 #: ../lib/GUI/WORDS.pm:57 ../lib/GUI/X509_browser.pm:161 #: ../lib/GUI/X509_browser.pm:169 ../lib/GUI/X509_browser.pm:178 msgid "eMail Address" msgstr "Adresse eMail" #: ../lib/GUI.pm:246 ../lib/GUI/WORDS.pm:59 ../lib/GUI/X509_browser.pm:162 #: ../lib/GUI/X509_browser.pm:170 ../lib/GUI/X509_browser.pm:179 msgid "Organizational Unit" msgstr "Unit Organisationnelle (OU)" #: ../lib/GUI.pm:247 ../lib/GUI/WORDS.pm:58 ../lib/GUI/X509_browser.pm:163 #: ../lib/GUI/X509_browser.pm:171 ../lib/GUI/X509_browser.pm:180 msgid "Organization" msgstr "Organisation" #: ../lib/GUI.pm:248 ../lib/GUI/WORDS.pm:60 ../lib/GUI/X509_browser.pm:164 #: ../lib/GUI/X509_browser.pm:172 ../lib/GUI/X509_browser.pm:181 msgid "Location" msgstr "Localisation" #: ../lib/GUI.pm:249 ../lib/GUI/WORDS.pm:61 ../lib/GUI/X509_browser.pm:165 #: ../lib/GUI/X509_browser.pm:173 ../lib/GUI/X509_browser.pm:182 msgid "State" msgstr "Province" #: ../lib/GUI.pm:250 ../lib/GUI/WORDS.pm:62 ../lib/GUI/X509_browser.pm:166 #: ../lib/GUI/X509_browser.pm:174 ../lib/GUI/X509_browser.pm:183 msgid "Country" msgstr "Pays" #: ../lib/GUI.pm:251 ../lib/GUI/WORDS.pm:68 ../lib/GUI/X509_browser.pm:184 msgid "Type" msgstr "Type" #: ../lib/GUI.pm:265 msgid "Keys" msgstr "Cls" #: ../lib/GUI.pm:308 msgid "Requests" msgstr "Requtes de certification" #: ../lib/GUI.pm:399 #, c-format msgid " Actual CA: %s" msgstr " CA actuelle: %s" #: ../lib/GUI.pm:402 #, c-format msgid " Actual CA: %s - Certificates" msgstr " CA actuelle: %s - Certificats" #: ../lib/GUI.pm:405 #, c-format msgid " Actual CA: %s - Keys" msgstr " CA actuelle : %s - Cls" #: ../lib/GUI.pm:408 #, c-format msgid " Actual CA: %s - Requests" msgstr " CA actuelles: %s - Requtes de certification" #: ../lib/GUI.pm:457 ../lib/GUI.pm:1141 msgid "Open CA" msgstr "Ouvrir la CA" #: ../lib/GUI.pm:463 msgid "New CA" msgstr "Nouvelle CA" #: ../lib/GUI.pm:469 ../lib/GUI.pm:2382 msgid "Import CA" msgstr "Importer la CA" #: ../lib/GUI.pm:475 ../lib/GUI.pm:1143 msgid "Delete CA" msgstr "Supprimer la CA" #: ../lib/GUI.pm:485 ../lib/GUI.pm:524 ../lib/GUI.pm:592 msgid "Details" msgstr "Details" #: ../lib/GUI.pm:491 msgid "History" msgstr "Historique" #: ../lib/GUI.pm:497 msgid "Sub CA" msgstr "CA intermdiaire" #: ../lib/GUI.pm:503 msgid "Export CA" msgstr "Exporter la CA" #: ../lib/GUI.pm:509 ../lib/GUI.pm:1419 msgid "Export CRL" msgstr "Exporter la CRL" #: ../lib/GUI.pm:516 msgid "Export Chain" msgstr "Exporter la Chane" #: ../lib/GUI.pm:530 ../lib/GUI.pm:598 msgid "View" msgstr "Afficher" #: ../lib/GUI.pm:540 ../lib/GUI.pm:604 msgid "New" msgstr "Nouveau" #: ../lib/GUI.pm:547 ../lib/GUI.pm:578 msgid "Export" msgstr "Exporter" #: ../lib/GUI.pm:553 msgid "Revoke" msgstr "Revoquer" #: ../lib/GUI.pm:563 msgid "Renew" msgstr "Renouveler" #: ../lib/GUI.pm:570 ../lib/GUI.pm:584 ../lib/GUI.pm:627 msgid "Delete" msgstr "Supprimer" #: ../lib/GUI.pm:610 msgid "Import" msgstr "Importer" #: ../lib/GUI.pm:620 msgid "Sign" msgstr "Signer" #: ../lib/GUI.pm:646 msgid "_CA" msgstr "_CA" #: ../lib/GUI.pm:649 msgid "_Open CA" msgstr "_Ouvrir CA" #: ../lib/GUI.pm:654 msgid "_New CA" msgstr "_Nouvelle CA" #: ../lib/GUI.pm:659 msgid "_Delete CA" msgstr "_Supprimer CA" #: ../lib/GUI.pm:667 msgid "_Exit" msgstr "_Quitter" #: ../lib/GUI.pm:674 msgid "_Preferences" msgstr "_Preferences" #: ../lib/GUI.pm:677 msgid "Experts Only!!" msgstr "Reserv aux experts!!" #: ../lib/GUI.pm:682 msgid "OpenSSL _Configuration" msgstr "_Configuration OpenSSL" #: ../lib/GUI.pm:689 ../lib/GUI.pm:692 msgid "_Help" msgstr "_Aide" #: ../lib/GUI.pm:697 msgid "_About TinyCA" msgstr "_A propos de TinyCA" #: ../lib/GUI.pm:728 msgid "Invalid mode for show_text():" msgstr "Mode invalide pour la fonction show_text():" #: ../lib/GUI.pm:733 ../lib/GUI.pm:848 ../lib/REQ.pm:236 ../lib/REQ.pm:367 msgid "Please select a Request first" msgstr "Veuillez d'abord slectionner une requte de certification" #: ../lib/GUI.pm:736 msgid "Please select a certificate first" msgstr "Veuillez d'abord slectionner un certificat" #: ../lib/GUI.pm:752 ../lib/GUI.pm:867 ../lib/GUI/X509_browser.pm:456 #: ../lib/GUI/X509_browser.pm:515 msgid "Can't read file" msgstr "Impossible de lire le fichier" #: ../lib/GUI.pm:754 msgid "Request" msgstr "Requte de certification" #: ../lib/GUI.pm:754 msgid "Certificate" msgstr "Certificat" #: ../lib/GUI.pm:815 #, c-format msgid "Invalid mode for _show_popup_menu(): %s" msgstr "Mode erron pour la fonction show_popup_menu(): %s" #: ../lib/GUI.pm:843 msgid "Invalid mode for show_details():" msgstr "Mode erron pour la fonction show_details()" #: ../lib/GUI.pm:869 ../lib/GUI.pm:969 ../lib/GUI.pm:3040 msgid "Request Details" msgstr "Dtails de la requte de certification" #: ../lib/GUI.pm:869 ../lib/GUI.pm:969 ../lib/GUI.pm:2897 msgid "Certificate Details" msgstr "Dtails du certificat" #: ../lib/GUI.pm:911 ../lib/GUI.pm:1679 ../lib/GUI.pm:3061 msgid "Import Request" msgstr "Importer la requte de certification" #: ../lib/GUI.pm:913 ../lib/GUI.pm:2438 msgid "Import CA Certificate" msgstr "Importer le Certificat de la CA" #: ../lib/GUI.pm:921 msgid "Do you want to import the following Certificate Request?" msgstr "Voulez-vous importer la requte de certification suivante ?" #: ../lib/GUI.pm:923 msgid "Do you want to import the following CA Certificate?" msgstr "Voulez-vous importer le certificat de CA suivant ?" #: ../lib/GUI.pm:977 msgid "Subject DN" msgstr "Sujet DN" #: ../lib/GUI.pm:1001 msgid "Issuer" msgstr "Emetteur" #: ../lib/GUI.pm:1027 msgid "Validity" msgstr "Validit" #: ../lib/GUI.pm:1043 msgid "Key/Request Details:" msgstr "Dtails de Cl/Requte:" #: ../lib/GUI.pm:1043 msgid "Key/Certificate Details:" msgstr "Dtails de Cl/Certificat:" #: ../lib/GUI.pm:1059 msgid "Fingerprints" msgstr "Empreinte Numrique" #: ../lib/GUI.pm:1075 msgid "Requested X.509 Extensions" msgstr "Extensions X.509 demandes" #: ../lib/GUI.pm:1075 msgid "X.509v3 Extensions" msgstr "Extensions X.509v3" #: ../lib/GUI.pm:1100 msgid "Requested Netscape Extensions" msgstr "Extensions Netscape demandes" #: ../lib/GUI.pm:1100 msgid "Netscape Extensions" msgstr "Extensions Netscape" #: ../lib/GUI.pm:1145 msgid "Invalid action given: " msgstr "Action invalide : " #: ../lib/GUI.pm:1167 ../lib/GUI.pm:1213 msgid "Invalid action for show_select_ca_dialog(): " msgstr "Action invalide pour la fonction show_select_ca_dialog(): " #: ../lib/GUI.pm:1189 msgid "Available CAs" msgstr "CAs disponibles" #: ../lib/GUI.pm:1245 msgid "Create Request" msgstr "Crer Requte" #: ../lib/GUI.pm:1246 msgid "Create a new Certificate Request" msgstr "Crer une nouvelle requte de certificat" #: ../lib/GUI.pm:1260 msgid "Common Name (eg, your Name," msgstr "Nom commun (ie. votre Nom," #: ../lib/GUI.pm:1265 msgid "your eMail Address" msgstr "votre addresse eMail" #: ../lib/GUI.pm:1269 msgid "or the Servers Name)" msgstr "ou le Nom du serveur)" #: ../lib/GUI.pm:1277 msgid "Password (protect your private Key):" msgstr "Mot de passe (protrge votre Cl prive):" #: ../lib/GUI.pm:1281 ../lib/GUI.pm:2294 msgid "Password (confirmation):" msgstr "Password (confirmation):" #: ../lib/GUI.pm:1285 ../lib/GUI.pm:2286 msgid "Country Name (2 letter code):" msgstr "Pays (code sur 2 lettres):" #: ../lib/GUI.pm:1289 ../lib/GUI.pm:2298 msgid "State or Province Name:" msgstr "Etat ou Nom de Province:" #: ../lib/GUI.pm:1293 ../lib/GUI.pm:2302 msgid "Locality Name (eg. city):" msgstr "Localit (ie. ville):" #: ../lib/GUI.pm:1297 ../lib/GUI.pm:2306 msgid "Organization Name (eg. company):" msgstr "Nom de l'Organisation (ie. entreprise):" #: ../lib/GUI.pm:1303 ../lib/GUI.pm:1308 ../lib/GUI.pm:2310 msgid "Organizational Unit Name (eg. section):" msgstr "Unit Organisationelle (ie. dpartement):" #: ../lib/GUI.pm:1313 ../lib/GUI.pm:2322 ../lib/GUI/WORDS.pm:65 msgid "Keylength" msgstr "Longueur de la cl" #: ../lib/GUI.pm:1321 ../lib/GUI.pm:2352 msgid "Digest" msgstr "Empreinte" #: ../lib/GUI.pm:1328 msgid "Algorithm" msgstr "Algorithme" #: ../lib/GUI.pm:1359 ../lib/GUI.pm:2918 msgid "Revoke Certificate" msgstr "Revoquer le Certificat" #: ../lib/GUI.pm:1368 ../lib/GUI.pm:1444 ../lib/GUI.pm:2093 msgid "CA Password:" msgstr "Mot de passe de la CA:" #: ../lib/GUI.pm:1374 msgid "Revocation Reason:" msgstr "Raison de la Revocation:" #: ../lib/GUI.pm:1419 msgid "Export Revocation List to File" msgstr "Exporter la Liste de Revocation dans un fichier" #: ../lib/GUI.pm:1427 ../lib/GUI.pm:1515 ../lib/GUI.pm:1563 ../lib/GUI.pm:1687 #: ../lib/GUI.pm:1755 msgid "File:" msgstr "Fichier:" #: ../lib/GUI.pm:1438 ../lib/GUI.pm:1526 ../lib/GUI.pm:1574 ../lib/GUI.pm:1697 #: ../lib/GUI.pm:1772 ../lib/GUI.pm:2435 ../lib/GUI.pm:2454 ../lib/GUI.pm:2473 #: ../lib/GUI.pm:2492 msgid "Browse..." msgstr "Parcourrir" #: ../lib/GUI.pm:1441 ../lib/GUI.pm:1554 ../lib/GUI.pm:1577 msgid "Export CA Certificate" msgstr "Exporter le Certificat de la CA" #: ../lib/GUI.pm:1448 ../lib/GUI.pm:2099 ../lib/GUI.pm:2318 msgid "Valid for (Days):" msgstr "Valide pendant (Jours):" #: ../lib/GUI.pm:1452 ../lib/GUI.pm:1581 ../lib/GUI.pm:1779 msgid "Export Format:" msgstr "Format d'Export:" #: ../lib/GUI.pm:1458 ../lib/GUI.pm:1587 msgid "PEM" msgstr "PEM" #: ../lib/GUI.pm:1467 ../lib/GUI.pm:1596 msgid "DER" msgstr "DER" #: ../lib/GUI.pm:1476 ../lib/GUI.pm:1605 msgid "TXT" msgstr "TXT" #: ../lib/GUI.pm:1507 ../lib/GUI.pm:1529 msgid "Export CA Certificate Chain" msgstr "Exporter la Chane de certification de la CA" #: ../lib/GUI.pm:1508 msgid "Export CA Certificate Chain to File" msgstr "Exporter la Chane de certification de la CA dans un fichier" #: ../lib/GUI.pm:1555 msgid "Export CA Certificate to File" msgstr "Exporter le Certificat de la CA dans le ficher" #: ../lib/GUI.pm:1635 ../lib/GUI.pm:1636 msgid "Export Key without Passphrase" msgstr "Exporter la cl sans Passphrase" #: ../lib/GUI.pm:1640 msgid "I hope you know what you're doing?" msgstr "J'espre que vous savez ce que vous faites!" #: ../lib/GUI.pm:1644 msgid "The Key Passphrase is needed for decryption of the Key" msgstr "La Passphrase de dchiffrement de la Cl prive est ncessaire" #: ../lib/GUI.pm:1653 msgid "Password:" msgstr "Mot de passe:" #: ../lib/GUI.pm:1679 ../lib/GUI.pm:1700 msgid "Import Request from File" msgstr "Importe la requte depuis un fichier" #: ../lib/GUI.pm:1721 ../lib/GUI.pm:1759 ../lib/GUI.pm:2911 msgid "Export Certificate" msgstr "Export de Certificat" #: ../lib/GUI.pm:1723 ../lib/GUI.pm:1761 ../lib/GUI.pm:2868 msgid "Export Key" msgstr "Export de la Cl" #: ../lib/GUI.pm:1726 msgid "Invalid mode for show_export_dialog(): " msgstr "Mode erron pour la fonction show_export_dialog():" #: ../lib/GUI.pm:1743 msgid "Export Certificate to File" msgstr "Export de Certificat dans un Fichier" #: ../lib/GUI.pm:1745 msgid "Export Key to File" msgstr "Export de Cl dans un Fichier" #: ../lib/GUI.pm:1783 msgid "PEM (Certificate)" msgstr "PEM (Certificat)" #: ../lib/GUI.pm:1785 msgid "PEM (Key)" msgstr "PEM (Cl)" #: ../lib/GUI.pm:1794 msgid "DER (Certificate)" msgstr "DER (Certificat)" #: ../lib/GUI.pm:1796 msgid "DER (Key without Passphrase)" msgstr "DER (Cl sans Mot de passe)" #: ../lib/GUI.pm:1804 msgid "PKCS#12 (Certificate & Key)" msgstr "PKCS#12 (Certificat & Cl)" #: ../lib/GUI.pm:1811 msgid "Zip (Certificate & Key)" msgstr "Zip (Certificat & Cl)" #: ../lib/GUI.pm:1821 msgid "Tar (Certificate & Key)" msgstr "Tar (Certificat & Cl)" #: ../lib/GUI.pm:1833 msgid "TXT (Certificate)" msgstr "TXT (Certificat)" #: ../lib/GUI.pm:1839 msgid "Without Passphrase (PEM/PKCS#12)" msgstr "Sans Mot de passe (PEM/PKCS#12)" #: ../lib/GUI.pm:1845 ../lib/GUI.pm:1872 ../lib/GUI.pm:1891 ../lib/GUI.pm:2018 #: ../lib/GUI.pm:2043 ../lib/GUI.pm:2196 msgid "Yes" msgstr "Oui" #: ../lib/GUI.pm:1850 ../lib/GUI.pm:1877 ../lib/GUI.pm:1896 ../lib/GUI.pm:2024 #: ../lib/GUI.pm:2049 ../lib/GUI.pm:2202 msgid "No" msgstr "Non" #: ../lib/GUI.pm:1860 msgid "Include Key (PEM)" msgstr "Inclure la Cl (PEM)" #: ../lib/GUI.pm:1865 msgid "Include Certificate (PEM)" msgstr "Inclure le Certificat (PEM)" #: ../lib/GUI.pm:1885 msgid "Include Fingerprint (PEM)" msgstr "Inclure l'empreinte digitale (PEM)" #: ../lib/GUI.pm:1993 ../lib/GUI.pm:1994 msgid "Export to PKCS#12" msgstr "Exporter au format PKCS#12" #: ../lib/GUI.pm:2001 msgid "Key Password:" msgstr "Mot de passe de la Cl:" #: ../lib/GUI.pm:2005 msgid "Export Password:" msgstr "Mot de passe d'Export:" #: ../lib/GUI.pm:2008 msgid "Friendly Name:" msgstr "" #: ../lib/GUI.pm:2012 msgid "Without Passphrase" msgstr "Sans Mot de passe" #: ../lib/GUI.pm:2037 msgid "Add CA Certificate to PKCS#12 structure" msgstr "Ajouter le Certificat de la Ca la structure PKCS#12" #: ../lib/GUI.pm:2085 ../lib/GUI.pm:3068 msgid "Sign Request" msgstr "Signer la Requte" #: ../lib/GUI.pm:2085 msgid "Sign Request/Create Certificate" msgstr "Signer la Requte/Crer le Certificat" #: ../lib/GUI.pm:2110 ../lib/GUI.pm:2155 msgid "Subject alternative name (IP Address):" msgstr "Nom Complmentaire (Subject alternative name) - Adresse IP:" #: ../lib/GUI.pm:2113 ../lib/GUI.pm:2158 msgid "Subject alternative name (DNS Name):" msgstr "Nom Complmentaire (Subject alternative name) - Nom DNS:" #: ../lib/GUI.pm:2116 ../lib/GUI.pm:2164 msgid "Subject alternative name (raw):" msgstr "Nom Complmentaire (Subject alternative name) - (raw):" #: ../lib/GUI.pm:2124 ../lib/GUI.pm:2172 msgid "Extended Key Usage:" msgstr "Usage Etendu de la Cl (Extended Key Usage):" #: ../lib/GUI.pm:2131 msgid "Netscape SSL Server Name:" msgstr "Nom de serveur Netscape SSL:" #: ../lib/GUI.pm:2138 ../lib/GUI.pm:2179 msgid "Netscape Revocation URL:" msgstr "URL de Rvocation Netscape:" #: ../lib/GUI.pm:2145 ../lib/GUI.pm:2186 msgid "Netscape Renewal URL:" msgstr "URL de Renouvellement Netscape:" #: ../lib/GUI.pm:2161 msgid "Subject alternative name (eMail Address):" msgstr "Nom Complmentaire (Subject alternative name) - Adresse email:" #: ../lib/GUI.pm:2208 msgid "Add eMail Address to Subject DN:" msgstr "Ajouter l'adresse eMail au DN du Sujet:" #: ../lib/GUI.pm:2238 ../lib/GUI.pm:2242 msgid "Create CA" msgstr "Creer une CA" #: ../lib/GUI.pm:2238 msgid "Create a new Sub CA" msgstr "Creer une nouvelle CA intermdiaire" #: ../lib/GUI.pm:2242 msgid "Create a new CA" msgstr "Creer une nouvelle CA" #: ../lib/GUI.pm:2255 msgid "CA Password (for creating the new CA):" msgstr "Mot de passe de la CA (pour la cration de la nouvelle CA):" #: ../lib/GUI.pm:2266 ../lib/GUI.pm:2403 msgid "Name (for local storage):" msgstr "Nom (pour stockage local):" #: ../lib/GUI.pm:2273 msgid "Data for CA Certificate" msgstr "Informations pour le Certificat de la CA" #: ../lib/GUI.pm:2282 msgid "Common Name (for the CA):" msgstr "CN (Common Name) pour la CA:" #: ../lib/GUI.pm:2290 msgid "Password (needed for signing):" msgstr "Mot de passe (requis pour la signature):" #: ../lib/GUI.pm:2382 msgid "Import an existing CA into TinyCA" msgstr "Importer une CA exitante" #: ../lib/GUI.pm:2393 msgid "Password of the private CA key (Needed for import):" msgstr "Mot de passe de la Cl prive (Requis pour l'importation):" #: ../lib/GUI.pm:2407 msgid "New password for the CA:" msgstr "Nouveau Mot de passe pour la CA:" #: ../lib/GUI.pm:2411 msgid "Confirm password:" msgstr "Confirmer le Mot de passe:" #: ../lib/GUI.pm:2416 msgid "Files/Directories to import" msgstr "Fichiers/Rpertoires importer" #: ../lib/GUI.pm:2424 msgid "CA Certificate (PEM/DER):" msgstr "Certificat de la CA (PEM/DER):" #: ../lib/GUI.pm:2443 msgid "CA private key (PEM/DER):" msgstr "Cl prive de la CA (PEM/DER):" #: ../lib/GUI.pm:2457 msgid "Import CA private Key" msgstr "Importer la Cl prive de la CA" #: ../lib/GUI.pm:2462 msgid "OpenSSL Index File (index.txt):" msgstr "Fichier d'Index d'OpenSSL (index.txt):" #: ../lib/GUI.pm:2476 msgid "Import Index File" msgstr "Importer le fichier d'index" #: ../lib/GUI.pm:2481 msgid "Directory containing certificates (PEM/DER):" msgstr "Rpertoire contenant les Certificats (PEM/DER):" #: ../lib/GUI.pm:2495 msgid "Import Certificates from directory" msgstr "Importer les Certificats du rpertoire" #: ../lib/GUI.pm:2509 msgid "You are kidding, are you??" msgstr "Vous voulez rire, n'est-ce pas ?" #: ../lib/GUI.pm:2531 msgid "Spanish: Ramon Pons Vivanco " msgstr "Espagnol: Ramon Pons Vivanco " #: ../lib/GUI.pm:2532 msgid "Czech: Robert Wolf " msgstr "Tcheck: Robert Wolf " #: ../lib/GUI.pm:2533 msgid "French: Thibault Le Meur " msgstr "French: Thibault Le Meur " #: ../lib/GUI.pm:2549 msgid "Do you really want to delete the selected Request?" msgstr "Voulez-vous vraiment dtruire la Requte slectionne?" #: ../lib/GUI.pm:2551 msgid "Do you really want to delete the selected Key?" msgstr "Voulez-vous vraiment dtruire la Cl slectionne?" #: ../lib/GUI.pm:2553 msgid "Do you really want to delete the selected Certificate?" msgstr "Voulez-vous vraiment dtruire le Certificat slectionn?" #: ../lib/GUI.pm:2603 msgid "Overwrite Request/Key" msgstr "Ecraser la Requte/Cl" #: ../lib/GUI.pm:2609 msgid "The Key or the Request is already existing!" msgstr "La Cl ou la Requte existe dj!" #: ../lib/GUI.pm:2614 msgid "You won't be able to sign this Request" msgstr "Vous ne pourrez pas signer cette Requte" #: ../lib/GUI.pm:2619 msgid "if the corresponding certificate is still valid" msgstr "Si le Certificat correspondant est tjours valide" #: ../lib/GUI.pm:2636 msgid "The Certificate will be longer valid than your CA!" msgstr "" "La date de validit du Certificat dpasse la date de validit de la CA!" #: ../lib/GUI.pm:2638 msgid "This may cause problems with some software!!" msgstr "Cela peut causer des problmes avec certains logiciels!!" #: ../lib/GUI.pm:2653 msgid "Expirationdate Warning" msgstr "Avertissement de date d'Expiration" #: ../lib/GUI.pm:2688 ../lib/GUI/WORDS.pm:69 msgid "Serial" msgstr "Numro de Srie" #: ../lib/GUI.pm:2690 ../lib/GUI/WORDS.pm:70 ../lib/GUI/X509_browser.pm:175 msgid "Status" msgstr "Etat" #: ../lib/GUI.pm:2691 ../lib/GUI/WORDS.pm:64 msgid "Expiration Date" msgstr "Date d'Expiration" #: ../lib/GUI.pm:2692 msgid "Revocation Date" msgstr "Date de Rvocation" #: ../lib/GUI.pm:2693 msgid "Revocation Reason" msgstr "Cause de la Rvocation" #: ../lib/GUI.pm:2719 ../lib/OpenSSL.pm:705 msgid "EXPIRED" msgstr "EXPIRE" #: ../lib/GUI.pm:2721 ../lib/OpenSSL.pm:718 msgid "REVOKED" msgstr "REVOQUE" #: ../lib/GUI.pm:2741 msgid "CA History" msgstr "Historique de la CA" #: ../lib/GUI.pm:2775 msgid "Overwrite Certificate" msgstr "Ecraser le Certificat" #: ../lib/GUI.pm:2781 msgid "There seems to be a certificate with the same Subject already." msgstr "Il semble qu'un Certificat avec le mme Sujet existe dj." #: ../lib/GUI.pm:2786 msgid "" "Creating a new one (overwrite) will fail if it's not revoked or expired!" msgstr "" "La cration d'un nouveau Certificat (Ecrasement) chouera s'il l'ancien " "n'est pas rvoqu ou n'a pas expir!" #: ../lib/GUI.pm:2792 msgid "Really try to overwrite the Certificate?" msgstr "Voulez-vous vraiment essayer d'craser le Certificat?" #: ../lib/GUI.pm:2825 msgid "Convert CA" msgstr "Convertir la CA" #: ../lib/GUI.pm:2833 msgid "" "This CA seems to be created with openssl 0.9.6x. And it seems like you have " "switched to openssl 0.9.7x." msgstr "" "Il semble que ce CA a t cr avec OpenSSL 0.9.6x. Et il semble que vous " "avez mis jour OpenSSL en version 0.9.7x." #: ../lib/GUI.pm:2841 msgid "" "You won't be able to revoke the existing certificates without converting the " "index file of this CA to the new format." msgstr "" "Vous ne pourrez pas rvoquer les certificats existant sans convertir le " "fichier d'index de cette CA dans le nouveau format." #: ../lib/GUI.pm:2849 msgid "" "Attention: it will not be easy to switch back, this has to be done manually" msgstr "" "Attention: il ne sera pas facil de revenir en arrire, cela doit tre fait " "manuellement" #: ../lib/GUI.pm:2875 msgid "Delete Key" msgstr "Supprimer la Cl" #: ../lib/GUI.pm:2904 msgid "View Certificate" msgstr "Afficher le Certificat" #: ../lib/GUI.pm:2925 msgid "Renew Certificate" msgstr "Renouveler le Certificat" #: ../lib/GUI.pm:2933 msgid "Delete Certificate" msgstr "Supprimer le Certificat" #: ../lib/GUI.pm:2956 msgid "Create Key and Certificate (Server)" msgstr "Crer une Cl et un Certificat (Serveur)" #: ../lib/GUI.pm:2962 msgid "Create Key and Certificate (Client)" msgstr "Crer une Cl et un Certificat (Client)" #: ../lib/GUI.pm:2983 msgid "Renew Certificate (Server)" msgstr "Renouveler le Certificat (Serveur)" #: ../lib/GUI.pm:2990 msgid "Renew Certificate (Client)" msgstr "Renouveler le Certificat (Client)" #: ../lib/GUI.pm:3012 msgid "Sign Request (Server)" msgstr "Signer la Requte (Serveur)" #: ../lib/GUI.pm:3019 msgid "Sign Request (Client)" msgstr "Signer la Requte (Client)" #: ../lib/GUI.pm:3047 msgid "View Request" msgstr "Afficher la Requte" #: ../lib/GUI.pm:3054 msgid "New Request" msgstr "Nouvelle Requte" #: ../lib/GUI.pm:3076 msgid "Delete Request" msgstr "Supprimer la Requte" #: ../lib/HELPERS.pm:207 #, c-format msgid "Can't write exportdir: %s, %s" msgstr "Impossible d'crire dans le rperoire d'export: %s: %s" #: ../lib/KEY.pm:45 ../lib/KEY.pm:137 msgid "Please select a Key first" msgstr "Veuillez d'abord slectionner une Cl" #: ../lib/KEY.pm:54 msgid "Key file not found:" msgstr "Fichier contenant la Cl introuvable:" #: ../lib/KEY.pm:101 msgid "Can't open key directory" msgstr "Impossible d'ouvrir le rpertoire des Cls" #: ../lib/KEY.pm:194 msgid "" "Wrong password given\n" "Decrypting of the Key failed\n" "Export is not possible" msgstr "" "Mauvais Mot de passe renseign\n" "Echec de dchiffrement de la Cl\n" "Export impossible" #: ../lib/KEY.pm:199 msgid "Converting failed, Export not possible" msgstr "Echec de la conversion, Export impossible" #: ../lib/KEY.pm:206 ../lib/KEY.pm:410 #, c-format msgid "Can't open Key file: %s: %s" msgstr "Impossible d'ouvrir le fichier de Cl: %s: %s" #: ../lib/KEY.pm:239 #, c-format msgid "Key succesfully exported to %s" msgstr "Cle exporte avec succs: %s" #: ../lib/KEY.pm:255 msgid "Certificate is necessary for export as PKCS#12" msgstr "Un Certificat est requis pour l'export au format PKCS#12" #: ../lib/KEY.pm:305 #, c-format msgid "Certificate is necessary for export as %s file" msgstr "Un Certificat est requis pour l'export au format %s" #: ../lib/KEY.pm:330 msgid "Can't read Key file" msgstr "Lecture impossible du fichier de Cl" #: ../lib/KEY.pm:392 #, c-format msgid "Invalid format for export requested: %s" msgstr "Format invalide pour exporter une Requte: %s" #: ../lib/KEY.pm:398 msgid "Something Failed ??" msgstr "Une erreur c'est produite??" #: ../lib/KEY.pm:448 #, c-format msgid "" "Can't open Key file:\n" "%s" msgstr "" "Lecture impossible du fichier de Cl:\n" "%s" #: ../lib/KEY.pm:485 msgid "The password for your old CA Key is wrong" msgstr "Le mot de passe de votre ancienne CA est incorrect" #: ../lib/OpenSSL.pm:73 msgid "Creating DSA key in progress..." msgstr "Cration de la Cl DSA en cours..." #: ../lib/OpenSSL.pm:107 msgid "Creating RSA key in progress..." msgstr "Cration de la Cl RSA en cours..." #: ../lib/OpenSSL.pm:456 #, c-format msgid "Can't open CRL '%s': %s" msgstr "Impossible d'ouvrir la CRL '%s': %s" #: ../lib/OpenSSL.pm:471 ../lib/OpenSSL.pm:484 msgid "Error converting CRL" msgstr "Erreur de conversion de la CRL" #: ../lib/OpenSSL.pm:582 ../lib/OpenSSL.pm:595 msgid "Error converting Certificate" msgstr "Erreur de conversion du Certificat" #: ../lib/OpenSSL.pm:655 ../lib/OpenSSL.pm:672 msgid "Error reading fingerprint from Certificate" msgstr "Erreur de lecture de l'empreinte digitale du Certificat" #: ../lib/OpenSSL.pm:690 msgid "Error reading subject from Certificate" msgstr "Erreur de lecture du Sujet du Certificat" #: ../lib/OpenSSL.pm:700 msgid "Can't read CRL" msgstr "Impossible de lire la CRL" #: ../lib/OpenSSL.pm:723 msgid "UNDEFINED" msgstr "NON DEFINI" #: ../lib/OpenSSL.pm:750 #, c-format msgid "Can't open Request file %s: %s" msgstr "Impossible d'ouvrir le fichier de Requte %s: %s" #: ../lib/OpenSSL.pm:767 ../lib/OpenSSL.pm:781 ../lib/REQ.pm:685 msgid "Error converting Request" msgstr "Erreur de conversion de la Requte" #: ../lib/OpenSSL.pm:863 #, c-format msgid "Can't open file %s: %s" msgstr "Impossible d'ouvrir le fichier %s: %s" #: ../lib/OpenSSL.pm:981 ../lib/OpenSSL.pm:1013 #, c-format msgid "Can't read index %s: %s" msgstr "Impossible de lire l'Index %s: %s" #: ../lib/OpenSSL.pm:1023 #, c-format msgid "Can't write index %s: %s" msgstr "Impossible d'crire l'Index %s: %s" #: ../lib/REQ.pm:58 #, c-format msgid "Strange value for 'opts': %s" msgstr "Valeur trange pour 'opts': %s" #: ../lib/REQ.pm:101 msgid "Please specify at least Common Name " msgstr "Veuillez au minimum spcifier le CN " #: ../lib/REQ.pm:102 msgid "and Password" msgstr "et le Mot de passe" #: ../lib/REQ.pm:246 ../lib/REQ.pm:376 msgid "Request file not found" msgstr "Fichier de Requte introuvable" #: ../lib/REQ.pm:299 msgid "Can't open Request directory" msgstr "Impossible d'ouvrir le rpertoire de Requtes" #: ../lib/REQ.pm:320 #, c-format msgid " Read Request: %s" msgstr " Lecture de la Requte: %s" #: ../lib/REQ.pm:414 msgid "Can't read Request file" msgstr "Impossible de lire le fichier de Requte" #: ../lib/REQ.pm:458 msgid "Can't read serial" msgstr "Impossible de lire le Numro de Srie" #: ../lib/REQ.pm:531 msgid "" "Wrong CA password given\n" "Signing of the Request failed" msgstr "" "Mauvais Mot de passe de CA rensign\n" "Echec de la signature de la Requte" #: ../lib/REQ.pm:537 msgid "" "CA Key not found\n" "Signing of the Request failed" msgstr "" "Cl de la CA introuvable\n" "Echec de la signature de la Requte" #: ../lib/REQ.pm:543 msgid "" "Certificate already existing\n" "Signing of the Request failed" msgstr "" "Le Certificat existe dj\n" "Echec de la signature de la Requte" #: ../lib/REQ.pm:549 msgid "" "Invalid IP Address given\n" "Signing of the Request failed" msgstr "" "Adresse IP fournie invalide\n" "Echec de la signature de la Requte" #: ../lib/REQ.pm:556 ../lib/REQ.pm:574 msgid "Signing of the Request failed" msgstr "Echec de la signature de la Requte" #: ../lib/REQ.pm:581 msgid "Can't read Certificate file" msgstr "Impossible de lire le fichier du Certificat" #: ../lib/REQ.pm:587 ../lib/REQ.pm:597 msgid "Can't write Certificate file" msgstr "Impossible d'crire le fichier de Certificat" #: ../lib/REQ.pm:609 msgid "" "Request signed succesfully.\n" "Certificate created" msgstr "" "Requte signe avec succs.\n" "Certifica cr." #: ../lib/REQ.pm:650 msgid "Please select a Request file first" msgstr "Veuillez d'abord slectionner une fichier de Requte" #: ../lib/REQ.pm:656 msgid "Can't find Request file: " msgstr "Impossible de rtouver le fichier de Requte: " #: ../lib/REQ.pm:662 msgid "Can't read Request file:" msgstr "Impossible de lire le fichier de Requte:" #: ../lib/REQ.pm:708 msgid "Parsing Request failed" msgstr "Echec de l'analyse du fichier de Requte" #: ../lib/TCONFIG.pm:42 msgid "Please select a CA first" msgstr "Veuillez d'abord slectionner une CA" #: ../lib/TCONFIG.pm:49 msgid "Can't open configuration" msgstr "Impossible d'ouvrir le fichier de configuration" #: ../lib/TCONFIG.pm:284 ../lib/TCONFIG.pm:299 ../lib/GUI/TCONFIG.pm:47 #: ../lib/GUI/TCONFIG.pm:1302 msgid "Can't get CA name" msgstr "Impossible d'obtenir le nom de la CA" #: ../lib/TCONFIG.pm:327 msgid "Can't open configfile" msgstr "impossible d'ouvrir le fichier de configuration" #: ../lib/GUI/HELPERS.pm:54 ../lib/GUI/HELPERS.pm:94 ../lib/GUI/HELPERS.pm:135 msgid "Command Details" msgstr "Dtails " #: ../lib/GUI/HELPERS.pm:305 msgid "Request Files (*.pem, *.der, *.req)" msgstr "Fichiers de Requtes (*.pem, *.der, *.req)" #: ../lib/GUI/HELPERS.pm:312 msgid "All Files (*.*)" msgstr "Tout fichier (*.*)" #: ../lib/GUI/TCONFIG.pm:74 msgid "" "All Settings are written unchanged to openssl.conf.\n" "So please study the documentation of OpenSSL if you don't know exactly what " "to do.\n" "If you are still unsure - keep the defaults and everything is expected to " "work fine." msgstr "" "Toutes les paramtres sont crits tels quels dans openssl.conf.\n" "Veuillez donc consulter la documentation d'OpenSSL si vous n'te pas sr de " "ce que vous faites.\n" "En cas de doute, conservez les paramtres par dfaut et tout devrait bien " "fonctionner." #: ../lib/GUI/TCONFIG.pm:108 ../lib/GUI/TCONFIG.pm:116 msgid "OpenSSL Configuration" msgstr "Configuration d'OpenSSL" #: ../lib/GUI/TCONFIG.pm:129 msgid "Only change these options, if you really know, what you are doing!!" msgstr "Ne changez ces options que si vous savez vraiment ce que vous faites!!" #: ../lib/GUI/TCONFIG.pm:137 msgid "You should be aware, that some options may break some crappy software!!" msgstr "" "Attention, certaines de ces options peuvent tre incompatibles avec d'autres " "logiciels!!" #: ../lib/GUI/TCONFIG.pm:146 ../lib/GUI/TCONFIG.pm:1348 msgid "If you are unsure: leave the defaults untouched" msgstr "En cas de doute: conservez les paramtres par dfaut" #: ../lib/GUI/TCONFIG.pm:182 msgid "These Settings are passed to OpenSSL for creating Server Certificates" msgstr "" "Ces options sont passes OpenSSL pour la cration des Certificats de " "Serveurs" #: ../lib/GUI/TCONFIG.pm:187 ../lib/GUI/TCONFIG.pm:612 #: ../lib/GUI/TCONFIG.pm:1019 ../lib/GUI/TCONFIG.pm:1239 #: ../lib/GUI/TCONFIG.pm:1340 msgid "Multiple Values can be separated by \",\"" msgstr "Les valeurs multiples peuvent tre spares par des \",\"" #: ../lib/GUI/TCONFIG.pm:207 ../lib/GUI/TCONFIG.pm:209 msgid "Server Certificate Settings" msgstr "Paramtres pour les Certificats Serveur" #: ../lib/GUI/TCONFIG.pm:215 ../lib/GUI/TCONFIG.pm:638 #: ../lib/GUI/TCONFIG.pm:1047 ../lib/GUI/TCONFIG.pm:1462 msgid "Subject alternative name (subjectAltName):" msgstr "Nom complmentaire (subjectAltName):" #: ../lib/GUI/TCONFIG.pm:312 ../lib/GUI/TCONFIG.pm:744 #: ../lib/GUI/TCONFIG.pm:1107 ../lib/GUI/TCONFIG.pm:1358 msgid "Key Usage (keyUsage):" msgstr "Utilisation de la Cl (keyUsage):" #: ../lib/GUI/TCONFIG.pm:391 ../lib/GUI/TCONFIG.pm:819 msgid "Extended Key Usage (extendedKeyUsage):" msgstr "Extension d'Utilisation de la Cl (extendedKeyUsage):" #: ../lib/GUI/TCONFIG.pm:467 ../lib/GUI/TCONFIG.pm:894 #: ../lib/GUI/TCONFIG.pm:1076 ../lib/GUI/TCONFIG.pm:1431 msgid "Netscape Certificate Type (nsCertType):" msgstr "Type de Certificat Netscape (nsCertType):" #: ../lib/GUI/TCONFIG.pm:496 msgid "Netscape SSL Server Name (nsSslServerName):" msgstr "Nom de Serveur SSL Netscape (nsSslServerName):" #: ../lib/GUI/TCONFIG.pm:521 ../lib/GUI/TCONFIG.pm:924 #: ../lib/GUI/TCONFIG.pm:1182 msgid "Netscape Revocation URL (nsRevocationUrl):" msgstr "URL de Revocation Netscape (nsRevocationUrl):" #: ../lib/GUI/TCONFIG.pm:546 ../lib/GUI/TCONFIG.pm:948 msgid "Netscape Renewal URL (nsRenewalUrl):" msgstr "URL de Renouvellement Netscape (nsRenewalUrl):" #: ../lib/GUI/TCONFIG.pm:607 msgid "These Settings are passed to OpenSSL for creating Client Certificates" msgstr "" "Ces options sont passes OpenSSL pour la cration des Certificats de " "Clients" #: ../lib/GUI/TCONFIG.pm:632 msgid "Client Certificate Settings" msgstr "Paramtres de Certificats Client" #: ../lib/GUI/TCONFIG.pm:1014 msgid "These Settings are passed to OpenSSL for creating CA Certificates" msgstr "" "Ces options sont passes OpenSSL pour la cration des Certificats de CA" #: ../lib/GUI/TCONFIG.pm:1039 ../lib/GUI/TCONFIG.pm:1041 msgid "CA Certificate Settings" msgstr "Paramtres de Certificats de CA" #: ../lib/GUI/TCONFIG.pm:1234 msgid "" "These Settings are passed to OpenSSL for creating Certificate Revocation " "Lists" msgstr "" "Ces options sont passes OpenSSL pour la cration des Listes de Rvocation " #: ../lib/GUI/TCONFIG.pm:1260 msgid "Revocation List Settings" msgstr "Paramtres des Listes de Rvocation" #: ../lib/GUI/TCONFIG.pm:1322 msgid "CA Configuration" msgstr "Configuration de la CA" #: ../lib/GUI/TCONFIG.pm:1330 msgid "These Settings are passed to OpenSSL for creating this CA Certificate" msgstr "" "Ces options sont passes OpenSSL pour la cration du Certificat de cette CA" #: ../lib/GUI/TCONFIG.pm:1335 msgid "and the CA Certificates of every SubCA, created with this CA." msgstr "et les Certificats de toute CA fille crs avec cette CA." #: ../lib/GUI/WORDS.pm:26 ../lib/GUI/WORDS.pm:73 msgid "Not set" msgstr "Non Dfini" #: ../lib/GUI/WORDS.pm:27 ../lib/GUI/WORDS.pm:74 msgid "Ask User" msgstr "Demander l'utilisateur" #: ../lib/GUI/WORDS.pm:28 ../lib/GUI/WORDS.pm:75 msgid "critical" msgstr "critique" #: ../lib/GUI/WORDS.pm:29 ../lib/GUI/WORDS.pm:76 msgid "not critical" msgstr "non critique" #: ../lib/GUI/WORDS.pm:30 ../lib/GUI/WORDS.pm:77 msgid "Copy Email" msgstr "Copier l'Email" #: ../lib/GUI/WORDS.pm:31 ../lib/GUI/WORDS.pm:78 msgid "raw" msgstr "donnes brutes (raw)" #: ../lib/GUI/WORDS.pm:32 ../lib/GUI/WORDS.pm:79 msgid "DNS Name" msgstr "Nom DNS" #: ../lib/GUI/WORDS.pm:33 ../lib/GUI/WORDS.pm:81 msgid "IP Address" msgstr "Adresse IP" #: ../lib/GUI/WORDS.pm:34 ../lib/GUI/WORDS.pm:80 msgid "Email" msgstr "Email" #: ../lib/GUI/WORDS.pm:35 ../lib/GUI/WORDS.pm:82 msgid "SSL Server" msgstr "Serveur SSL" #: ../lib/GUI/WORDS.pm:36 ../lib/GUI/WORDS.pm:83 msgid "SSL Server, SSL Client" msgstr "Serveur SSL, Client SSL" #: ../lib/GUI/WORDS.pm:37 ../lib/GUI/WORDS.pm:84 msgid "Key Encipherment" msgstr "Chiffrement de Cl" #: ../lib/GUI/WORDS.pm:38 ../lib/GUI/WORDS.pm:85 msgid "Digital Signature" msgstr "Signature Numrique" #: ../lib/GUI/WORDS.pm:39 ../lib/GUI/WORDS.pm:86 msgid "Key Encipherment, Digital Signature" msgstr "Chiffrement de Cl, Signature Numrique" #: ../lib/GUI/WORDS.pm:40 ../lib/GUI/WORDS.pm:87 msgid "Object Signing" msgstr "Signature d'Objet" #: ../lib/GUI/WORDS.pm:41 ../lib/GUI/WORDS.pm:91 msgid "SSL Client, Object Signing" msgstr "Client SSL, Signature d'Objet" #: ../lib/GUI/WORDS.pm:42 ../lib/GUI/WORDS.pm:89 msgid "SSL Client, Email(S/MIME)" msgstr "Client SSL, Email(S/MIME)" #: ../lib/GUI/WORDS.pm:43 ../lib/GUI/WORDS.pm:90 msgid "SSL Client" msgstr "Client SSL" #: ../lib/GUI/WORDS.pm:44 ../lib/GUI/WORDS.pm:88 msgid "Email(S/MIME)" msgstr "Email(S/MIME)" #: ../lib/GUI/WORDS.pm:45 ../lib/GUI/WORDS.pm:92 msgid "SSL Client, Email, Object Signing" msgstr "Client SSL, Email, Signature d'Objet" #: ../lib/GUI/WORDS.pm:46 ../lib/GUI/WORDS.pm:93 msgid "Object Signing CA" msgstr "Signature d'Objet CA" #: ../lib/GUI/WORDS.pm:47 ../lib/GUI/WORDS.pm:94 msgid "S/MIME CA" msgstr "S/MIME CA" #: ../lib/GUI/WORDS.pm:48 ../lib/GUI/WORDS.pm:95 msgid "SSL CA" msgstr "SSL CA" #: ../lib/GUI/WORDS.pm:49 ../lib/GUI/WORDS.pm:96 msgid "SSL CA, S/MIME CA" msgstr "SSL CA, S/MIME CA" #: ../lib/GUI/WORDS.pm:50 ../lib/GUI/WORDS.pm:97 msgid "SSL CA, Object Signing CA" msgstr "SSL CA, Signature d'Objet CA" #: ../lib/GUI/WORDS.pm:51 ../lib/GUI/WORDS.pm:98 msgid "S/MIME CA, Object Signing CA" msgstr "S/MIME CA, Signature d'Objet CA" #: ../lib/GUI/WORDS.pm:52 ../lib/GUI/WORDS.pm:99 msgid "SSL CA, S/MIME CA, Object Signing CA" msgstr "SSL CA, S/MIME CA, Signature d'Objet CA" #: ../lib/GUI/WORDS.pm:53 ../lib/GUI/WORDS.pm:100 msgid "Certificate Signing" msgstr "Signature de Certificat" #: ../lib/GUI/WORDS.pm:54 ../lib/GUI/WORDS.pm:101 msgid "CRL Signing" msgstr "Signature de CRL" #: ../lib/GUI/WORDS.pm:55 ../lib/GUI/WORDS.pm:102 msgid "Certificate Signing, CRL Signing" msgstr "Signature de Certificat, Signature de CRL" #: ../lib/GUI/WORDS.pm:63 msgid "Creation Date" msgstr "Date de Cration" #: ../lib/GUI/WORDS.pm:66 msgid "Public Key Algorithm" msgstr "Algorithme de Cl Publique" #: ../lib/GUI/WORDS.pm:67 msgid "Signature Algorithm" msgstr "Algorithme de Signature" #: ../lib/GUI/WORDS.pm:71 ../lib/GUI/X509_infobox.pm:80 msgid "Fingerprint (MD5)" msgstr "Empreinte Numrique (MD5)" #: ../lib/GUI/WORDS.pm:72 ../lib/GUI/X509_infobox.pm:89 msgid "Fingerprint (SHA1)" msgstr "Empreinte Numrique (SHA1)" #: ../lib/GUI/X509_browser.pm:448 msgid "Certificate Information" msgstr "Information du Certificat" #: ../lib/GUI/X509_browser.pm:452 msgid "Request Information" msgstr "Information de la Requte" #: ../lib/GUI/X509_browser.pm:571 msgid "Invalid browser mode for selection_fname():" msgstr "Mode de navigation erron pour la fonction selection_fname()" #: ../lib/GUI/X509_browser.pm:571 ../lib/GUI/X509_browser.pm:607 #: ../lib/GUI/X509_browser.pm:656 ../lib/GUI/X509_browser.pm:677 #: ../lib/GUI/X509_browser.pm:698 ../lib/GUI/X509_browser.pm:725 msgid " " msgstr " " #: ../lib/GUI/X509_browser.pm:607 msgid "Invalid browser mode for selection_dn():" msgstr "Mode de navigation erron pour la fonction selection_dn()" #: ../lib/GUI/X509_browser.pm:656 ../lib/GUI/X509_browser.pm:677 msgid "Invalid browser mode for selection_cn():" msgstr "Mode de navigation erron pour la fonction selection_cn()" #: ../lib/GUI/X509_browser.pm:698 msgid "Invalid browser mode for selection_status():" msgstr "Mode de navigation erron pour la fonction selection_status():" #: ../lib/GUI/X509_browser.pm:725 msgid "Invalid browser mode for selection_type():" msgstr "Mode de navigation erron pour la fonction selection_type()" #: ../tinyca2:63 #, c-format msgid "Can't execute %s.\n" msgstr "Impossible d'excuter %s.\n" #: ../tinyca2:64 msgid "Configure correct path to openssl in tinyca.\n" msgstr "Configurez le chemin correct de la commande openssl dans tinyca.\n" #: ../tinyca2:69 msgid "zip command not found, support disabled.\n" msgstr "comande zip introuvable, support dsactiv.\n" #: ../tinyca2:70 msgid "Configure correct path to zip in tinyca.\n" msgstr "Configurez le chemin correct de la commande zip dans tinyca.\n" #: ../tinyca2:74 msgid "tar command not found, support disabled.\n" msgstr "comande tar introuvable, support dsactiv.\n" #: ../tinyca2:75 msgid "Configure correct path to tar in tinyca.\n" msgstr "Configurez le chemin correct de la commande tar dans tinyca.\n" #: ../tinyca2:82 msgid "Can't find templatedir.\n" msgstr "Impossible de trouver le rpertoire de modles.\n" #: ../tinyca2:83 msgid "Please configure correct path with templates in tinyca.\n" msgstr "" "Configurez le chemin correct d'accs aux modles (templates) dans tinyca.\n" tinyca2-0.7.5/po/sv.po0000600000175000017500000014511510461475420016154 0ustar schollerscholler00000000000000# Swedish translation of tinyca. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the tinyca package. # Daniel Nylander , 2006. # msgid "" msgstr "" "Project-Id-Version: tinyca\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2005-06-05 18:44+0200\n" "PO-Revision-Date: 2006-07-10 16:23+0100\n" "Last-Translator: Daniel Nylander \n" "Language-Team: Swedish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../lib/CA.pm:45 msgid "error: can't open basedir: " msgstr "fel: kan inte öppna baskatalog: " #: ../lib/CA.pm:103 msgid " Opening CA: " msgstr " Öppnar CA: " #: ../lib/CA.pm:110 #: ../lib/CA.pm:270 msgid "Invalid CA selected" msgstr "Ogiltigt CA valt" #: ../lib/CA.pm:155 msgid " Initializing OpenSSL" msgstr " Initierar OpenSSL" #: ../lib/CA.pm:161 msgid " Check for CA Version" msgstr " Leta efter CA-version" #: ../lib/CA.pm:168 #: ../lib/CA.pm:195 msgid "Can't open index file: " msgstr "Kan inte öppna indexfil: " #: ../lib/CA.pm:182 msgid " Convert CA" msgstr " Konvertera CA" #: ../lib/CA.pm:201 msgid "Can't open index backup: " msgstr "Kan inte öppna säkerhetskopia av index: " #: ../lib/CA.pm:218 msgid "This CA is converted for openssl 0.9.7x now." msgstr "Detta CA är nu konverterat till openssl 0.9.7.x." #: ../lib/CA.pm:220 msgid "You will find a backup copy of the index file at: " msgstr "Du kan hitta en säkerhetskopia av indexfilen i: " #: ../lib/CA.pm:229 msgid " Read Configuration" msgstr " Läs konfiguration" #: ../lib/CA.pm:235 msgid " Create GUI" msgstr " Skapa gränssnitt" #: ../lib/CA.pm:241 msgid " Create Toolbar" msgstr " Skapa verktygsrad" #: ../lib/CA.pm:247 msgid " Actual CA: " msgstr " Aktuellt CA: " #: ../lib/CA.pm:332 #, c-format msgid "CA: %s deleted" msgstr "CA: %s borttagen" #: ../lib/CA.pm:386 msgid "Password of parent CA is needed for creating a Sub CA" msgstr "Lösenord för Huvud-CA behövs för att skapa ett Under-CA" #: ../lib/CA.pm:395 msgid "Name must be filled in and must" msgstr "Namn måste fyllas i och får" #: ../lib/CA.pm:396 msgid " not contain Spaces" msgstr " inte innehålla blanksteg" #: ../lib/CA.pm:408 msgid "Please specify at least Common Name, " msgstr "Vänligen ange åtminstone namn, " #: ../lib/CA.pm:409 msgid "Country and Password" msgstr "Land och lösenord" #: ../lib/CA.pm:416 #: ../lib/REQ.pm:110 msgid "Passwords don't match" msgstr "Lösenorden stämmer inte överens" #: ../lib/CA.pm:424 #: ../lib/REQ.pm:120 msgid "Country must be exact 2 letter code" msgstr "Land måste vara exakt 2 bokstäver" #: ../lib/CA.pm:428 #, c-format msgid "CA: %s already exists" msgstr "CA: %s existerar redan" #: ../lib/CA.pm:468 msgid "Name for storage must be filled in and must not contain spaces" msgstr "Namn för lagring måste fyllas ut och får inte innehålla blanksteg" #: ../lib/CA.pm:477 msgid "You didn't give a password for the private CA key." msgstr "Du angav inte lösenordet för den privata CA-nyckeln." #: ../lib/CA.pm:479 msgid "The import will fail, if the key is encrypted." msgstr "Importering kommer att misslyckas om nyckeln är krypterad." #: ../lib/CA.pm:488 msgid "Please give a new password for the CA" msgstr "Ange ett nytt lösenord för CA" #: ../lib/CA.pm:495 msgid "New passwords don't match" msgstr "Nya lösenord stämmer inte överens" #: ../lib/CA.pm:503 msgid "Please give a CA certificate to import" msgstr "Välj ett CA-certifikat att importera" #: ../lib/CA.pm:508 #, c-format msgid "" "Can't read CA certificate file:\n" "%s" msgstr "" "Kan inte läsa CA-certifikatfil:\n" "%s" #: ../lib/CA.pm:518 msgid "Please give a CA keyfile to import" msgstr "Välj en CA-nyckelfil att importera" #: ../lib/CA.pm:523 #, c-format msgid "" "Can't read CA key file:\n" "%s" msgstr "" "Kan inte läsa CA-nyckelfilen:\n" "%s" #: ../lib/CA.pm:535 msgid "Please give an Index file to import.\n" msgstr "Välj en indexfil att importera.\n" #: ../lib/CA.pm:536 msgid "If you don't have an Index file, i'll try to generate one.\n" msgstr "Om du inte har en indexfil kan jag försöka att generera en.\n" #: ../lib/CA.pm:537 msgid "Attention: This will cause all Certificates to show up as valid.\n" msgstr "Lystring: Detta kommer att orsaka att alla certifikat kommer att visas som giltiga.\n" #: ../lib/CA.pm:538 msgid "Attention: Revoked Certificates will not be determined." msgstr "Varning: Återkallade certifikat kommer inte kunna fastställas." #: ../lib/CA.pm:549 #, c-format msgid "" "Can't read Index file:\n" "%s" msgstr "" "Kan inte läsa Index-fil:\n" "%s" #: ../lib/CA.pm:562 msgid "Please give a directory containing the certificates to import" msgstr "Vänligen ange en katalog som innehåller certifikatet som ska importeras" #: ../lib/CA.pm:567 #, c-format msgid "" "Can't find certificate directory:\n" "%s" msgstr "" "Kan inte hitta certifikatkatalog:\n" "%s" #: ../lib/CA.pm:578 #, c-format msgid "CA: %s already exists. Please choose another name" msgstr "CA: %s existerar redan. Vänligen välj ett annat namn" #: ../lib/CA.pm:594 msgid "Can't find X509v3 Basic Constraints in CA Certificate\n" msgstr "Kan inte hitta X509v3 Basic Constraints i CA-certifikatet\n" #: ../lib/CA.pm:595 msgid "Import canceled" msgstr "Importering avbruten" #: ../lib/CA.pm:601 msgid "The selected CA Certificate is no valid CA certificate\n" msgstr "Det valda CA-certifikatet är inget giltigt CA-certifikat\n" #: ../lib/CA.pm:602 #, c-format msgid "X509v3 Basic Constraint is set to: %s" msgstr "X509v3 Basic Constraint är satt till: %s" #: ../lib/CA.pm:612 #, c-format msgid "" "Can't open Index file:\n" "%s" msgstr "" "Kan inte öppna Index-fil:\n" "%s" #: ../lib/CA.pm:663 #: ../lib/CERT.pm:62 #, c-format msgid "Can't open Certificate directory: %s" msgstr "Kan inte öppna certifikatkatalog: %s" #: ../lib/CA.pm:682 #: ../lib/CERT.pm:85 #, c-format msgid " Read Certificate: %s" msgstr " Läs certifikat: %s" #: ../lib/CA.pm:692 #, c-format msgid "Can't read Certificate file: %s" msgstr "Kan inte läsa certifikatfil: %s" #: ../lib/CA.pm:716 #, c-format msgid "Can't write Certificate file: %s" msgstr "Kan inte skriva certifikatfil: %s" #: ../lib/CA.pm:766 #: ../lib/CA.pm:912 msgid "Can't open Index file: " msgstr "Kan inte öppna Index-fil: " #: ../lib/CA.pm:774 #: ../lib/CA.pm:919 msgid "Can't write Serial file: " msgstr "Kan inte skriva serienummerfil: " #: ../lib/CA.pm:790 #, c-format msgid "Can't write CA Certificate file: %s" msgstr "Kan inte skriva CA-certifikatfil: %s" #: ../lib/CA.pm:799 #, c-format msgid "Can't write CA Key file: %s" msgstr "Kan inte skriva CA-nyckelfil: %s" #: ../lib/CA.pm:816 #: ../lib/CA.pm:1140 msgid "Generating CRL failed" msgstr "Generering av CRL misslyckades" #: ../lib/CA.pm:829 #, c-format msgid "Succesfully imported %d certificates\n" msgstr "Importering av %d certifikat lyckades\n" #: ../lib/CA.pm:830 msgid "Check the configuration of your imported CA." msgstr "Kontrollera konfigurationen av ditt importerade CA." #: ../lib/CA.pm:847 #: ../lib/CA.pm:956 msgid "No CA name given" msgstr "Inget CA-namn angivet" #: ../lib/CA.pm:856 #: ../lib/CA.pm:861 #: ../lib/CA.pm:866 #: ../lib/CA.pm:871 #: ../lib/CA.pm:876 #: ../lib/CA.pm:881 msgid "Can't create directory: " msgstr "Kan inte skapa katalog: " #: ../lib/CA.pm:890 #, c-format msgid "Can't open template file %s %s" msgstr "Kan inte öppna mallfil %s %s" #: ../lib/CA.pm:895 #: ../lib/CA.pm:1192 #: ../lib/CA.pm:1259 #: ../lib/CERT.pm:625 #: ../lib/KEY.pm:234 #: ../lib/REQ.pm:707 #, c-format msgid "Can't open output file: %s: %s" msgstr "Kan inte öppna utdatafilen: %s: %s" #: ../lib/CA.pm:969 #: ../lib/KEY.pm:476 #: ../lib/REQ.pm:167 msgid "Generating key failed" msgstr "Generering av nyckel misslyckades" #: ../lib/CA.pm:1003 #: ../lib/REQ.pm:193 msgid "Generating Request failed" msgstr "Generering av begäran misslyckades" #: ../lib/CA.pm:1012 #: ../lib/CA.pm:1026 #: ../lib/CERT.pm:103 msgid "Can't read Certificate" msgstr "Kan inte läsa certifikat" #: ../lib/CA.pm:1017 #: ../lib/CA.pm:1031 msgid "Can't write Certificate" msgstr "Kan inte skriva certifikat" #: ../lib/CA.pm:1071 msgid "Generating certificate failed" msgstr "Generering av certifikat misslyckades" #: ../lib/CA.pm:1091 #: ../lib/CA.pm:1116 #, c-format msgid "Can't open ca certificate file %s %s" msgstr "Kan inte öppna CA-certifikatfil %s %s" #: ../lib/CA.pm:1100 #, c-format msgid "Can't create certificate chain file: %s: %s" msgstr "Kan inte skapa fil för certifikatkedja: %s: %s" #: ../lib/CA.pm:1149 #, c-format msgid "CA: %s created" msgstr "CA: %s skapades" #: ../lib/CA.pm:1184 #, c-format msgid "Can't open certificate chain file: %s: %s" msgstr "Kan inte öppna fil för certifikatkedja: %s: %s" #: ../lib/CA.pm:1205 #, c-format msgid "Certificate Chain succesfully exported to: %s" msgstr "Certifikatkedja exporterades till: %s" #: ../lib/CA.pm:1240 #: ../lib/CERT.pm:575 #: ../lib/GUI.pm:147 #: ../lib/KEY.pm:350 #: ../lib/REQ.pm:72 #: ../lib/REQ.pm:396 msgid "Can't read CA certificate" msgstr "Kan inte läsa CA-certifikat" #: ../lib/CA.pm:1250 #, c-format msgid "Invalid Format for export_ca_cert(): %s" msgstr "Ogiltigt format för export_ca_cert(): %s" #: ../lib/CA.pm:1272 #, c-format msgid "Certificate succesfully exported to: %s" msgstr "Certifikat exporterades till: %s" #: ../lib/CA.pm:1305 msgid "Please give the output file" msgstr "Vänligen ange utdatafil" #: ../lib/CA.pm:1313 msgid "Please give the CA password to create the Revocation List" msgstr "Ange CA-lösenordet för att skapa spärrlistan" #: ../lib/CA.pm:1334 msgid "" "Wrong CA password given\n" "Generating Revocation List failed" msgstr "" "Fel CA-lösenord angavs\n" "Generering av spärrlista misslyckades" #: ../lib/CA.pm:1338 msgid "" "CA Key not found\n" "Generating Revocation List failed" msgstr "" "CA-nyckel hittades inte\n" "Generering av spärrlista misslyckades" #: ../lib/CA.pm:1342 #: ../lib/CA.pm:1348 msgid "Generating Revocation List failed" msgstr "Generering av spärrlista misslyckades" #: ../lib/CA.pm:1356 #, c-format msgid "CRL successfully exported to: %s" msgstr "CRL exporterades till: %s" #: ../lib/CERT.pm:144 #: ../lib/CERT.pm:200 #: ../lib/CERT.pm:323 #: ../lib/CERT.pm:382 #: ../lib/GUI.pm:830 msgid "Please select a Certificate first" msgstr "Vänligen välj ett certifikat först" #: ../lib/CERT.pm:152 #: ../lib/CERT.pm:210 #: ../lib/CERT.pm:334 #: ../lib/CERT.pm:402 #: ../lib/GUI.pm:2745 #: ../lib/GUI.pm:2756 #: ../lib/OpenSSL.pm:695 #: ../lib/GUI/X509_browser.pm:278 msgid "VALID" msgstr "GILTIGT" #: ../lib/CERT.pm:154 #, c-format msgid "" "Can't renew Certifikate with Status: %s\n" "Please revoke the Certificate first" msgstr "" "Kan inte förnya certifikat med status: %s\n" "Vänligen återkalla certifikatet först" #: ../lib/CERT.pm:169 msgid "" "Key and Request are necessary for renewal of a Certificate\n" "Renewal is not possible!" msgstr "" "Nyckel och begäran är nödvändiga för att förnya ett certifikat\n" "Förnyelse är inte möjlig!" #: ../lib/CERT.pm:211 #, c-format msgid "Can't revoke Certifikate with Status: %s" msgstr "Kan inte återkalla certifikat med status: %s" #: ../lib/CERT.pm:257 msgid "" "Wrong CA password given\n" "Revoking the Certificate failed" msgstr "" "Fel CA-lösenord angavs\n" "Återkallelse av certifikatet misslyckades" #: ../lib/CERT.pm:264 msgid "" "CA Key not found\n" "Revoking the Certificate failed" msgstr "" "CA-nyckel hittades inte\n" "Återkallning av certifikat misslyckades" #: ../lib/CERT.pm:271 msgid "Revoking the Certificate failed" msgstr "Återkallning av certifikat misslyckades" #: ../lib/CERT.pm:291 msgid "Generating a new Revocation List failed" msgstr "Generering av ny spärrlista misslyckades" #: ../lib/CERT.pm:336 msgid "" "Can't delete VALID certificate!\n" "Please revoke the Certificate first." msgstr "" "Kan inte ta bort ett GILTIGT certifikat!\n" "Vänligen återkalla certifikatet först." #: ../lib/CERT.pm:403 msgid "Certificate seems not to be VALID" msgstr "Certifikatet verkar inte vara GILTIGT" #: ../lib/CERT.pm:405 msgid "Export is not possible" msgstr "Exportering är inte möjlig" #: ../lib/CERT.pm:430 #: ../lib/KEY.pm:172 msgid "Please give at least the output file" msgstr "Ange åtminstone utdatafilen" #: ../lib/CERT.pm:436 msgid "Key is necessary for export as PKCS#12" msgstr "Nyckeln behövs för exportering som PKCS#12" #: ../lib/CERT.pm:438 #: ../lib/CERT.pm:452 #: ../lib/KEY.pm:264 #: ../lib/KEY.pm:310 msgid "Export is not possible!" msgstr "Export är inte möjlig!" #: ../lib/CERT.pm:450 msgid "Key is necessary for export as Zip" msgstr "Nyckeln behövs för att exportera som Zip" #: ../lib/CERT.pm:489 #: ../lib/KEY.pm:223 #, c-format msgid "Can't open Certificate file: %s: %s" msgstr "Kan inte öppna certifikatfil: %s: %s" #: ../lib/CERT.pm:520 #: ../lib/KEY.pm:292 msgid "Generating PKCS#12 failed" msgstr "Generering av PKCS#12 misslyckades" #: ../lib/CERT.pm:528 #: ../lib/CERT.pm:604 #: ../lib/KEY.pm:299 #: ../lib/KEY.pm:375 #, c-format msgid "Certificate and Key successfully exported to %s" msgstr "Certifikat och nyckel exporterades till %s" #: ../lib/CERT.pm:541 #: ../lib/CERT.pm:562 #: ../lib/REQ.pm:660 #, c-format msgid "Can't create temporary file: %s: %s" msgstr "Kan inte skapa temporär fil: %s: %s" #: ../lib/CERT.pm:553 #, c-format msgid "Can't read Key file: %s: %s" msgstr "Kan inte läsa nyckelfil: %s: %s" #: ../lib/CERT.pm:583 #: ../lib/KEY.pm:323 #: ../lib/KEY.pm:339 #: ../lib/KEY.pm:357 msgid "Can't create temporary file" msgstr "Kan inte skapa temporär fil" #: ../lib/CERT.pm:598 #: ../lib/KEY.pm:370 msgid "Generating Zip file failed" msgstr "Generering av Zip-fil misslyckades" #: ../lib/CERT.pm:616 #, c-format msgid "Invalid Format for export_cert(): %s" msgstr "Ogiltigt format för export_cert(): %s" #: ../lib/CERT.pm:636 #, c-format msgid "Certificate successfully exported to: %s" msgstr "Certifikat exporterades till: %s" #: ../lib/GUI.pm:152 #: ../lib/GUI.pm:159 msgid "CA" msgstr "CA" #: ../lib/GUI.pm:166 msgid "CA Information" msgstr "CA-information" #: ../lib/GUI.pm:185 msgid "Certificates" msgstr "Certifikat" #: ../lib/GUI.pm:225 #: ../lib/GUI.pm:2728 #: ../lib/GUI/WORDS.pm:58 #: ../lib/GUI/X509_browser.pm:162 #: ../lib/GUI/X509_browser.pm:170 #: ../lib/GUI/X509_browser.pm:179 msgid "Common Name" msgstr "Namn" #: ../lib/GUI.pm:226 #: ../lib/GUI.pm:1252 #: ../lib/GUI.pm:2320 #: ../lib/GUI/WORDS.pm:59 #: ../lib/GUI/X509_browser.pm:163 #: ../lib/GUI/X509_browser.pm:171 #: ../lib/GUI/X509_browser.pm:180 msgid "eMail Address" msgstr "E-postadress" #: ../lib/GUI.pm:227 #: ../lib/GUI/WORDS.pm:61 #: ../lib/GUI/X509_browser.pm:164 #: ../lib/GUI/X509_browser.pm:172 #: ../lib/GUI/X509_browser.pm:181 msgid "Organizational Unit" msgstr "Organisationsenhet" #: ../lib/GUI.pm:228 #: ../lib/GUI/WORDS.pm:60 #: ../lib/GUI/X509_browser.pm:165 #: ../lib/GUI/X509_browser.pm:173 #: ../lib/GUI/X509_browser.pm:182 msgid "Organization" msgstr "Organisation" #: ../lib/GUI.pm:229 #: ../lib/GUI/WORDS.pm:62 #: ../lib/GUI/X509_browser.pm:166 #: ../lib/GUI/X509_browser.pm:174 #: ../lib/GUI/X509_browser.pm:183 msgid "Location" msgstr "Plats" #: ../lib/GUI.pm:230 #: ../lib/GUI/WORDS.pm:63 #: ../lib/GUI/X509_browser.pm:167 #: ../lib/GUI/X509_browser.pm:175 #: ../lib/GUI/X509_browser.pm:184 msgid "State" msgstr "Län" #: ../lib/GUI.pm:231 #: ../lib/GUI/WORDS.pm:64 #: ../lib/GUI/X509_browser.pm:168 #: ../lib/GUI/X509_browser.pm:176 #: ../lib/GUI/X509_browser.pm:185 msgid "Country" msgstr "Land" #: ../lib/GUI.pm:232 #: ../lib/GUI/WORDS.pm:70 #: ../lib/GUI/X509_browser.pm:186 msgid "Type" msgstr "Typ" #: ../lib/GUI.pm:246 msgid "Keys" msgstr "Tangenter" #: ../lib/GUI.pm:289 msgid "Requests" msgstr "Begäran" #: ../lib/GUI.pm:378 #, c-format msgid " Actual CA: %s" msgstr " Aktuellt CA: %s" #: ../lib/GUI.pm:381 #, c-format msgid " Actual CA: %s - Certificates" msgstr " Aktuellt CA: %s - Certifikat" #: ../lib/GUI.pm:384 #, c-format msgid " Actual CA: %s - Keys" msgstr " Aktuellt CA: %s - Nycklar" #: ../lib/GUI.pm:387 #, c-format msgid " Actual CA: %s - Requests" msgstr " Aktuellt CA: %s - Begäran" #: ../lib/GUI.pm:436 #: ../lib/GUI.pm:1120 msgid "Open CA" msgstr "Öppna CA" #: ../lib/GUI.pm:442 msgid "New CA" msgstr "Nytt CA" #: ../lib/GUI.pm:448 #: ../lib/GUI.pm:2422 msgid "Import CA" msgstr "Importera CA" #: ../lib/GUI.pm:454 #: ../lib/GUI.pm:1122 msgid "Delete CA" msgstr "Ta bort CA" #: ../lib/GUI.pm:464 #: ../lib/GUI.pm:503 #: ../lib/GUI.pm:571 msgid "Details" msgstr "Detaljer" #: ../lib/GUI.pm:470 msgid "History" msgstr "Historik" #: ../lib/GUI.pm:476 msgid "Sub CA" msgstr "Under-CA" #: ../lib/GUI.pm:482 msgid "Export CA" msgstr "Exportera CA" #: ../lib/GUI.pm:488 #: ../lib/GUI.pm:1462 msgid "Export CRL" msgstr "Exportera CRL" #: ../lib/GUI.pm:495 msgid "Export Chain" msgstr "Exportera kedja" #: ../lib/GUI.pm:509 #: ../lib/GUI.pm:577 msgid "View" msgstr "Visa" #: ../lib/GUI.pm:519 #: ../lib/GUI.pm:583 msgid "New" msgstr "Ny" #: ../lib/GUI.pm:526 #: ../lib/GUI.pm:557 msgid "Export" msgstr "Exportera" #: ../lib/GUI.pm:532 msgid "Revoke" msgstr "Återkalla" #: ../lib/GUI.pm:542 msgid "Renew" msgstr "Förnya" #: ../lib/GUI.pm:549 #: ../lib/GUI.pm:563 #: ../lib/GUI.pm:606 msgid "Delete" msgstr "Ta bort" #: ../lib/GUI.pm:589 msgid "Import" msgstr "Importera" #: ../lib/GUI.pm:599 msgid "Sign" msgstr "Signera" #: ../lib/GUI.pm:625 msgid "_CA" msgstr "_CA" #: ../lib/GUI.pm:628 msgid "_Open CA" msgstr "Ö_ppna CA" #: ../lib/GUI.pm:633 msgid "_New CA" msgstr "_Nytt CA" #: ../lib/GUI.pm:638 msgid "_Delete CA" msgstr "_Ta bort CA" #: ../lib/GUI.pm:646 msgid "_Exit" msgstr "_Avsluta" #: ../lib/GUI.pm:653 msgid "_Preferences" msgstr "_Inställningar" #: ../lib/GUI.pm:656 msgid "Experts Only!!" msgstr "Endast för experter!!" #: ../lib/GUI.pm:661 msgid "OpenSSL _Configuration" msgstr "Konfiguration av _OpenSSL" #: ../lib/GUI.pm:668 #: ../lib/GUI.pm:671 msgid "_Help" msgstr "_Hjälp" #: ../lib/GUI.pm:676 msgid "_About TinyCA" msgstr "_Om TinyCA" #: ../lib/GUI.pm:707 msgid "Invalid mode for show_text():" msgstr "Ogiltigt läge för show_text():" #: ../lib/GUI.pm:712 #: ../lib/GUI.pm:827 #: ../lib/REQ.pm:236 #: ../lib/REQ.pm:367 msgid "Please select a Request first" msgstr "Vänligen välj en begäran först" #: ../lib/GUI.pm:715 msgid "Please select a certificate first" msgstr "Vänligen välj ett certifikat först" #: ../lib/GUI.pm:731 #: ../lib/GUI.pm:846 #: ../lib/GUI/X509_browser.pm:458 #: ../lib/GUI/X509_browser.pm:517 msgid "Can't read file" msgstr "Kan inte läsa fil" #: ../lib/GUI.pm:733 msgid "Request" msgstr "Begäran" #: ../lib/GUI.pm:733 msgid "Certificate" msgstr "Certifikat" #: ../lib/GUI.pm:794 #, c-format msgid "Invalid mode for _show_popup_menu(): %s" msgstr "Ogiltigt läge för _show_popup_menu(): %s" #: ../lib/GUI.pm:822 msgid "Invalid mode for show_details():" msgstr "Ogiltigt läge för show_details():" #: ../lib/GUI.pm:848 #: ../lib/GUI.pm:948 #: ../lib/GUI.pm:3079 msgid "Request Details" msgstr "Detaljer om begäran" #: ../lib/GUI.pm:848 #: ../lib/GUI.pm:948 #: ../lib/GUI.pm:2936 msgid "Certificate Details" msgstr "Certifikatdetaljer" #: ../lib/GUI.pm:890 #: ../lib/GUI.pm:1722 #: ../lib/GUI.pm:3100 msgid "Import Request" msgstr "Importera begäran" #: ../lib/GUI.pm:892 #: ../lib/GUI.pm:2478 msgid "Import CA Certificate" msgstr "Importera CA-certifikat" #: ../lib/GUI.pm:900 msgid "Do you want to import the following Certificate Request?" msgstr "Vill du importera följande certifikatbegäran?" #: ../lib/GUI.pm:902 msgid "Do you want to import the following CA Certificate?" msgstr "Vill du importera följande CA-certifikat?" #: ../lib/GUI.pm:956 msgid "Subject DN" msgstr "Ämne DN" #: ../lib/GUI.pm:980 msgid "Issuer" msgstr "Utgivare" #: ../lib/GUI.pm:1006 msgid "Validity" msgstr "Giltighet" #: ../lib/GUI.pm:1022 msgid "Key/Request Details:" msgstr "Detaljer om nyckel/begäran:" #: ../lib/GUI.pm:1022 msgid "Key/Certificate Details:" msgstr "Detaljer om nyckel/certifikat:" #: ../lib/GUI.pm:1038 msgid "Fingerprints" msgstr "Fingeravtryck" #: ../lib/GUI.pm:1054 msgid "Requested X.509 Extensions" msgstr "Begärde X.509v3-utökningar" #: ../lib/GUI.pm:1054 msgid "X.509v3 Extensions" msgstr "X.509v3-utökningar" #: ../lib/GUI.pm:1079 msgid "Requested Netscape Extensions" msgstr "Begärde Netscape-utökningar" #: ../lib/GUI.pm:1079 msgid "Netscape Extensions" msgstr "Netscape-utökningar" #: ../lib/GUI.pm:1124 msgid "Invalid action given: " msgstr "Ogiltig åtgärd angavs: " #: ../lib/GUI.pm:1146 #: ../lib/GUI.pm:1192 msgid "Invalid action for show_select_ca_dialog(): " msgstr "Ogiltig åtgärd för show_select_ca_dialog(): " #: ../lib/GUI.pm:1168 msgid "Available CAs" msgstr "Tillgängliga CA:er" #: ../lib/GUI.pm:1224 msgid "Create Request" msgstr "Skapa begäran" #: ../lib/GUI.pm:1225 msgid "Create a new Certificate Request" msgstr "Skapa en ny certifikatbegäran" #: ../lib/GUI.pm:1239 msgid "Common Name (eg, your Name," msgstr "Namn (till exempel ditt namn," #: ../lib/GUI.pm:1244 msgid "your eMail Address" msgstr "din e-postadress" #: ../lib/GUI.pm:1248 msgid "or the Servers Name)" msgstr "eller serverns namn)" #: ../lib/GUI.pm:1256 msgid "Password (protect your private Key):" msgstr "Lösenord (skydda din privata nyckel):" #: ../lib/GUI.pm:1260 #: ../lib/GUI.pm:2300 msgid "Password (confirmation):" msgstr "Lösenord (bekräfta):" #: ../lib/GUI.pm:1264 #: ../lib/GUI.pm:2292 msgid "Country Name (2 letter code):" msgstr "Land (2-bokstavskod):" #: ../lib/GUI.pm:1268 #: ../lib/GUI.pm:2304 msgid "State or Province Name:" msgstr "Län eller provins:" #: ../lib/GUI.pm:1272 #: ../lib/GUI.pm:2308 msgid "Locality Name (eg. city):" msgstr "Plats (exempelvis stad):" #: ../lib/GUI.pm:1276 #: ../lib/GUI.pm:2312 msgid "Organization Name (eg. company):" msgstr "Organisation (exempelvis företag):" #: ../lib/GUI.pm:1282 #: ../lib/GUI.pm:1287 #: ../lib/GUI.pm:2316 msgid "Organizational Unit Name (eg. section):" msgstr "Organisationsenhet (exempelvis avdelning):" #: ../lib/GUI.pm:1292 #: ../lib/GUI.pm:2328 #: ../lib/GUI/WORDS.pm:67 msgid "Keylength" msgstr "Nyckellängd" #: ../lib/GUI.pm:1320 #: ../lib/GUI.pm:2358 msgid "Digest" msgstr "Sammandrag" #: ../lib/GUI.pm:1361 msgid "Algorithm" msgstr "Algoritm" #: ../lib/GUI.pm:1403 #: ../lib/GUI.pm:2957 msgid "Revoke Certificate" msgstr "Återkalla certifikat" #: ../lib/GUI.pm:1412 #: ../lib/GUI.pm:1487 #: ../lib/GUI.pm:2099 msgid "CA Password:" msgstr "CA-lösenord:" #: ../lib/GUI.pm:1417 msgid "Revocation Reason:" msgstr "Anledning för återkallelse:" #: ../lib/GUI.pm:1462 msgid "Export Revocation List to File" msgstr "Exportera spärrlista till fil" #: ../lib/GUI.pm:1470 #: ../lib/GUI.pm:1558 #: ../lib/GUI.pm:1606 #: ../lib/GUI.pm:1730 #: ../lib/GUI.pm:1798 msgid "File:" msgstr "Fil:" #: ../lib/GUI.pm:1481 #: ../lib/GUI.pm:1569 #: ../lib/GUI.pm:1617 #: ../lib/GUI.pm:1740 #: ../lib/GUI.pm:1815 #: ../lib/GUI.pm:2475 #: ../lib/GUI.pm:2494 #: ../lib/GUI.pm:2513 #: ../lib/GUI.pm:2532 msgid "Browse..." msgstr "Bläddra..." #: ../lib/GUI.pm:1484 #: ../lib/GUI.pm:1597 #: ../lib/GUI.pm:1620 msgid "Export CA Certificate" msgstr "Exportera CA-certifikat" #: ../lib/GUI.pm:1491 #: ../lib/GUI.pm:2105 #: ../lib/GUI.pm:2324 msgid "Valid for (Days):" msgstr "Giltighet (i dagar):" #: ../lib/GUI.pm:1495 #: ../lib/GUI.pm:1624 #: ../lib/GUI.pm:1822 msgid "Export Format:" msgstr "Exportformat:" #: ../lib/GUI.pm:1501 #: ../lib/GUI.pm:1630 msgid "PEM" msgstr "PEM" #: ../lib/GUI.pm:1510 #: ../lib/GUI.pm:1639 msgid "DER" msgstr "DER" #: ../lib/GUI.pm:1519 #: ../lib/GUI.pm:1648 msgid "TXT" msgstr "TXT" #: ../lib/GUI.pm:1550 #: ../lib/GUI.pm:1572 msgid "Export CA Certificate Chain" msgstr "Exportera CA-certifikatkedja" #: ../lib/GUI.pm:1551 msgid "Export CA Certificate Chain to File" msgstr "Exportera CA-certifikatkedja till fil" #: ../lib/GUI.pm:1598 msgid "Export CA Certificate to File" msgstr "Exportera CA-certifikat till fil" #: ../lib/GUI.pm:1678 #: ../lib/GUI.pm:1679 msgid "Export Key without Passphrase" msgstr "Exportera nyckel utan lösenfras" #: ../lib/GUI.pm:1683 msgid "I hope you know what you're doing?" msgstr "Jag hoppas du vet vad du gör?" #: ../lib/GUI.pm:1687 msgid "The Key Passphrase is needed for decryption of the Key" msgstr "Nyckelns lösenfras behövs för att dekryptera nyckeln" #: ../lib/GUI.pm:1696 msgid "Password:" msgstr "Lösenord:" #: ../lib/GUI.pm:1722 #: ../lib/GUI.pm:1743 msgid "Import Request from File" msgstr "Importera begäran från fil" #: ../lib/GUI.pm:1764 #: ../lib/GUI.pm:1802 #: ../lib/GUI.pm:2950 msgid "Export Certificate" msgstr "Exportera certifikat" #: ../lib/GUI.pm:1766 #: ../lib/GUI.pm:1804 #: ../lib/GUI.pm:2907 msgid "Export Key" msgstr "Exportera nyckel" #: ../lib/GUI.pm:1769 msgid "Invalid mode for show_export_dialog(): " msgstr "Ogiltigt läge för show_export_dialog(): " #: ../lib/GUI.pm:1786 msgid "Export Certificate to File" msgstr "Exportera certifikat till fil" #: ../lib/GUI.pm:1788 msgid "Export Key to File" msgstr "Exportera nyckel till fil" #: ../lib/GUI.pm:1826 msgid "PEM (Certificate)" msgstr "PEM (Certifikat)" #: ../lib/GUI.pm:1828 msgid "PEM (Key)" msgstr "PEM (Nyckel)" #: ../lib/GUI.pm:1837 msgid "DER (Certificate)" msgstr "DER (Certifikat)" #: ../lib/GUI.pm:1839 msgid "DER (Key without Passphrase)" msgstr "DER (Nyckel utan lösenfras)" #: ../lib/GUI.pm:1847 msgid "PKCS#12 (Certificate & Key)" msgstr "PKCS#12 (Certifikat & Nyckel)" #: ../lib/GUI.pm:1854 msgid "Zip (Certificate & Key)" msgstr "Zip (Certifikat & Nyckel)" #: ../lib/GUI.pm:1866 msgid "TXT (Certificate)" msgstr "TXT (Certifikat)" #: ../lib/GUI.pm:1872 msgid "Without Passphrase (PEM)" msgstr "Utan lösenfras (PEM)" #: ../lib/GUI.pm:1878 #: ../lib/GUI.pm:1898 #: ../lib/GUI.pm:1915 #: ../lib/GUI.pm:1935 #: ../lib/GUI.pm:2051 #: ../lib/GUI.pm:2202 msgid "Yes" msgstr "Ja" #: ../lib/GUI.pm:1883 #: ../lib/GUI.pm:1903 #: ../lib/GUI.pm:1920 #: ../lib/GUI.pm:1940 #: ../lib/GUI.pm:2059 #: ../lib/GUI.pm:2208 msgid "No" msgstr "Nej" #: ../lib/GUI.pm:1892 msgid "Include Key (PEM)" msgstr "Inkludera nyckel (PEM)" #: ../lib/GUI.pm:1909 msgid "Include Certificate (PEM)" msgstr "Inkludera certifikat (PEM)" #: ../lib/GUI.pm:1929 msgid "Include Fingerprint (PEM)" msgstr "Inkludera fingeravtryck (PEM)" #: ../lib/GUI.pm:2029 #: ../lib/GUI.pm:2030 msgid "Export to PKCS#12" msgstr "Exportera till PKCS#12" #: ../lib/GUI.pm:2037 msgid "Key Password:" msgstr "Lösenord för nyckel:" #: ../lib/GUI.pm:2041 msgid "Export Password:" msgstr "Lösenord för export:" #: ../lib/GUI.pm:2045 msgid "Add CA Certificate to PKCS#12 structure" msgstr "Lägg till CA-certifikat till PKCS#12-struktur" #: ../lib/GUI.pm:2091 #: ../lib/GUI.pm:3107 msgid "Sign Request" msgstr "Signera begäran" #: ../lib/GUI.pm:2091 msgid "Sign Request/Create Certificate" msgstr "Signera begäran/Skapa certifikat" #: ../lib/GUI.pm:2116 #: ../lib/GUI.pm:2161 msgid "Subject alternative name (IP Address):" msgstr "Ämne alternativt namn (IP-adress):" #: ../lib/GUI.pm:2119 #: ../lib/GUI.pm:2164 msgid "Subject alternative name (DNS Name):" msgstr "Ämne alternativt namn (DNS-namn):" #: ../lib/GUI.pm:2122 #: ../lib/GUI.pm:2170 msgid "Subject alternative name (raw):" msgstr "Ämne alternativt namn (rå):" #: ../lib/GUI.pm:2130 #: ../lib/GUI.pm:2178 msgid "Extended Key Usage:" msgstr "Utökad nyckelanvändning:" #: ../lib/GUI.pm:2137 msgid "Netscape SSL Server Name:" msgstr "Netscape SSL-servernamn:" #: ../lib/GUI.pm:2144 #: ../lib/GUI.pm:2185 msgid "Netscape Revocation URL:" msgstr "Netscape återkallnings-URL:" #: ../lib/GUI.pm:2151 #: ../lib/GUI.pm:2192 msgid "Netscape Renewal URL:" msgstr "Netscape förnyelse-URL:" #: ../lib/GUI.pm:2167 msgid "Subject alternative name (eMail Address):" msgstr "Ämne alternativt namn (e-postadress):" #: ../lib/GUI.pm:2214 msgid "Add eMail Address to Subject DN:" msgstr "Lägg till e-postadress till Ämnes DN:" #: ../lib/GUI.pm:2244 #: ../lib/GUI.pm:2248 msgid "Create CA" msgstr "Skapa CA" #: ../lib/GUI.pm:2244 msgid "Create a new Sub CA" msgstr "Skapa ett nytt Under-CA" #: ../lib/GUI.pm:2248 msgid "Create a new CA" msgstr "Skapa ett nytt CA" #: ../lib/GUI.pm:2261 msgid "CA Password (for creating the new CA):" msgstr "CA-lösenord (för att skapa nytt CA):" #: ../lib/GUI.pm:2272 #: ../lib/GUI.pm:2443 msgid "Name (for local storage):" msgstr "Namn (för lokal lagring):" #: ../lib/GUI.pm:2279 msgid "Data for CA Certificate" msgstr "Data för CA-certifikat" #: ../lib/GUI.pm:2288 msgid "Common Name (for the CA):" msgstr "Namn (för CA):" #: ../lib/GUI.pm:2296 msgid "Password (needed for signing):" msgstr "Lösenord (behövs för signering):" #: ../lib/GUI.pm:2422 msgid "Import an existing CA into TinyCA" msgstr "Importera ett existerande CA till TinyCA" #: ../lib/GUI.pm:2433 msgid "Password of the private CA key (Needed for import):" msgstr "Lösenord för den privata CA-nyckeln (behövs för import):" #: ../lib/GUI.pm:2447 msgid "New password for the CA:" msgstr "Nytt lösenord för CA:" #: ../lib/GUI.pm:2451 msgid "Confirm password:" msgstr "Bekräfta lösenord:" #: ../lib/GUI.pm:2456 msgid "Files/Directories to import" msgstr "Filer/Kataloger att importera" #: ../lib/GUI.pm:2464 msgid "CA Certificate (PEM/DER):" msgstr "CA-certifikat (PEM/DER):" #: ../lib/GUI.pm:2483 msgid "CA private key (PEM/DER):" msgstr "Privat CA-nyckel (PEM/DER):" #: ../lib/GUI.pm:2497 msgid "Import CA private Key" msgstr "Importera privat nyckel för CA" #: ../lib/GUI.pm:2502 msgid "OpenSSL Index File (index.txt):" msgstr "OpenSSL Indexfil (index.txt):" #: ../lib/GUI.pm:2516 msgid "Import Index File" msgstr "Importera indexfil" #: ../lib/GUI.pm:2521 msgid "Directory containing certificates (PEM/DER):" msgstr "Katalog som innehåller certifikat (PEM/DER):" #: ../lib/GUI.pm:2535 msgid "Import Certificates from directory" msgstr "Importera certifikat från katalog" #: ../lib/GUI.pm:2549 msgid "You are kidding, are you??" msgstr "Skämtar du??" #: ../lib/GUI.pm:2570 msgid "Spanish: Ramon Pons Vivanco " msgstr "Spanska: Ramon Pons Vivanco " #: ../lib/GUI.pm:2571 msgid "Czech: Robert Wolf " msgstr "Tjeckiska: Robert Wolf " #: ../lib/GUI.pm:2572 msgid "French: Thibault Le Meur " msgstr "Franska: Thibault Le Meur " #: ../lib/GUI.pm:2588 msgid "Do you really want to delete the selected Request?" msgstr "Vill du verkligen ta bort den valda begäran?" #: ../lib/GUI.pm:2590 msgid "Do you really want to delete the selected Key?" msgstr "Vill du verkligen ta bort den valda nyckeln?" #: ../lib/GUI.pm:2592 msgid "Do you really want to delete the selected Certificate?" msgstr "Vill du verkligen ta bort det valda certifikatet?" #: ../lib/GUI.pm:2642 msgid "Overwrite Request/Key" msgstr "Skriv över begäran/nyckel" #: ../lib/GUI.pm:2648 msgid "The Key or the Request is already existing!" msgstr "Nyckeln eller begäran existerar redan!" #: ../lib/GUI.pm:2653 msgid "You won't be able to sign this Request" msgstr "Du kommer inte att kunna signera denna begäran" #: ../lib/GUI.pm:2658 msgid "if the corresponding certificate is still valid" msgstr "om det korresponderande certifikatet är giltigt fortfarande" #: ../lib/GUI.pm:2675 msgid "The Certificate will be longer valid than your CA!" msgstr "Certifikatet kommer vara giltigt längre än ditt CA!" #: ../lib/GUI.pm:2677 msgid "This may cause problems with some software!!" msgstr "Det här kan orsaka problem med vissa programvara!!" #: ../lib/GUI.pm:2692 msgid "Expirationdate Warning" msgstr "Utgångsdatumsvarning" #: ../lib/GUI.pm:2727 #: ../lib/GUI/WORDS.pm:71 msgid "Serial" msgstr "Serienummer" #: ../lib/GUI.pm:2729 #: ../lib/GUI/WORDS.pm:72 #: ../lib/GUI/X509_browser.pm:177 msgid "Status" msgstr "Status" #: ../lib/GUI.pm:2730 #: ../lib/GUI/WORDS.pm:66 msgid "Expiration Date" msgstr "Datum för utgång" #: ../lib/GUI.pm:2731 msgid "Revocation Date" msgstr "Datum för återkallning" #: ../lib/GUI.pm:2732 msgid "Revocation Reason" msgstr "Anledning för återkallning" #: ../lib/GUI.pm:2758 #: ../lib/OpenSSL.pm:698 msgid "EXPIRED" msgstr "UTGÅNGET" #: ../lib/GUI.pm:2760 #: ../lib/OpenSSL.pm:711 msgid "REVOKED" msgstr "ÅTERKALLAT" #: ../lib/GUI.pm:2780 msgid "CA History" msgstr "CA-historik" #: ../lib/GUI.pm:2814 msgid "Overwrite Certificate" msgstr "Skriv över certifikat" #: ../lib/GUI.pm:2820 msgid "There seems to be a certificate with the same Subject already." msgstr "Det verkar finnas ett certifikat med samma Ämne redan." #: ../lib/GUI.pm:2825 msgid "Creating a new one (overwrite) will fail if it's not revoked or expired!" msgstr "Skapa ett nytt (skriva över) kommer att misslyckas om det inte är återkallat eller utgånget!" #: ../lib/GUI.pm:2831 msgid "Really try to overwrite the Certificate?" msgstr "Verkligen försöka att skriva över certifikatet?" #: ../lib/GUI.pm:2864 msgid "Convert CA" msgstr "Konvertera CA" #: ../lib/GUI.pm:2872 msgid "This CA seems to be created with openssl 0.9.6x. And it seems like you have switched to openssl 0.9.7x." msgstr "Detta CA verkar vara skapade med OpenSSL 0.9.6x.. och det verkar som om du har bytt till OpenSSL 0.9.7x." #: ../lib/GUI.pm:2880 msgid "You won't be able to revoke the existing certificates without converting the index file of this CA to the new format." msgstr "Du kommer inte kunna återkalla existerande certifikat utan att konvertera indexfilen av det här CA:t till nya formatet." #: ../lib/GUI.pm:2888 msgid "Attention: it will not be easy to switch back, this has to be done manually" msgstr "Tänk på att det är inte lätt att byta tillbaka, det måste göras manuellt" #: ../lib/GUI.pm:2914 msgid "Delete Key" msgstr "Ta bort nyckel" #: ../lib/GUI.pm:2943 msgid "View Certificate" msgstr "Visa certifikat" #: ../lib/GUI.pm:2964 msgid "Renew Certificate" msgstr "Förnya certifikat" #: ../lib/GUI.pm:2972 msgid "Delete Certificate" msgstr "Ta bort certifikat" #: ../lib/GUI.pm:2995 msgid "Create Key and Certificate (Server)" msgstr "Skapa nyckel och certifikat (Server)" #: ../lib/GUI.pm:3001 msgid "Create Key and Certificate (Client)" msgstr "Skapa nyckel och certifikat (Klient)" #: ../lib/GUI.pm:3022 msgid "Renew Certificate (Server)" msgstr "Förnya certifikat (Server)" #: ../lib/GUI.pm:3029 msgid "Renew Certificate (Client)" msgstr "Förnya certifikat (Klient)" #: ../lib/GUI.pm:3051 msgid "Sign Request (Server)" msgstr "Signera begäran (Server)" #: ../lib/GUI.pm:3058 msgid "Sign Request (Client)" msgstr "Signera begäran (Klient)" #: ../lib/GUI.pm:3086 msgid "View Request" msgstr "Visa begäran" #: ../lib/GUI.pm:3093 msgid "New Request" msgstr "Ny begäran" #: ../lib/GUI.pm:3115 msgid "Delete Request" msgstr "Ta bort begäran" #: ../lib/HELPERS.pm:207 #, c-format msgid "Can't write exportdir: %s, %s" msgstr "Kan inte skriva till exportkatalog: %s, %s" #: ../lib/KEY.pm:46 #: ../lib/KEY.pm:138 msgid "Please select a Key first" msgstr "Välj en nyckel först" #: ../lib/KEY.pm:55 msgid "Key file not found:" msgstr "Nyckelfil hittades inte:" #: ../lib/KEY.pm:102 msgid "Can't open key directory" msgstr "Kan inte öppna nyckelkatalog" #: ../lib/KEY.pm:179 msgid "Can't export PKCS#12 without passphrase" msgstr "Kan inte exportera PKCS#12 utan lösenfras" #: ../lib/KEY.pm:201 msgid "" "Wrong password given\n" "Decrypting of the Key failed\n" "Export is not possible" msgstr "" "Fel lösenord angavs\n" "Dekryptering av nyckeln misslyckades\n" "Exportering är inte möjlig" #: ../lib/KEY.pm:206 msgid "Converting failed, Export not possible" msgstr "Konvertering misslyckades, exportering inte möjlig" #: ../lib/KEY.pm:213 #: ../lib/KEY.pm:404 #, c-format msgid "Can't open Key file: %s: %s" msgstr "Kan inte öppna nyckelfil: %s: %s" #: ../lib/KEY.pm:246 #, c-format msgid "Key succesfully exported to %s" msgstr "Nyckel exporterad till %s" #: ../lib/KEY.pm:262 msgid "Certificate is necessary for export as PKCS#12" msgstr "Certifikat är nödvändigt för exportering som PKCS#12" #: ../lib/KEY.pm:308 msgid "Certificate is necessary for export as Zip file" msgstr "Certifikat är nödvändigt för export som Zip-fil" #: ../lib/KEY.pm:332 msgid "Can't read Key file" msgstr "Kan inte läsa nyckelfil" #: ../lib/KEY.pm:386 #, c-format msgid "Invalid format for export requested: %s" msgstr "Ogiltigt format för export begärdes: %s" #: ../lib/KEY.pm:392 msgid "Something Failed ??" msgstr "Något gick fel ??" #: ../lib/KEY.pm:442 #, c-format msgid "" "Can't open Key file:\n" "%s" msgstr "" "Kan inte öppna nyckelfil:\n" "%s" #: ../lib/KEY.pm:479 msgid "The password for your old CA Key is wrong" msgstr "Lösenordet för din gamla CA-nyckel är felaktigt" #: ../lib/OpenSSL.pm:70 msgid "Creating DSA key in progress..." msgstr "Skapande av DSA-nyckel pågår..." #: ../lib/OpenSSL.pm:104 msgid "Creating RSA key in progress..." msgstr "Skapande av RSA-nyckel pågår..." #: ../lib/OpenSSL.pm:449 #, c-format msgid "Can't open CRL '%s': %s" msgstr "Kan inte öppna CRL \"%s\": %s" #: ../lib/OpenSSL.pm:464 #: ../lib/OpenSSL.pm:477 msgid "Error converting CRL" msgstr "Fel vid konvertering av CRL" #: ../lib/OpenSSL.pm:575 #: ../lib/OpenSSL.pm:588 msgid "Error converting Certificate" msgstr "Fel vid konvertering av certifikat" #: ../lib/OpenSSL.pm:648 #: ../lib/OpenSSL.pm:665 msgid "Error reading fingerprint from Certificate" msgstr "Fel vid läsning av certfikatets fingeravtryck" #: ../lib/OpenSSL.pm:683 msgid "Error reading subject from Certificate" msgstr "Fel vid läsning av certifikatets ämnesrad" #: ../lib/OpenSSL.pm:693 msgid "Can't read CRL" msgstr "Kan inte läsa CRL" #: ../lib/OpenSSL.pm:716 msgid "UNDEFINED" msgstr "ODEFINIERAD" #: ../lib/OpenSSL.pm:743 #, c-format msgid "Can't open Request file %s: %s" msgstr "Kan inte öppna fil för begäran %s: %s" #: ../lib/OpenSSL.pm:760 #: ../lib/OpenSSL.pm:774 #: ../lib/REQ.pm:652 msgid "Error converting Request" msgstr "Fel vid konvertering av begäran" #: ../lib/OpenSSL.pm:847 #, c-format msgid "Can't open file %s: %s" msgstr "Kan inte öppna fil %s: %s" #: ../lib/OpenSSL.pm:958 #: ../lib/OpenSSL.pm:990 #, c-format msgid "Can't read index %s: %s" msgstr "Kan inte läsa index %s: %s" #: ../lib/OpenSSL.pm:1000 #, c-format msgid "Can't write index %s: %s" msgstr "Kan inte skriva index %s: %s" #: ../lib/REQ.pm:59 #, c-format msgid "Strange value for 'opts': %s" msgstr "Konstigt värde för \"opts\": %s" #: ../lib/REQ.pm:102 msgid "Please specify at least Common Name " msgstr "Vänligen ange åtminstone namn " #: ../lib/REQ.pm:103 msgid "and Password" msgstr "och lösenord" #: ../lib/REQ.pm:246 #: ../lib/REQ.pm:376 msgid "Request file not found" msgstr "Fil med begäran hittades inte" #: ../lib/REQ.pm:299 msgid "Can't open Request directory" msgstr "Kan inte öppna katalog för begäran" #: ../lib/REQ.pm:320 #, c-format msgid " Read Request: %s" msgstr " Läs begäran: %s" #: ../lib/REQ.pm:426 msgid "Can't read serial" msgstr "Kan inte läsa serienummer" #: ../lib/REQ.pm:498 msgid "" "Wrong CA password given\n" "Signing of the Request failed" msgstr "" "Fel CA-lösenord angavs\n" "Signering av begäran misslyckades" #: ../lib/REQ.pm:504 msgid "" "CA Key not found\n" "Signing of the Request failed" msgstr "" "CA-nyckel hittades inte\n" "Signering av begäran misslyckades" #: ../lib/REQ.pm:510 msgid "" "Certificate already existing\n" "Signing of the Request failed" msgstr "" "Certifikatet existerar redan\n" "Signering av begäran misslyckades" #: ../lib/REQ.pm:516 msgid "" "Invalid IP Address given\n" "Signing of the Request failed" msgstr "" "Ogiltigt IP-adress angavs\n" "Signering av begäran misslyckades" #: ../lib/REQ.pm:523 #: ../lib/REQ.pm:541 msgid "Signing of the Request failed" msgstr "Signering av begäran misslyckades" #: ../lib/REQ.pm:548 msgid "Can't read Certificate file" msgstr "Kan inte läsa certifikatfil" #: ../lib/REQ.pm:554 #: ../lib/REQ.pm:564 msgid "Can't write Certificate file" msgstr "Kan inte skriva certifikatfil" #: ../lib/REQ.pm:576 msgid "" "Request signed succesfully.\n" "Certificate created" msgstr "" "Signering av begäran lyckades.\n" "Certifikat skapat" #: ../lib/REQ.pm:617 msgid "Please select a Request file first" msgstr "Vänligen välj en fil innehållande en begäran först" #: ../lib/REQ.pm:623 msgid "Can't find Request file: " msgstr "Kan inte hitta fil med begäran: " #: ../lib/REQ.pm:629 msgid "Can't read Request file:" msgstr "Kan inte läsa fil med begäran:" #: ../lib/REQ.pm:675 msgid "Parsing Request failed" msgstr "Tolkning av begäran misslyckades" #: ../lib/TCONFIG.pm:43 msgid "Please select a CA first" msgstr "Vänligen välj ett CA först" #: ../lib/TCONFIG.pm:50 msgid "Can't open configuration" msgstr "Kan inte öppna konfiguration" #: ../lib/TCONFIG.pm:285 #: ../lib/TCONFIG.pm:300 #: ../lib/GUI/TCONFIG.pm:39 #: ../lib/GUI/TCONFIG.pm:1289 msgid "Can't get CA name" msgstr "Kan inte hämta CA-namn" #: ../lib/TCONFIG.pm:328 msgid "Can't open configfile" msgstr "Kan inte öppna konfigurationsfil" #: ../lib/GUI/HELPERS.pm:55 #: ../lib/GUI/HELPERS.pm:95 #: ../lib/GUI/HELPERS.pm:136 msgid "Command Details" msgstr "Detaljer om kommando" #: ../lib/GUI/HELPERS.pm:306 msgid "Request Files (*.pem, *.der, *.req)" msgstr "Filer för begäran (*.pem, *.der, *.req)" #: ../lib/GUI/HELPERS.pm:313 msgid "All Files (*.*)" msgstr "Alla filer (*.*)" #: ../lib/GUI/TCONFIG.pm:66 msgid "" "All Settings are written unchanged to openssl.conf.\n" "So please study the documentation of OpenSSL if you don't know exactly what to do.\n" "If you are still unsure - keep the defaults and everything is expected to work fine." msgstr "" "Alla inställningar skrivs som de är till openssl.conf.\n" "Vänligen läs dokumentationen för OpenSSL om du inte vet exakt vad du ska göra.\n" "Om du fortfarande är osäker - behåll de förvalda värdena och allt bör fungera som det ska." #: ../lib/GUI/TCONFIG.pm:100 #: ../lib/GUI/TCONFIG.pm:108 msgid "OpenSSL Configuration" msgstr "Konfiguration av OpenSSL" #: ../lib/GUI/TCONFIG.pm:121 msgid "Only change these options, if you really know, what you are doing!!" msgstr "Ändra endast dessa alternativ, om du verkligen vet vad du gör!!" #: ../lib/GUI/TCONFIG.pm:129 msgid "You should be aware, that some options may break some crappy software!!" msgstr "Du bör känna till att vissa alternativ kan göra sönder viss rutten programvara!!" #: ../lib/GUI/TCONFIG.pm:138 #: ../lib/GUI/TCONFIG.pm:1335 msgid "If you are unsure: leave the defaults untouched" msgstr "Om du är osäker: lämna kvar förvalda värden" #: ../lib/GUI/TCONFIG.pm:174 msgid "These Settings are passed to OpenSSL for creating Server Certificates" msgstr "Dessa inställningar skickas till OpenSSL för att skapa servercertifikat" #: ../lib/GUI/TCONFIG.pm:179 #: ../lib/GUI/TCONFIG.pm:603 #: ../lib/GUI/TCONFIG.pm:1007 #: ../lib/GUI/TCONFIG.pm:1227 #: ../lib/GUI/TCONFIG.pm:1327 msgid "Multiple Values can be separated by \",\"" msgstr "Flera värden kan separeras med \",\"" #: ../lib/GUI/TCONFIG.pm:199 #: ../lib/GUI/TCONFIG.pm:201 msgid "Server Certificate Settings" msgstr "Inställningar för servercertifikat" #: ../lib/GUI/TCONFIG.pm:207 #: ../lib/GUI/TCONFIG.pm:629 #: ../lib/GUI/TCONFIG.pm:1035 #: ../lib/GUI/TCONFIG.pm:1449 msgid "Subject alternative name (subjectAltName):" msgstr "Ämne alternativt namn (subjectAltName):" #: ../lib/GUI/TCONFIG.pm:304 #: ../lib/GUI/TCONFIG.pm:735 #: ../lib/GUI/TCONFIG.pm:1095 #: ../lib/GUI/TCONFIG.pm:1345 msgid "Key Usage (keyUsage):" msgstr "Nyckelanvändning (keyUsage):" #: ../lib/GUI/TCONFIG.pm:383 #: ../lib/GUI/TCONFIG.pm:807 msgid "Extended Key Usage (extendedKeyUsage):" msgstr "Utökad nyckelanvändning (extendedKeyUsage):" #: ../lib/GUI/TCONFIG.pm:459 #: ../lib/GUI/TCONFIG.pm:882 #: ../lib/GUI/TCONFIG.pm:1064 #: ../lib/GUI/TCONFIG.pm:1418 msgid "Netscape Certificate Type (nsCertType):" msgstr "Typ av Netscape-certifikat (nsCertType):" #: ../lib/GUI/TCONFIG.pm:487 msgid "Netscape SSL Server Name (nsSslServerName):" msgstr "Netscape SSL-servernamn (nsSslServerName):" #: ../lib/GUI/TCONFIG.pm:512 #: ../lib/GUI/TCONFIG.pm:912 #: ../lib/GUI/TCONFIG.pm:1170 msgid "Netscape Revocation URL (nsRevocationUrl):" msgstr "Netscape URL för återkallning (nsRevocationUrl):" #: ../lib/GUI/TCONFIG.pm:537 #: ../lib/GUI/TCONFIG.pm:936 msgid "Netscape Renewal URL (nsRenewalUrl):" msgstr "Netscape URL för förnyelse (nsRenewalUrl):" #: ../lib/GUI/TCONFIG.pm:598 msgid "These Settings are passed to OpenSSL for creating Client Certificates" msgstr "Dessa inställningar skickas till OpenSSL för skapande av klientcertifikat" #: ../lib/GUI/TCONFIG.pm:623 msgid "Client Certificate Settings" msgstr "Inställningar för klientcertifikat" #: ../lib/GUI/TCONFIG.pm:1002 msgid "These Settings are passed to OpenSSL for creating CA Certificates" msgstr "Dessa inställningar skickas till OpenSSL för skapande av CA-certifikat" #: ../lib/GUI/TCONFIG.pm:1027 #: ../lib/GUI/TCONFIG.pm:1029 msgid "CA Certificate Settings" msgstr "Inställningar för CA-certifikat" #: ../lib/GUI/TCONFIG.pm:1222 msgid "These Settings are passed to OpenSSL for creating Certificate Revocation Lists" msgstr "Dessa inställningar skickas till OpenSSL för skapande av certifikatspärrlistor" #: ../lib/GUI/TCONFIG.pm:1248 msgid "Revocation List Settings" msgstr "Inställningar för spärrlista" #: ../lib/GUI/TCONFIG.pm:1309 msgid "CA Configuration" msgstr "CA-konfiguration" #: ../lib/GUI/TCONFIG.pm:1317 msgid "These Settings are passed to OpenSSL for creating this CA Certificate" msgstr "Dessa inställningar skickas till OpenSSL för skapande av det här CA-certifikatet" #: ../lib/GUI/TCONFIG.pm:1322 msgid "and the CA Certificates of every SubCA, created with this CA." msgstr "och CA-certifikaten för varje Under-CA skapas med detta CA." #: ../lib/GUI/WORDS.pm:28 #: ../lib/GUI/WORDS.pm:75 msgid "Not set" msgstr "Inte inställd" #: ../lib/GUI/WORDS.pm:29 #: ../lib/GUI/WORDS.pm:76 msgid "Ask User" msgstr "Fråga användaren" #: ../lib/GUI/WORDS.pm:30 #: ../lib/GUI/WORDS.pm:77 msgid "critical" msgstr "kritisk" #: ../lib/GUI/WORDS.pm:31 #: ../lib/GUI/WORDS.pm:78 msgid "not critical" msgstr "inte kritisk" #: ../lib/GUI/WORDS.pm:32 #: ../lib/GUI/WORDS.pm:79 msgid "Copy Email" msgstr "Kopiera e-post" #: ../lib/GUI/WORDS.pm:33 #: ../lib/GUI/WORDS.pm:80 msgid "raw" msgstr "rå" #: ../lib/GUI/WORDS.pm:34 #: ../lib/GUI/WORDS.pm:81 msgid "DNS Name" msgstr "DNS-namn" #: ../lib/GUI/WORDS.pm:35 #: ../lib/GUI/WORDS.pm:83 msgid "IP Address" msgstr "IP-adress" #: ../lib/GUI/WORDS.pm:36 #: ../lib/GUI/WORDS.pm:82 msgid "Email" msgstr "E-post" #: ../lib/GUI/WORDS.pm:37 #: ../lib/GUI/WORDS.pm:84 msgid "SSL Server" msgstr "SSL-server" #: ../lib/GUI/WORDS.pm:38 #: ../lib/GUI/WORDS.pm:85 msgid "SSL Server, SSL Client" msgstr "SSL-server, SSL-klient" #: ../lib/GUI/WORDS.pm:39 #: ../lib/GUI/WORDS.pm:86 msgid "Key Encipherment" msgstr "Nyckelchiffrering" #: ../lib/GUI/WORDS.pm:40 #: ../lib/GUI/WORDS.pm:87 msgid "Digital Signature" msgstr "Digital signatur" #: ../lib/GUI/WORDS.pm:41 #: ../lib/GUI/WORDS.pm:88 msgid "Key Encipherment, Digital Signature" msgstr "Nyckelkryptering, Digital signatur" #: ../lib/GUI/WORDS.pm:42 #: ../lib/GUI/WORDS.pm:89 msgid "Object Signing" msgstr "Objektsignering" #: ../lib/GUI/WORDS.pm:43 #: ../lib/GUI/WORDS.pm:93 msgid "SSL Client, Object Signing" msgstr "SSL-klient, Objektsignering" #: ../lib/GUI/WORDS.pm:44 #: ../lib/GUI/WORDS.pm:91 msgid "SSL Client, Email(S/MIME)" msgstr "SSL-klient, E-post(S/MIME)" #: ../lib/GUI/WORDS.pm:45 #: ../lib/GUI/WORDS.pm:92 msgid "SSL Client" msgstr "SSL-klient" #: ../lib/GUI/WORDS.pm:46 #: ../lib/GUI/WORDS.pm:90 msgid "Email(S/MIME)" msgstr "E-post(S/MIME)" #: ../lib/GUI/WORDS.pm:47 #: ../lib/GUI/WORDS.pm:94 msgid "SSL Client, Email, Object Signing" msgstr "SSL-klient, E-post, Objektsignering" #: ../lib/GUI/WORDS.pm:48 #: ../lib/GUI/WORDS.pm:95 msgid "Object Signing CA" msgstr "Objektsignering CA" #: ../lib/GUI/WORDS.pm:49 #: ../lib/GUI/WORDS.pm:96 msgid "S/MIME CA" msgstr "S/MIME CA" #: ../lib/GUI/WORDS.pm:50 #: ../lib/GUI/WORDS.pm:97 msgid "SSL CA" msgstr "SSL CA" #: ../lib/GUI/WORDS.pm:51 #: ../lib/GUI/WORDS.pm:98 msgid "SSL CA, S/MIME CA" msgstr "SSL CA, S/MIME CA" #: ../lib/GUI/WORDS.pm:52 #: ../lib/GUI/WORDS.pm:99 msgid "SSL CA, Object Signing CA" msgstr "SSL CA, Objektsignering CA" #: ../lib/GUI/WORDS.pm:53 #: ../lib/GUI/WORDS.pm:100 msgid "S/MIME CA, Object Signing CA" msgstr "S/MIME CA, Objektsignering CA" #: ../lib/GUI/WORDS.pm:54 #: ../lib/GUI/WORDS.pm:101 msgid "SSL CA, S/MIME CA, Object Signing CA" msgstr "SSL CA, S/MIME CA, Objektsignering CA" #: ../lib/GUI/WORDS.pm:55 #: ../lib/GUI/WORDS.pm:102 msgid "Certificate Signing" msgstr "Certifikatsignering" #: ../lib/GUI/WORDS.pm:56 #: ../lib/GUI/WORDS.pm:103 msgid "CRL Signing" msgstr "CRL-signering" #: ../lib/GUI/WORDS.pm:57 #: ../lib/GUI/WORDS.pm:104 msgid "Certificate Signing, CRL Signing" msgstr "Certifikatsignering, CRL-signering" #: ../lib/GUI/WORDS.pm:65 msgid "Creation Date" msgstr "Skapad datum" #: ../lib/GUI/WORDS.pm:68 msgid "Public Key Algorithm" msgstr "Algoritm för publik nyckel" #: ../lib/GUI/WORDS.pm:69 msgid "Signature Algorithm" msgstr "Signaturalgoritm" #: ../lib/GUI/WORDS.pm:73 #: ../lib/GUI/X509_infobox.pm:81 msgid "Fingerprint (MD5)" msgstr "Fingeravtryck: (MD5)" #: ../lib/GUI/WORDS.pm:74 #: ../lib/GUI/X509_infobox.pm:90 msgid "Fingerprint (SHA1)" msgstr "Fingeravtryck: (SHA1)" #: ../lib/GUI/X509_browser.pm:450 msgid "Certificate Information" msgstr "Certifikatinformation" #: ../lib/GUI/X509_browser.pm:454 msgid "Request Information" msgstr "Information om begäran" #: ../lib/GUI/X509_browser.pm:573 msgid "Invalid browser mode for selection_fname():" msgstr "Ogiltigt bläddringsläge för selection_fname():" #: ../lib/GUI/X509_browser.pm:573 #: ../lib/GUI/X509_browser.pm:609 #: ../lib/GUI/X509_browser.pm:658 #: ../lib/GUI/X509_browser.pm:679 #: ../lib/GUI/X509_browser.pm:700 #: ../lib/GUI/X509_browser.pm:727 msgid " " msgstr " " #: ../lib/GUI/X509_browser.pm:609 msgid "Invalid browser mode for selection_dn():" msgstr "Ogiltigt bläddringsläge för selection_dn():" #: ../lib/GUI/X509_browser.pm:658 #: ../lib/GUI/X509_browser.pm:679 msgid "Invalid browser mode for selection_cn():" msgstr "Ogiltigt bläddringsläge för selection_cn():" #: ../lib/GUI/X509_browser.pm:700 msgid "Invalid browser mode for selection_status():" msgstr "Ogiltigt bläddringsläge för selection_status():" #: ../lib/GUI/X509_browser.pm:727 msgid "Invalid browser mode for selection_type():" msgstr "Ogiltigt bläddringsläge för selection_type():" #: ../tinyca2:59 #, c-format msgid "Can't execute %s.\n" msgstr "Kan inte köra %s.\n" #: ../tinyca2:60 msgid "Configure correct path to openssl in tinyca.\n" msgstr "Konfigurera korrekt sökväg till openssl i tinyca.\n" #: ../tinyca2:65 msgid "zip command not found, support disabled.\n" msgstr "zip-kommando hittades inte, zip avstängd.\n" #: ../tinyca2:66 msgid "Configure correct path to zip in tinyca.\n" msgstr "Konfigurera korrekt sökväg till zip i tinyca.\n" #: ../tinyca2:73 msgid "Can't find templatedir.\n" msgstr "Kan inte hitta mallkatalog.\n" #: ../tinyca2:74 msgid "Please configure correct path with templates in tinyca.\n" msgstr "Vänligen konfigurera korrekt sökväg till mallarna i tinyca.\n" tinyca2-0.7.5/po/tinyca2.pot0000644000175000017500000011224510461475420017267 0ustar schollerscholler00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2006-07-14 00:27+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: ../lib/CA.pm:44 msgid "error: can't open basedir: " msgstr "" #: ../lib/CA.pm:102 msgid " Opening CA: " msgstr "" #: ../lib/CA.pm:109 ../lib/CA.pm:270 msgid "Invalid CA selected" msgstr "" #: ../lib/CA.pm:154 msgid " Initializing OpenSSL" msgstr "" #: ../lib/CA.pm:160 msgid " Check for CA Version" msgstr "" #: ../lib/CA.pm:167 ../lib/CA.pm:195 msgid "Can't open index file: " msgstr "" #: ../lib/CA.pm:182 msgid " Convert CA" msgstr "" #: ../lib/CA.pm:201 msgid "Can't open index backup: " msgstr "" #: ../lib/CA.pm:218 msgid "This CA is converted for openssl 0.9.7x now." msgstr "" #: ../lib/CA.pm:220 msgid "You will find a backup copy of the index file at: " msgstr "" #: ../lib/CA.pm:229 msgid " Read Configuration" msgstr "" #: ../lib/CA.pm:235 msgid " Create GUI" msgstr "" #: ../lib/CA.pm:241 msgid " Create Toolbar" msgstr "" #: ../lib/CA.pm:247 msgid " Actual CA: " msgstr "" #: ../lib/CA.pm:332 #, c-format msgid "CA: %s deleted" msgstr "" #: ../lib/CA.pm:386 msgid "Password of parent CA is needed for creating a Sub CA" msgstr "" #: ../lib/CA.pm:395 msgid "Name must be filled in and must" msgstr "" #: ../lib/CA.pm:396 msgid " not contain Spaces" msgstr "" #: ../lib/CA.pm:408 msgid "Please specify at least Common Name, " msgstr "" #: ../lib/CA.pm:409 msgid "Country and Password" msgstr "" #: ../lib/CA.pm:416 ../lib/REQ.pm:109 msgid "Passwords don't match" msgstr "" #: ../lib/CA.pm:424 ../lib/REQ.pm:120 msgid "Country must be exact 2 letter code" msgstr "" #: ../lib/CA.pm:428 #, c-format msgid "CA: %s already exists" msgstr "" #: ../lib/CA.pm:468 msgid "Name for storage must be filled in and must not contain spaces" msgstr "" #: ../lib/CA.pm:477 msgid "You didn't give a password for the private CA key." msgstr "" #: ../lib/CA.pm:479 msgid "The import will fail, if the key is encrypted." msgstr "" #: ../lib/CA.pm:488 msgid "Please give a new password for the CA" msgstr "" #: ../lib/CA.pm:495 msgid "New passwords don't match" msgstr "" #: ../lib/CA.pm:503 msgid "Please give a CA certificate to import" msgstr "" #: ../lib/CA.pm:508 #, c-format msgid "" "Can't read CA certificate file:\n" "%s" msgstr "" #: ../lib/CA.pm:518 msgid "Please give a CA keyfile to import" msgstr "" #: ../lib/CA.pm:523 #, c-format msgid "" "Can't read CA key file:\n" "%s" msgstr "" #: ../lib/CA.pm:535 msgid "Please give an Index file to import.\n" msgstr "" #: ../lib/CA.pm:536 msgid "If you don't have an Index file, i'll try to generate one.\n" msgstr "" #: ../lib/CA.pm:537 msgid "Attention: This will cause all Certificates to show up as valid.\n" msgstr "" #: ../lib/CA.pm:538 msgid "Attention: Revoked Certificates will not be determined." msgstr "" #: ../lib/CA.pm:549 #, c-format msgid "" "Can't read Index file:\n" "%s" msgstr "" #: ../lib/CA.pm:562 msgid "Please give a directory containing the certificates to import" msgstr "" #: ../lib/CA.pm:567 #, c-format msgid "" "Can't find certificate directory:\n" "%s" msgstr "" #: ../lib/CA.pm:578 #, c-format msgid "CA: %s already exists. Please choose another name" msgstr "" #: ../lib/CA.pm:594 msgid "Can't find X509v3 Basic Constraints in CA Certificate\n" msgstr "" #: ../lib/CA.pm:595 msgid "Import canceled" msgstr "" #: ../lib/CA.pm:601 msgid "The selected CA Certificate is no valid CA certificate\n" msgstr "" #: ../lib/CA.pm:602 #, c-format msgid "X509v3 Basic Constraint is set to: %s" msgstr "" #: ../lib/CA.pm:612 #, c-format msgid "" "Can't open Index file:\n" "%s" msgstr "" #: ../lib/CA.pm:665 ../lib/CERT.pm:61 #, c-format msgid "Can't open Certificate directory: %s" msgstr "" #: ../lib/CA.pm:684 ../lib/CERT.pm:84 #, c-format msgid " Read Certificate: %s" msgstr "" #: ../lib/CA.pm:694 #, c-format msgid "Can't read Certificate file: %s" msgstr "" #: ../lib/CA.pm:718 #, c-format msgid "Can't write Certificate file: %s" msgstr "" #: ../lib/CA.pm:768 ../lib/CA.pm:927 msgid "Can't open Index file: " msgstr "" #: ../lib/CA.pm:780 #, c-format msgid "Can't write CA Certificate file: %s" msgstr "" #: ../lib/CA.pm:800 ../lib/CA.pm:934 msgid "Can't write Serial file: " msgstr "" #: ../lib/CA.pm:814 #, c-format msgid "Can't write CA Key file: %s" msgstr "" #: ../lib/CA.pm:831 ../lib/CA.pm:1155 msgid "Generating CRL failed" msgstr "" #: ../lib/CA.pm:844 #, c-format msgid "Succesfully imported %d certificates\n" msgstr "" #: ../lib/CA.pm:845 msgid "Check the configuration of your imported CA." msgstr "" #: ../lib/CA.pm:862 ../lib/CA.pm:971 msgid "No CA name given" msgstr "" #: ../lib/CA.pm:871 ../lib/CA.pm:876 ../lib/CA.pm:881 ../lib/CA.pm:886 #: ../lib/CA.pm:891 ../lib/CA.pm:896 msgid "Can't create directory: " msgstr "" #: ../lib/CA.pm:905 #, c-format msgid "Can't open template file %s %s" msgstr "" #: ../lib/CA.pm:910 ../lib/CA.pm:1207 ../lib/CA.pm:1274 ../lib/CERT.pm:637 #: ../lib/KEY.pm:227 ../lib/REQ.pm:740 #, c-format msgid "Can't open output file: %s: %s" msgstr "" #: ../lib/CA.pm:984 ../lib/KEY.pm:482 ../lib/REQ.pm:167 msgid "Generating key failed" msgstr "" #: ../lib/CA.pm:1018 ../lib/REQ.pm:193 msgid "Generating Request failed" msgstr "" #: ../lib/CA.pm:1027 ../lib/CA.pm:1041 ../lib/CERT.pm:102 msgid "Can't read Certificate" msgstr "" #: ../lib/CA.pm:1032 ../lib/CA.pm:1046 msgid "Can't write Certificate" msgstr "" #: ../lib/CA.pm:1086 msgid "Generating certificate failed" msgstr "" #: ../lib/CA.pm:1106 ../lib/CA.pm:1131 #, c-format msgid "Can't open ca certificate file %s %s" msgstr "" #: ../lib/CA.pm:1115 #, c-format msgid "Can't create certificate chain file: %s: %s" msgstr "" #: ../lib/CA.pm:1164 #, c-format msgid "CA: %s created" msgstr "" #: ../lib/CA.pm:1199 #, c-format msgid "Can't open certificate chain file: %s: %s" msgstr "" #: ../lib/CA.pm:1220 #, c-format msgid "Certificate Chain succesfully exported to: %s" msgstr "" #: ../lib/CA.pm:1255 ../lib/CERT.pm:580 ../lib/GUI.pm:166 ../lib/KEY.pm:348 #: ../lib/REQ.pm:71 ../lib/REQ.pm:389 msgid "Can't read CA certificate" msgstr "" #: ../lib/CA.pm:1265 #, c-format msgid "Invalid Format for export_ca_cert(): %s" msgstr "" #: ../lib/CA.pm:1287 #, c-format msgid "Certificate succesfully exported to: %s" msgstr "" #: ../lib/CA.pm:1320 msgid "Please give the output file" msgstr "" #: ../lib/CA.pm:1328 msgid "Please give the CA password to create the Revocation List" msgstr "" #: ../lib/CA.pm:1349 msgid "" "Wrong CA password given\n" "Generating Revocation List failed" msgstr "" #: ../lib/CA.pm:1353 msgid "" "CA Key not found\n" "Generating Revocation List failed" msgstr "" #: ../lib/CA.pm:1357 ../lib/CA.pm:1363 msgid "Generating Revocation List failed" msgstr "" #: ../lib/CA.pm:1371 #, c-format msgid "CRL successfully exported to: %s" msgstr "" #: ../lib/CERT.pm:143 ../lib/CERT.pm:199 ../lib/CERT.pm:322 ../lib/CERT.pm:381 #: ../lib/GUI.pm:851 msgid "Please select a Certificate first" msgstr "" #: ../lib/CERT.pm:151 ../lib/CERT.pm:209 ../lib/CERT.pm:333 ../lib/CERT.pm:400 #: ../lib/GUI.pm:2706 ../lib/GUI.pm:2717 ../lib/OpenSSL.pm:702 #: ../lib/GUI/X509_browser.pm:276 msgid "VALID" msgstr "" #: ../lib/CERT.pm:153 #, c-format msgid "" "Can't renew Certifikate with Status: %s\n" "Please revoke the Certificate first" msgstr "" #: ../lib/CERT.pm:168 msgid "" "Key and Request are necessary for renewal of a Certificate\n" "Renewal is not possible!" msgstr "" #: ../lib/CERT.pm:210 #, c-format msgid "Can't revoke Certifikate with Status: %s" msgstr "" #: ../lib/CERT.pm:256 msgid "" "Wrong CA password given\n" "Revoking the Certificate failed" msgstr "" #: ../lib/CERT.pm:263 msgid "" "CA Key not found\n" "Revoking the Certificate failed" msgstr "" #: ../lib/CERT.pm:270 msgid "Revoking the Certificate failed" msgstr "" #: ../lib/CERT.pm:290 msgid "Generating a new Revocation List failed" msgstr "" #: ../lib/CERT.pm:335 msgid "" "Can't delete VALID certificate!\n" "Please revoke the Certificate first." msgstr "" #: ../lib/CERT.pm:401 msgid "Certificate seems not to be VALID" msgstr "" #: ../lib/CERT.pm:403 msgid "Export is not possible" msgstr "" #: ../lib/CERT.pm:430 ../lib/KEY.pm:172 msgid "Please give at least the output file" msgstr "" #: ../lib/CERT.pm:436 msgid "Key is necessary for export as PKCS#12" msgstr "" #: ../lib/CERT.pm:438 ../lib/CERT.pm:454 ../lib/KEY.pm:257 ../lib/KEY.pm:308 msgid "Export is not possible!" msgstr "" #: ../lib/CERT.pm:452 #, c-format msgid "Key is necessary for export as %s" msgstr "" #: ../lib/CERT.pm:492 ../lib/KEY.pm:216 #, c-format msgid "Can't open Certificate file: %s: %s" msgstr "" #: ../lib/CERT.pm:525 ../lib/KEY.pm:288 msgid "Generating PKCS#12 failed" msgstr "" #: ../lib/CERT.pm:533 ../lib/CERT.pm:616 ../lib/KEY.pm:295 ../lib/KEY.pm:381 #, c-format msgid "Certificate and Key successfully exported to %s" msgstr "" #: ../lib/CERT.pm:546 ../lib/CERT.pm:567 ../lib/REQ.pm:693 #, c-format msgid "Can't create temporary file: %s: %s" msgstr "" #: ../lib/CERT.pm:558 #, c-format msgid "Can't read Key file: %s: %s" msgstr "" #: ../lib/CERT.pm:588 ../lib/KEY.pm:321 ../lib/KEY.pm:337 ../lib/KEY.pm:355 msgid "Can't create temporary file" msgstr "" #: ../lib/CERT.pm:609 ../lib/KEY.pm:375 #, c-format msgid "Generating %s file failed" msgstr "" #: ../lib/CERT.pm:628 #, c-format msgid "Invalid Format for export_cert(): %s" msgstr "" #: ../lib/CERT.pm:648 #, c-format msgid "Certificate successfully exported to: %s" msgstr "" #: ../lib/GUI.pm:171 ../lib/GUI.pm:178 msgid "CA" msgstr "" #: ../lib/GUI.pm:185 msgid "CA Information" msgstr "" #: ../lib/GUI.pm:204 msgid "Certificates" msgstr "" #: ../lib/GUI.pm:244 ../lib/GUI.pm:2689 ../lib/GUI/WORDS.pm:56 #: ../lib/GUI/X509_browser.pm:160 ../lib/GUI/X509_browser.pm:168 #: ../lib/GUI/X509_browser.pm:177 msgid "Common Name" msgstr "" #: ../lib/GUI.pm:245 ../lib/GUI.pm:1273 ../lib/GUI.pm:2314 #: ../lib/GUI/WORDS.pm:57 ../lib/GUI/X509_browser.pm:161 #: ../lib/GUI/X509_browser.pm:169 ../lib/GUI/X509_browser.pm:178 msgid "eMail Address" msgstr "" #: ../lib/GUI.pm:246 ../lib/GUI/WORDS.pm:59 ../lib/GUI/X509_browser.pm:162 #: ../lib/GUI/X509_browser.pm:170 ../lib/GUI/X509_browser.pm:179 msgid "Organizational Unit" msgstr "" #: ../lib/GUI.pm:247 ../lib/GUI/WORDS.pm:58 ../lib/GUI/X509_browser.pm:163 #: ../lib/GUI/X509_browser.pm:171 ../lib/GUI/X509_browser.pm:180 msgid "Organization" msgstr "" #: ../lib/GUI.pm:248 ../lib/GUI/WORDS.pm:60 ../lib/GUI/X509_browser.pm:164 #: ../lib/GUI/X509_browser.pm:172 ../lib/GUI/X509_browser.pm:181 msgid "Location" msgstr "" #: ../lib/GUI.pm:249 ../lib/GUI/WORDS.pm:61 ../lib/GUI/X509_browser.pm:165 #: ../lib/GUI/X509_browser.pm:173 ../lib/GUI/X509_browser.pm:182 msgid "State" msgstr "" #: ../lib/GUI.pm:250 ../lib/GUI/WORDS.pm:62 ../lib/GUI/X509_browser.pm:166 #: ../lib/GUI/X509_browser.pm:174 ../lib/GUI/X509_browser.pm:183 msgid "Country" msgstr "" #: ../lib/GUI.pm:251 ../lib/GUI/WORDS.pm:68 ../lib/GUI/X509_browser.pm:184 msgid "Type" msgstr "" #: ../lib/GUI.pm:265 msgid "Keys" msgstr "" #: ../lib/GUI.pm:308 msgid "Requests" msgstr "" #: ../lib/GUI.pm:399 #, c-format msgid " Actual CA: %s" msgstr "" #: ../lib/GUI.pm:402 #, c-format msgid " Actual CA: %s - Certificates" msgstr "" #: ../lib/GUI.pm:405 #, c-format msgid " Actual CA: %s - Keys" msgstr "" #: ../lib/GUI.pm:408 #, c-format msgid " Actual CA: %s - Requests" msgstr "" #: ../lib/GUI.pm:457 ../lib/GUI.pm:1141 msgid "Open CA" msgstr "" #: ../lib/GUI.pm:463 msgid "New CA" msgstr "" #: ../lib/GUI.pm:469 ../lib/GUI.pm:2382 msgid "Import CA" msgstr "" #: ../lib/GUI.pm:475 ../lib/GUI.pm:1143 msgid "Delete CA" msgstr "" #: ../lib/GUI.pm:485 ../lib/GUI.pm:524 ../lib/GUI.pm:592 msgid "Details" msgstr "" #: ../lib/GUI.pm:491 msgid "History" msgstr "" #: ../lib/GUI.pm:497 msgid "Sub CA" msgstr "" #: ../lib/GUI.pm:503 msgid "Export CA" msgstr "" #: ../lib/GUI.pm:509 ../lib/GUI.pm:1419 msgid "Export CRL" msgstr "" #: ../lib/GUI.pm:516 msgid "Export Chain" msgstr "" #: ../lib/GUI.pm:530 ../lib/GUI.pm:598 msgid "View" msgstr "" #: ../lib/GUI.pm:540 ../lib/GUI.pm:604 msgid "New" msgstr "" #: ../lib/GUI.pm:547 ../lib/GUI.pm:578 msgid "Export" msgstr "" #: ../lib/GUI.pm:553 msgid "Revoke" msgstr "" #: ../lib/GUI.pm:563 msgid "Renew" msgstr "" #: ../lib/GUI.pm:570 ../lib/GUI.pm:584 ../lib/GUI.pm:627 msgid "Delete" msgstr "" #: ../lib/GUI.pm:610 msgid "Import" msgstr "" #: ../lib/GUI.pm:620 msgid "Sign" msgstr "" #: ../lib/GUI.pm:646 msgid "_CA" msgstr "" #: ../lib/GUI.pm:649 msgid "_Open CA" msgstr "" #: ../lib/GUI.pm:654 msgid "_New CA" msgstr "" #: ../lib/GUI.pm:659 msgid "_Delete CA" msgstr "" #: ../lib/GUI.pm:667 msgid "_Exit" msgstr "" #: ../lib/GUI.pm:674 msgid "_Preferences" msgstr "" #: ../lib/GUI.pm:677 msgid "Experts Only!!" msgstr "" #: ../lib/GUI.pm:682 msgid "OpenSSL _Configuration" msgstr "" #: ../lib/GUI.pm:689 ../lib/GUI.pm:692 msgid "_Help" msgstr "" #: ../lib/GUI.pm:697 msgid "_About TinyCA" msgstr "" #: ../lib/GUI.pm:728 msgid "Invalid mode for show_text():" msgstr "" #: ../lib/GUI.pm:733 ../lib/GUI.pm:848 ../lib/REQ.pm:236 ../lib/REQ.pm:367 msgid "Please select a Request first" msgstr "" #: ../lib/GUI.pm:736 msgid "Please select a certificate first" msgstr "" #: ../lib/GUI.pm:752 ../lib/GUI.pm:867 ../lib/GUI/X509_browser.pm:456 #: ../lib/GUI/X509_browser.pm:515 msgid "Can't read file" msgstr "" #: ../lib/GUI.pm:754 msgid "Request" msgstr "" #: ../lib/GUI.pm:754 msgid "Certificate" msgstr "" #: ../lib/GUI.pm:815 #, c-format msgid "Invalid mode for _show_popup_menu(): %s" msgstr "" #: ../lib/GUI.pm:843 msgid "Invalid mode for show_details():" msgstr "" #: ../lib/GUI.pm:869 ../lib/GUI.pm:969 ../lib/GUI.pm:3040 msgid "Request Details" msgstr "" #: ../lib/GUI.pm:869 ../lib/GUI.pm:969 ../lib/GUI.pm:2897 msgid "Certificate Details" msgstr "" #: ../lib/GUI.pm:911 ../lib/GUI.pm:1679 ../lib/GUI.pm:3061 msgid "Import Request" msgstr "" #: ../lib/GUI.pm:913 ../lib/GUI.pm:2438 msgid "Import CA Certificate" msgstr "" #: ../lib/GUI.pm:921 msgid "Do you want to import the following Certificate Request?" msgstr "" #: ../lib/GUI.pm:923 msgid "Do you want to import the following CA Certificate?" msgstr "" #: ../lib/GUI.pm:977 msgid "Subject DN" msgstr "" #: ../lib/GUI.pm:1001 msgid "Issuer" msgstr "" #: ../lib/GUI.pm:1027 msgid "Validity" msgstr "" #: ../lib/GUI.pm:1043 msgid "Key/Request Details:" msgstr "" #: ../lib/GUI.pm:1043 msgid "Key/Certificate Details:" msgstr "" #: ../lib/GUI.pm:1059 msgid "Fingerprints" msgstr "" #: ../lib/GUI.pm:1075 msgid "Requested X.509 Extensions" msgstr "" #: ../lib/GUI.pm:1075 msgid "X.509v3 Extensions" msgstr "" #: ../lib/GUI.pm:1100 msgid "Requested Netscape Extensions" msgstr "" #: ../lib/GUI.pm:1100 msgid "Netscape Extensions" msgstr "" #: ../lib/GUI.pm:1145 msgid "Invalid action given: " msgstr "" #: ../lib/GUI.pm:1167 ../lib/GUI.pm:1213 msgid "Invalid action for show_select_ca_dialog(): " msgstr "" #: ../lib/GUI.pm:1189 msgid "Available CAs" msgstr "" #: ../lib/GUI.pm:1245 msgid "Create Request" msgstr "" #: ../lib/GUI.pm:1246 msgid "Create a new Certificate Request" msgstr "" #: ../lib/GUI.pm:1260 msgid "Common Name (eg, your Name," msgstr "" #: ../lib/GUI.pm:1265 msgid "your eMail Address" msgstr "" #: ../lib/GUI.pm:1269 msgid "or the Servers Name)" msgstr "" #: ../lib/GUI.pm:1277 msgid "Password (protect your private Key):" msgstr "" #: ../lib/GUI.pm:1281 ../lib/GUI.pm:2294 msgid "Password (confirmation):" msgstr "" #: ../lib/GUI.pm:1285 ../lib/GUI.pm:2286 msgid "Country Name (2 letter code):" msgstr "" #: ../lib/GUI.pm:1289 ../lib/GUI.pm:2298 msgid "State or Province Name:" msgstr "" #: ../lib/GUI.pm:1293 ../lib/GUI.pm:2302 msgid "Locality Name (eg. city):" msgstr "" #: ../lib/GUI.pm:1297 ../lib/GUI.pm:2306 msgid "Organization Name (eg. company):" msgstr "" #: ../lib/GUI.pm:1303 ../lib/GUI.pm:1308 ../lib/GUI.pm:2310 msgid "Organizational Unit Name (eg. section):" msgstr "" #: ../lib/GUI.pm:1313 ../lib/GUI.pm:2322 ../lib/GUI/WORDS.pm:65 msgid "Keylength" msgstr "" #: ../lib/GUI.pm:1321 ../lib/GUI.pm:2352 msgid "Digest" msgstr "" #: ../lib/GUI.pm:1328 msgid "Algorithm" msgstr "" #: ../lib/GUI.pm:1359 ../lib/GUI.pm:2918 msgid "Revoke Certificate" msgstr "" #: ../lib/GUI.pm:1368 ../lib/GUI.pm:1444 ../lib/GUI.pm:2093 msgid "CA Password:" msgstr "" #: ../lib/GUI.pm:1374 msgid "Revocation Reason:" msgstr "" #: ../lib/GUI.pm:1419 msgid "Export Revocation List to File" msgstr "" #: ../lib/GUI.pm:1427 ../lib/GUI.pm:1515 ../lib/GUI.pm:1563 ../lib/GUI.pm:1687 #: ../lib/GUI.pm:1755 msgid "File:" msgstr "" #: ../lib/GUI.pm:1438 ../lib/GUI.pm:1526 ../lib/GUI.pm:1574 ../lib/GUI.pm:1697 #: ../lib/GUI.pm:1772 ../lib/GUI.pm:2435 ../lib/GUI.pm:2454 ../lib/GUI.pm:2473 #: ../lib/GUI.pm:2492 msgid "Browse..." msgstr "" #: ../lib/GUI.pm:1441 ../lib/GUI.pm:1554 ../lib/GUI.pm:1577 msgid "Export CA Certificate" msgstr "" #: ../lib/GUI.pm:1448 ../lib/GUI.pm:2099 ../lib/GUI.pm:2318 msgid "Valid for (Days):" msgstr "" #: ../lib/GUI.pm:1452 ../lib/GUI.pm:1581 ../lib/GUI.pm:1779 msgid "Export Format:" msgstr "" #: ../lib/GUI.pm:1458 ../lib/GUI.pm:1587 msgid "PEM" msgstr "" #: ../lib/GUI.pm:1467 ../lib/GUI.pm:1596 msgid "DER" msgstr "" #: ../lib/GUI.pm:1476 ../lib/GUI.pm:1605 msgid "TXT" msgstr "" #: ../lib/GUI.pm:1507 ../lib/GUI.pm:1529 msgid "Export CA Certificate Chain" msgstr "" #: ../lib/GUI.pm:1508 msgid "Export CA Certificate Chain to File" msgstr "" #: ../lib/GUI.pm:1555 msgid "Export CA Certificate to File" msgstr "" #: ../lib/GUI.pm:1635 ../lib/GUI.pm:1636 msgid "Export Key without Passphrase" msgstr "" #: ../lib/GUI.pm:1640 msgid "I hope you know what you're doing?" msgstr "" #: ../lib/GUI.pm:1644 msgid "The Key Passphrase is needed for decryption of the Key" msgstr "" #: ../lib/GUI.pm:1653 msgid "Password:" msgstr "" #: ../lib/GUI.pm:1679 ../lib/GUI.pm:1700 msgid "Import Request from File" msgstr "" #: ../lib/GUI.pm:1721 ../lib/GUI.pm:1759 ../lib/GUI.pm:2911 msgid "Export Certificate" msgstr "" #: ../lib/GUI.pm:1723 ../lib/GUI.pm:1761 ../lib/GUI.pm:2868 msgid "Export Key" msgstr "" #: ../lib/GUI.pm:1726 msgid "Invalid mode for show_export_dialog(): " msgstr "" #: ../lib/GUI.pm:1743 msgid "Export Certificate to File" msgstr "" #: ../lib/GUI.pm:1745 msgid "Export Key to File" msgstr "" #: ../lib/GUI.pm:1783 msgid "PEM (Certificate)" msgstr "" #: ../lib/GUI.pm:1785 msgid "PEM (Key)" msgstr "" #: ../lib/GUI.pm:1794 msgid "DER (Certificate)" msgstr "" #: ../lib/GUI.pm:1796 msgid "DER (Key without Passphrase)" msgstr "" #: ../lib/GUI.pm:1804 msgid "PKCS#12 (Certificate & Key)" msgstr "" #: ../lib/GUI.pm:1811 msgid "Zip (Certificate & Key)" msgstr "" #: ../lib/GUI.pm:1821 msgid "Tar (Certificate & Key)" msgstr "" #: ../lib/GUI.pm:1833 msgid "TXT (Certificate)" msgstr "" #: ../lib/GUI.pm:1839 msgid "Without Passphrase (PEM/PKCS#12)" msgstr "" #: ../lib/GUI.pm:1845 ../lib/GUI.pm:1872 ../lib/GUI.pm:1891 ../lib/GUI.pm:2018 #: ../lib/GUI.pm:2043 ../lib/GUI.pm:2196 msgid "Yes" msgstr "" #: ../lib/GUI.pm:1850 ../lib/GUI.pm:1877 ../lib/GUI.pm:1896 ../lib/GUI.pm:2024 #: ../lib/GUI.pm:2049 ../lib/GUI.pm:2202 msgid "No" msgstr "" #: ../lib/GUI.pm:1860 msgid "Include Key (PEM)" msgstr "" #: ../lib/GUI.pm:1865 msgid "Include Certificate (PEM)" msgstr "" #: ../lib/GUI.pm:1885 msgid "Include Fingerprint (PEM)" msgstr "" #: ../lib/GUI.pm:1993 ../lib/GUI.pm:1994 msgid "Export to PKCS#12" msgstr "" #: ../lib/GUI.pm:2001 msgid "Key Password:" msgstr "" #: ../lib/GUI.pm:2005 msgid "Export Password:" msgstr "" #: ../lib/GUI.pm:2008 msgid "Friendly Name:" msgstr "" #: ../lib/GUI.pm:2012 msgid "Without Passphrase" msgstr "" #: ../lib/GUI.pm:2037 msgid "Add CA Certificate to PKCS#12 structure" msgstr "" #: ../lib/GUI.pm:2085 ../lib/GUI.pm:3068 msgid "Sign Request" msgstr "" #: ../lib/GUI.pm:2085 msgid "Sign Request/Create Certificate" msgstr "" #: ../lib/GUI.pm:2110 ../lib/GUI.pm:2155 msgid "Subject alternative name (IP Address):" msgstr "" #: ../lib/GUI.pm:2113 ../lib/GUI.pm:2158 msgid "Subject alternative name (DNS Name):" msgstr "" #: ../lib/GUI.pm:2116 ../lib/GUI.pm:2164 msgid "Subject alternative name (raw):" msgstr "" #: ../lib/GUI.pm:2124 ../lib/GUI.pm:2172 msgid "Extended Key Usage:" msgstr "" #: ../lib/GUI.pm:2131 msgid "Netscape SSL Server Name:" msgstr "" #: ../lib/GUI.pm:2138 ../lib/GUI.pm:2179 msgid "Netscape Revocation URL:" msgstr "" #: ../lib/GUI.pm:2145 ../lib/GUI.pm:2186 msgid "Netscape Renewal URL:" msgstr "" #: ../lib/GUI.pm:2161 msgid "Subject alternative name (eMail Address):" msgstr "" #: ../lib/GUI.pm:2208 msgid "Add eMail Address to Subject DN:" msgstr "" #: ../lib/GUI.pm:2238 ../lib/GUI.pm:2242 msgid "Create CA" msgstr "" #: ../lib/GUI.pm:2238 msgid "Create a new Sub CA" msgstr "" #: ../lib/GUI.pm:2242 msgid "Create a new CA" msgstr "" #: ../lib/GUI.pm:2255 msgid "CA Password (for creating the new CA):" msgstr "" #: ../lib/GUI.pm:2266 ../lib/GUI.pm:2403 msgid "Name (for local storage):" msgstr "" #: ../lib/GUI.pm:2273 msgid "Data for CA Certificate" msgstr "" #: ../lib/GUI.pm:2282 msgid "Common Name (for the CA):" msgstr "" #: ../lib/GUI.pm:2290 msgid "Password (needed for signing):" msgstr "" #: ../lib/GUI.pm:2382 msgid "Import an existing CA into TinyCA" msgstr "" #: ../lib/GUI.pm:2393 msgid "Password of the private CA key (Needed for import):" msgstr "" #: ../lib/GUI.pm:2407 msgid "New password for the CA:" msgstr "" #: ../lib/GUI.pm:2411 msgid "Confirm password:" msgstr "" #: ../lib/GUI.pm:2416 msgid "Files/Directories to import" msgstr "" #: ../lib/GUI.pm:2424 msgid "CA Certificate (PEM/DER):" msgstr "" #: ../lib/GUI.pm:2443 msgid "CA private key (PEM/DER):" msgstr "" #: ../lib/GUI.pm:2457 msgid "Import CA private Key" msgstr "" #: ../lib/GUI.pm:2462 msgid "OpenSSL Index File (index.txt):" msgstr "" #: ../lib/GUI.pm:2476 msgid "Import Index File" msgstr "" #: ../lib/GUI.pm:2481 msgid "Directory containing certificates (PEM/DER):" msgstr "" #: ../lib/GUI.pm:2495 msgid "Import Certificates from directory" msgstr "" #: ../lib/GUI.pm:2509 msgid "You are kidding, are you??" msgstr "" #: ../lib/GUI.pm:2531 msgid "Spanish: Ramon Pons Vivanco " msgstr "" #: ../lib/GUI.pm:2532 msgid "Czech: Robert Wolf " msgstr "" #: ../lib/GUI.pm:2533 msgid "French: Thibault Le Meur " msgstr "" #: ../lib/GUI.pm:2549 msgid "Do you really want to delete the selected Request?" msgstr "" #: ../lib/GUI.pm:2551 msgid "Do you really want to delete the selected Key?" msgstr "" #: ../lib/GUI.pm:2553 msgid "Do you really want to delete the selected Certificate?" msgstr "" #: ../lib/GUI.pm:2603 msgid "Overwrite Request/Key" msgstr "" #: ../lib/GUI.pm:2609 msgid "The Key or the Request is already existing!" msgstr "" #: ../lib/GUI.pm:2614 msgid "You won't be able to sign this Request" msgstr "" #: ../lib/GUI.pm:2619 msgid "if the corresponding certificate is still valid" msgstr "" #: ../lib/GUI.pm:2636 msgid "The Certificate will be longer valid than your CA!" msgstr "" #: ../lib/GUI.pm:2638 msgid "This may cause problems with some software!!" msgstr "" #: ../lib/GUI.pm:2653 msgid "Expirationdate Warning" msgstr "" #: ../lib/GUI.pm:2688 ../lib/GUI/WORDS.pm:69 msgid "Serial" msgstr "" #: ../lib/GUI.pm:2690 ../lib/GUI/WORDS.pm:70 ../lib/GUI/X509_browser.pm:175 msgid "Status" msgstr "" #: ../lib/GUI.pm:2691 ../lib/GUI/WORDS.pm:64 msgid "Expiration Date" msgstr "" #: ../lib/GUI.pm:2692 msgid "Revocation Date" msgstr "" #: ../lib/GUI.pm:2693 msgid "Revocation Reason" msgstr "" #: ../lib/GUI.pm:2719 ../lib/OpenSSL.pm:705 msgid "EXPIRED" msgstr "" #: ../lib/GUI.pm:2721 ../lib/OpenSSL.pm:718 msgid "REVOKED" msgstr "" #: ../lib/GUI.pm:2741 msgid "CA History" msgstr "" #: ../lib/GUI.pm:2775 msgid "Overwrite Certificate" msgstr "" #: ../lib/GUI.pm:2781 msgid "There seems to be a certificate with the same Subject already." msgstr "" #: ../lib/GUI.pm:2786 msgid "" "Creating a new one (overwrite) will fail if it's not revoked or expired!" msgstr "" #: ../lib/GUI.pm:2792 msgid "Really try to overwrite the Certificate?" msgstr "" #: ../lib/GUI.pm:2825 msgid "Convert CA" msgstr "" #: ../lib/GUI.pm:2833 msgid "" "This CA seems to be created with openssl 0.9.6x. And it seems like you have " "switched to openssl 0.9.7x." msgstr "" #: ../lib/GUI.pm:2841 msgid "" "You won't be able to revoke the existing certificates without converting the " "index file of this CA to the new format." msgstr "" #: ../lib/GUI.pm:2849 msgid "" "Attention: it will not be easy to switch back, this has to be done manually" msgstr "" #: ../lib/GUI.pm:2875 msgid "Delete Key" msgstr "" #: ../lib/GUI.pm:2904 msgid "View Certificate" msgstr "" #: ../lib/GUI.pm:2925 msgid "Renew Certificate" msgstr "" #: ../lib/GUI.pm:2933 msgid "Delete Certificate" msgstr "" #: ../lib/GUI.pm:2956 msgid "Create Key and Certificate (Server)" msgstr "" #: ../lib/GUI.pm:2962 msgid "Create Key and Certificate (Client)" msgstr "" #: ../lib/GUI.pm:2983 msgid "Renew Certificate (Server)" msgstr "" #: ../lib/GUI.pm:2990 msgid "Renew Certificate (Client)" msgstr "" #: ../lib/GUI.pm:3012 msgid "Sign Request (Server)" msgstr "" #: ../lib/GUI.pm:3019 msgid "Sign Request (Client)" msgstr "" #: ../lib/GUI.pm:3047 msgid "View Request" msgstr "" #: ../lib/GUI.pm:3054 msgid "New Request" msgstr "" #: ../lib/GUI.pm:3076 msgid "Delete Request" msgstr "" #: ../lib/HELPERS.pm:207 #, c-format msgid "Can't write exportdir: %s, %s" msgstr "" #: ../lib/KEY.pm:45 ../lib/KEY.pm:137 msgid "Please select a Key first" msgstr "" #: ../lib/KEY.pm:54 msgid "Key file not found:" msgstr "" #: ../lib/KEY.pm:101 msgid "Can't open key directory" msgstr "" #: ../lib/KEY.pm:194 msgid "" "Wrong password given\n" "Decrypting of the Key failed\n" "Export is not possible" msgstr "" #: ../lib/KEY.pm:199 msgid "Converting failed, Export not possible" msgstr "" #: ../lib/KEY.pm:206 ../lib/KEY.pm:410 #, c-format msgid "Can't open Key file: %s: %s" msgstr "" #: ../lib/KEY.pm:239 #, c-format msgid "Key succesfully exported to %s" msgstr "" #: ../lib/KEY.pm:255 msgid "Certificate is necessary for export as PKCS#12" msgstr "" #: ../lib/KEY.pm:305 #, c-format msgid "Certificate is necessary for export as %s file" msgstr "" #: ../lib/KEY.pm:330 msgid "Can't read Key file" msgstr "" #: ../lib/KEY.pm:392 #, c-format msgid "Invalid format for export requested: %s" msgstr "" #: ../lib/KEY.pm:398 msgid "Something Failed ??" msgstr "" #: ../lib/KEY.pm:448 #, c-format msgid "" "Can't open Key file:\n" "%s" msgstr "" #: ../lib/KEY.pm:485 msgid "The password for your old CA Key is wrong" msgstr "" #: ../lib/OpenSSL.pm:73 msgid "Creating DSA key in progress..." msgstr "" #: ../lib/OpenSSL.pm:107 msgid "Creating RSA key in progress..." msgstr "" #: ../lib/OpenSSL.pm:456 #, c-format msgid "Can't open CRL '%s': %s" msgstr "" #: ../lib/OpenSSL.pm:471 ../lib/OpenSSL.pm:484 msgid "Error converting CRL" msgstr "" #: ../lib/OpenSSL.pm:582 ../lib/OpenSSL.pm:595 msgid "Error converting Certificate" msgstr "" #: ../lib/OpenSSL.pm:655 ../lib/OpenSSL.pm:672 msgid "Error reading fingerprint from Certificate" msgstr "" #: ../lib/OpenSSL.pm:690 msgid "Error reading subject from Certificate" msgstr "" #: ../lib/OpenSSL.pm:700 msgid "Can't read CRL" msgstr "" #: ../lib/OpenSSL.pm:723 msgid "UNDEFINED" msgstr "" #: ../lib/OpenSSL.pm:750 #, c-format msgid "Can't open Request file %s: %s" msgstr "" #: ../lib/OpenSSL.pm:767 ../lib/OpenSSL.pm:781 ../lib/REQ.pm:685 msgid "Error converting Request" msgstr "" #: ../lib/OpenSSL.pm:863 #, c-format msgid "Can't open file %s: %s" msgstr "" #: ../lib/OpenSSL.pm:981 ../lib/OpenSSL.pm:1013 #, c-format msgid "Can't read index %s: %s" msgstr "" #: ../lib/OpenSSL.pm:1023 #, c-format msgid "Can't write index %s: %s" msgstr "" #: ../lib/REQ.pm:58 #, c-format msgid "Strange value for 'opts': %s" msgstr "" #: ../lib/REQ.pm:101 msgid "Please specify at least Common Name " msgstr "" #: ../lib/REQ.pm:102 msgid "and Password" msgstr "" #: ../lib/REQ.pm:246 ../lib/REQ.pm:376 msgid "Request file not found" msgstr "" #: ../lib/REQ.pm:299 msgid "Can't open Request directory" msgstr "" #: ../lib/REQ.pm:320 #, c-format msgid " Read Request: %s" msgstr "" #: ../lib/REQ.pm:414 msgid "Can't read Request file" msgstr "" #: ../lib/REQ.pm:458 msgid "Can't read serial" msgstr "" #: ../lib/REQ.pm:531 msgid "" "Wrong CA password given\n" "Signing of the Request failed" msgstr "" #: ../lib/REQ.pm:537 msgid "" "CA Key not found\n" "Signing of the Request failed" msgstr "" #: ../lib/REQ.pm:543 msgid "" "Certificate already existing\n" "Signing of the Request failed" msgstr "" #: ../lib/REQ.pm:549 msgid "" "Invalid IP Address given\n" "Signing of the Request failed" msgstr "" #: ../lib/REQ.pm:556 ../lib/REQ.pm:574 msgid "Signing of the Request failed" msgstr "" #: ../lib/REQ.pm:581 msgid "Can't read Certificate file" msgstr "" #: ../lib/REQ.pm:587 ../lib/REQ.pm:597 msgid "Can't write Certificate file" msgstr "" #: ../lib/REQ.pm:609 msgid "" "Request signed succesfully.\n" "Certificate created" msgstr "" #: ../lib/REQ.pm:650 msgid "Please select a Request file first" msgstr "" #: ../lib/REQ.pm:656 msgid "Can't find Request file: " msgstr "" #: ../lib/REQ.pm:662 msgid "Can't read Request file:" msgstr "" #: ../lib/REQ.pm:708 msgid "Parsing Request failed" msgstr "" #: ../lib/TCONFIG.pm:42 msgid "Please select a CA first" msgstr "" #: ../lib/TCONFIG.pm:49 msgid "Can't open configuration" msgstr "" #: ../lib/TCONFIG.pm:284 ../lib/TCONFIG.pm:299 ../lib/GUI/TCONFIG.pm:47 #: ../lib/GUI/TCONFIG.pm:1302 msgid "Can't get CA name" msgstr "" #: ../lib/TCONFIG.pm:327 msgid "Can't open configfile" msgstr "" #: ../lib/GUI/HELPERS.pm:54 ../lib/GUI/HELPERS.pm:94 ../lib/GUI/HELPERS.pm:135 msgid "Command Details" msgstr "" #: ../lib/GUI/HELPERS.pm:305 msgid "Request Files (*.pem, *.der, *.req)" msgstr "" #: ../lib/GUI/HELPERS.pm:312 msgid "All Files (*.*)" msgstr "" #: ../lib/GUI/TCONFIG.pm:74 msgid "" "All Settings are written unchanged to openssl.conf.\n" "So please study the documentation of OpenSSL if you don't know exactly what " "to do.\n" "If you are still unsure - keep the defaults and everything is expected to " "work fine." msgstr "" #: ../lib/GUI/TCONFIG.pm:108 ../lib/GUI/TCONFIG.pm:116 msgid "OpenSSL Configuration" msgstr "" #: ../lib/GUI/TCONFIG.pm:129 msgid "Only change these options, if you really know, what you are doing!!" msgstr "" #: ../lib/GUI/TCONFIG.pm:137 msgid "You should be aware, that some options may break some crappy software!!" msgstr "" #: ../lib/GUI/TCONFIG.pm:146 ../lib/GUI/TCONFIG.pm:1348 msgid "If you are unsure: leave the defaults untouched" msgstr "" #: ../lib/GUI/TCONFIG.pm:182 msgid "These Settings are passed to OpenSSL for creating Server Certificates" msgstr "" #: ../lib/GUI/TCONFIG.pm:187 ../lib/GUI/TCONFIG.pm:612 #: ../lib/GUI/TCONFIG.pm:1019 ../lib/GUI/TCONFIG.pm:1239 #: ../lib/GUI/TCONFIG.pm:1340 msgid "Multiple Values can be separated by \",\"" msgstr "" #: ../lib/GUI/TCONFIG.pm:207 ../lib/GUI/TCONFIG.pm:209 msgid "Server Certificate Settings" msgstr "" #: ../lib/GUI/TCONFIG.pm:215 ../lib/GUI/TCONFIG.pm:638 #: ../lib/GUI/TCONFIG.pm:1047 ../lib/GUI/TCONFIG.pm:1462 msgid "Subject alternative name (subjectAltName):" msgstr "" #: ../lib/GUI/TCONFIG.pm:312 ../lib/GUI/TCONFIG.pm:744 #: ../lib/GUI/TCONFIG.pm:1107 ../lib/GUI/TCONFIG.pm:1358 msgid "Key Usage (keyUsage):" msgstr "" #: ../lib/GUI/TCONFIG.pm:391 ../lib/GUI/TCONFIG.pm:819 msgid "Extended Key Usage (extendedKeyUsage):" msgstr "" #: ../lib/GUI/TCONFIG.pm:467 ../lib/GUI/TCONFIG.pm:894 #: ../lib/GUI/TCONFIG.pm:1076 ../lib/GUI/TCONFIG.pm:1431 msgid "Netscape Certificate Type (nsCertType):" msgstr "" #: ../lib/GUI/TCONFIG.pm:496 msgid "Netscape SSL Server Name (nsSslServerName):" msgstr "" #: ../lib/GUI/TCONFIG.pm:521 ../lib/GUI/TCONFIG.pm:924 #: ../lib/GUI/TCONFIG.pm:1182 msgid "Netscape Revocation URL (nsRevocationUrl):" msgstr "" #: ../lib/GUI/TCONFIG.pm:546 ../lib/GUI/TCONFIG.pm:948 msgid "Netscape Renewal URL (nsRenewalUrl):" msgstr "" #: ../lib/GUI/TCONFIG.pm:607 msgid "These Settings are passed to OpenSSL for creating Client Certificates" msgstr "" #: ../lib/GUI/TCONFIG.pm:632 msgid "Client Certificate Settings" msgstr "" #: ../lib/GUI/TCONFIG.pm:1014 msgid "These Settings are passed to OpenSSL for creating CA Certificates" msgstr "" #: ../lib/GUI/TCONFIG.pm:1039 ../lib/GUI/TCONFIG.pm:1041 msgid "CA Certificate Settings" msgstr "" #: ../lib/GUI/TCONFIG.pm:1234 msgid "" "These Settings are passed to OpenSSL for creating Certificate Revocation " "Lists" msgstr "" #: ../lib/GUI/TCONFIG.pm:1260 msgid "Revocation List Settings" msgstr "" #: ../lib/GUI/TCONFIG.pm:1322 msgid "CA Configuration" msgstr "" #: ../lib/GUI/TCONFIG.pm:1330 msgid "These Settings are passed to OpenSSL for creating this CA Certificate" msgstr "" #: ../lib/GUI/TCONFIG.pm:1335 msgid "and the CA Certificates of every SubCA, created with this CA." msgstr "" #: ../lib/GUI/WORDS.pm:26 ../lib/GUI/WORDS.pm:73 msgid "Not set" msgstr "" #: ../lib/GUI/WORDS.pm:27 ../lib/GUI/WORDS.pm:74 msgid "Ask User" msgstr "" #: ../lib/GUI/WORDS.pm:28 ../lib/GUI/WORDS.pm:75 msgid "critical" msgstr "" #: ../lib/GUI/WORDS.pm:29 ../lib/GUI/WORDS.pm:76 msgid "not critical" msgstr "" #: ../lib/GUI/WORDS.pm:30 ../lib/GUI/WORDS.pm:77 msgid "Copy Email" msgstr "" #: ../lib/GUI/WORDS.pm:31 ../lib/GUI/WORDS.pm:78 msgid "raw" msgstr "" #: ../lib/GUI/WORDS.pm:32 ../lib/GUI/WORDS.pm:79 msgid "DNS Name" msgstr "" #: ../lib/GUI/WORDS.pm:33 ../lib/GUI/WORDS.pm:81 msgid "IP Address" msgstr "" #: ../lib/GUI/WORDS.pm:34 ../lib/GUI/WORDS.pm:80 msgid "Email" msgstr "" #: ../lib/GUI/WORDS.pm:35 ../lib/GUI/WORDS.pm:82 msgid "SSL Server" msgstr "" #: ../lib/GUI/WORDS.pm:36 ../lib/GUI/WORDS.pm:83 msgid "SSL Server, SSL Client" msgstr "" #: ../lib/GUI/WORDS.pm:37 ../lib/GUI/WORDS.pm:84 msgid "Key Encipherment" msgstr "" #: ../lib/GUI/WORDS.pm:38 ../lib/GUI/WORDS.pm:85 msgid "Digital Signature" msgstr "" #: ../lib/GUI/WORDS.pm:39 ../lib/GUI/WORDS.pm:86 msgid "Key Encipherment, Digital Signature" msgstr "" #: ../lib/GUI/WORDS.pm:40 ../lib/GUI/WORDS.pm:87 msgid "Object Signing" msgstr "" #: ../lib/GUI/WORDS.pm:41 ../lib/GUI/WORDS.pm:91 msgid "SSL Client, Object Signing" msgstr "" #: ../lib/GUI/WORDS.pm:42 ../lib/GUI/WORDS.pm:89 msgid "SSL Client, Email(S/MIME)" msgstr "" #: ../lib/GUI/WORDS.pm:43 ../lib/GUI/WORDS.pm:90 msgid "SSL Client" msgstr "" #: ../lib/GUI/WORDS.pm:44 ../lib/GUI/WORDS.pm:88 msgid "Email(S/MIME)" msgstr "" #: ../lib/GUI/WORDS.pm:45 ../lib/GUI/WORDS.pm:92 msgid "SSL Client, Email, Object Signing" msgstr "" #: ../lib/GUI/WORDS.pm:46 ../lib/GUI/WORDS.pm:93 msgid "Object Signing CA" msgstr "" #: ../lib/GUI/WORDS.pm:47 ../lib/GUI/WORDS.pm:94 msgid "S/MIME CA" msgstr "" #: ../lib/GUI/WORDS.pm:48 ../lib/GUI/WORDS.pm:95 msgid "SSL CA" msgstr "" #: ../lib/GUI/WORDS.pm:49 ../lib/GUI/WORDS.pm:96 msgid "SSL CA, S/MIME CA" msgstr "" #: ../lib/GUI/WORDS.pm:50 ../lib/GUI/WORDS.pm:97 msgid "SSL CA, Object Signing CA" msgstr "" #: ../lib/GUI/WORDS.pm:51 ../lib/GUI/WORDS.pm:98 msgid "S/MIME CA, Object Signing CA" msgstr "" #: ../lib/GUI/WORDS.pm:52 ../lib/GUI/WORDS.pm:99 msgid "SSL CA, S/MIME CA, Object Signing CA" msgstr "" #: ../lib/GUI/WORDS.pm:53 ../lib/GUI/WORDS.pm:100 msgid "Certificate Signing" msgstr "" #: ../lib/GUI/WORDS.pm:54 ../lib/GUI/WORDS.pm:101 msgid "CRL Signing" msgstr "" #: ../lib/GUI/WORDS.pm:55 ../lib/GUI/WORDS.pm:102 msgid "Certificate Signing, CRL Signing" msgstr "" #: ../lib/GUI/WORDS.pm:63 msgid "Creation Date" msgstr "" #: ../lib/GUI/WORDS.pm:66 msgid "Public Key Algorithm" msgstr "" #: ../lib/GUI/WORDS.pm:67 msgid "Signature Algorithm" msgstr "" #: ../lib/GUI/WORDS.pm:71 ../lib/GUI/X509_infobox.pm:80 msgid "Fingerprint (MD5)" msgstr "" #: ../lib/GUI/WORDS.pm:72 ../lib/GUI/X509_infobox.pm:89 msgid "Fingerprint (SHA1)" msgstr "" #: ../lib/GUI/X509_browser.pm:448 msgid "Certificate Information" msgstr "" #: ../lib/GUI/X509_browser.pm:452 msgid "Request Information" msgstr "" #: ../lib/GUI/X509_browser.pm:571 msgid "Invalid browser mode for selection_fname():" msgstr "" #: ../lib/GUI/X509_browser.pm:571 ../lib/GUI/X509_browser.pm:607 #: ../lib/GUI/X509_browser.pm:656 ../lib/GUI/X509_browser.pm:677 #: ../lib/GUI/X509_browser.pm:698 ../lib/GUI/X509_browser.pm:725 msgid " " msgstr "" #: ../lib/GUI/X509_browser.pm:607 msgid "Invalid browser mode for selection_dn():" msgstr "" #: ../lib/GUI/X509_browser.pm:656 ../lib/GUI/X509_browser.pm:677 msgid "Invalid browser mode for selection_cn():" msgstr "" #: ../lib/GUI/X509_browser.pm:698 msgid "Invalid browser mode for selection_status():" msgstr "" #: ../lib/GUI/X509_browser.pm:725 msgid "Invalid browser mode for selection_type():" msgstr "" #: ../tinyca2:63 #, c-format msgid "Can't execute %s.\n" msgstr "" #: ../tinyca2:64 msgid "Configure correct path to openssl in tinyca.\n" msgstr "" #: ../tinyca2:69 msgid "zip command not found, support disabled.\n" msgstr "" #: ../tinyca2:70 msgid "Configure correct path to zip in tinyca.\n" msgstr "" #: ../tinyca2:74 msgid "tar command not found, support disabled.\n" msgstr "" #: ../tinyca2:75 msgid "Configure correct path to tar in tinyca.\n" msgstr "" #: ../tinyca2:82 msgid "Can't find templatedir.\n" msgstr "" #: ../tinyca2:83 msgid "Please configure correct path with templates in tinyca.\n" msgstr "" tinyca2-0.7.5/lib/0000755000175000017500000000000010461475421015316 5ustar schollerscholler00000000000000tinyca2-0.7.5/lib/GUI/0000755000175000017500000000000010461475421015742 5ustar schollerscholler00000000000000tinyca2-0.7.5/lib/GUI/WORDS.pm0000644000175000017500000001222310461475420017175 0ustar schollerscholler00000000000000# Copyright (c) Stephan Martin # # $Id: WORDS.pm,v 1.2 2006/06/28 21:50:42 sm Exp $ # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. use strict; package GUI::WORDS; sub new { my $that = shift; my $self = { 'none' => _("Not set"), 'user' => _("Ask User"), 'critical' => _("critical"), 'noncritical' => _("not critical"), 'emailcopy' => _("Copy Email"), 'raw' => _("raw"), 'dns' => _("DNS Name"), 'ip' => _("IP Address"), 'mail' => _("Email"), 'server' => _("SSL Server"), 'server, client' => _("SSL Server, SSL Client"), 'key' => _("Key Encipherment"), 'sig' => _("Digital Signature"), 'keysig' => _("Key Encipherment, Digital Signature"), 'objsign' => _("Object Signing"), 'client, objsign' => _("SSL Client, Object Signing"), 'client, email' => _("SSL Client, Email(S/MIME)"), 'client' => _("SSL Client"), 'email' => _("Email(S/MIME)"), 'client, email, objsign'=> _("SSL Client, Email, Object Signing"), 'objCA' => _("Object Signing CA"), 'emailCA' => _("S/MIME CA"), 'sslCA' => _("SSL CA"), 'sslCA, emailCA' => _("SSL CA, S/MIME CA"), 'sslCA, objCA' => _("SSL CA, Object Signing CA"), 'emailCA, objCA' => _("S/MIME CA, Object Signing CA"), 'sslCA, emailCA, objCA' => _("SSL CA, S/MIME CA, Object Signing CA"), 'keyCertSign' => _("Certificate Signing"), 'cRLSign' => _("CRL Signing"), 'keyCertSign, cRLSign' => _("Certificate Signing, CRL Signing"), 'CN' => _("Common Name"), 'EMAIL' => _("eMail Address"), 'O' => _("Organization"), 'OU' => _("Organizational Unit"), 'L' => _("Location"), 'ST' => _("State"), 'C' => _("Country"), 'NOTBEFORE' => _("Creation Date"), 'NOTAFTER' => _("Expiration Date"), 'KEYSIZE' => _("Keylength"), 'PK_ALGORITHM' => _("Public Key Algorithm"), 'SIG_ALGORITHM' => _("Signature Algorithm"), 'TYPE' => _("Type"), 'SERIAL' => _("Serial"), 'STATUS' => _("Status"), 'FINGERPRINTMD5' => _("Fingerprint (MD5)"), 'FINGERPRINTSHA1' => _("Fingerprint (SHA1)"), _("Not set") => 'none', _("Ask User") => 'user', _("critical") => 'critical', _("not critical") => 'noncritical', _("Copy Email") => 'emailcopy', _("raw") => 'raw', _("DNS Name") => 'dns', _("Email") => 'email', _("IP Address") => 'ip', _("SSL Server") => 'server', _("SSL Server, SSL Client") => 'server, client', _("Key Encipherment") => 'key', _("Digital Signature") => 'sig', _("Key Encipherment, Digital Signature") => 'keysig', _("Object Signing") => 'objsign', _("Email(S/MIME)") => 'email', _("SSL Client, Email(S/MIME)") => 'client, email', _("SSL Client") => 'client', _("SSL Client, Object Signing") => 'client, objsign', _("SSL Client, Email, Object Signing") => 'client, email, objsign', _("Object Signing CA") => 'objCA', _("S/MIME CA") => 'emailCA', _("SSL CA") => 'sslCA', _("SSL CA, S/MIME CA") => 'sslCA, emailCA', _("SSL CA, Object Signing CA") => 'sslCA, objCA', _("S/MIME CA, Object Signing CA") => 'emailCA, objCA', _("SSL CA, S/MIME CA, Object Signing CA")=> 'sslCA, emailCA, objCA', _("Certificate Signing") => 'keyCertSign', _("CRL Signing") => 'cRLSign', _("Certificate Signing, CRL Signing") => 'keyCertSign, cRLSign' }; my $class = ref($that) || $that; bless($self, $class); $self; } 1 tinyca2-0.7.5/lib/GUI/X509_infobox.pm0000644000175000017500000001703210461475420020473 0ustar schollerscholler00000000000000# Copyright (c) Olaf Gellert and # Stephan Martin # # $Id: X509_infobox.pm,v 1.7 2006/06/28 21:50:42 sm Exp $ # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. use strict; package GUI::X509_infobox; use HELPERS; use GUI::HELPERS; use GUI::WORDS; use POSIX; my $version = "0.1"; my $true = 1; my $false = undef; sub new { my $that = shift; my $self = {}; my $class = ref($that) || $that; $self->{'init'} = shift; bless($self, $class); $self; } sub display { my ($self, $parent, $parsed, $mode, $title) = @_; my ($bottombox, $textbox, $lefttable, $righttable, $leftbox, $rightbox, @fields, $scrolled); $self->{'root'} = $parent; if (defined $self->{'child'}) { $self->{'child'}->destroy(); } # if title is given create a surrounding frame with the title if (defined $title) { $self->{'child'}= Gtk2::Frame->new($title); $self->{'x509textbox'}= Gtk2::VBox->new(0,0); $self->{'child'}->add($self->{'x509textbox'}); } # otherwise we create the VBox directly inside the root widget else { $self->{'child'} = Gtk2::VBox->new(0,0); $self->{'x509textbox'} = $self->{'child'}; } # and pack it there $self->{'root'}->pack_start($self->{'child'}, 1, 1, 0); if (($mode eq 'cert') || ($mode eq 'cacert')) { # fingerprint in the top of certtextbox if(defined($self->{'certfingerprintmd5'})) { $self->{'certfingerprintmd5'}->destroy(); } $self->{'certfingerprintmd5'} = GUI::HELPERS::create_label( _("Fingerprint (MD5)").": ".$parsed->{'FINGERPRINTMD5'}, 'center', 0, 0); $self->{'x509textbox'}->pack_start( $self->{'certfingerprintmd5'}, 0, 0, 0); if(defined($self->{'certfingerprintsha1'})) { $self->{'certfingerprintsha1'}->destroy(); } $self->{'certfingerprintsha1'} = GUI::HELPERS::create_label( _("Fingerprint (SHA1)").": ".$parsed->{'FINGERPRINTSHA1'}, 'center', 0, 0); $self->{'x509textbox'}->pack_start($self->{'certfingerprintsha1'}, 0, 0, 0); } if (($mode eq 'cert') || ($mode eq 'cacert')) { $bottombox = 'certbottombox'; $textbox = 'x509textbox'; $lefttable = 'certlefttable'; $leftbox = 'certleftbox'; $righttable = 'certrighttable'; $rightbox = 'certrightbox'; }else{ $bottombox = 'reqbottombox'; $textbox = 'x509textbox'; $lefttable = 'reqlefttable'; $leftbox = 'reqleftbox'; $righttable = 'reqrighttable'; $rightbox = 'reqrightbox'; } # hbox in the bottom if(defined($self->{$bottombox})) { $self->{$bottombox}->destroy(); } $self->{$bottombox} = Gtk2::HBox->new(1, 0); $self->{$textbox}->pack_start($self->{$bottombox}, 1, 1, 5); # vbox in the bottom/left if(defined($self->{$lefttable})) { $self->{$lefttable}->destroy(); } @fields = qw( CN EMAIL O OU L ST C); $self->{$lefttable} = _create_detail_table(\@fields, $parsed); # the only widget i know to set shadow type :-( $scrolled = Gtk2::ScrolledWindow->new(); $scrolled->set_shadow_type('etched-in'); $scrolled->set_policy('never', 'never'); $self->{$leftbox} = Gtk2::VBox->new(0, 0); $self->{$bottombox}->pack_start($self->{$leftbox}, 1, 1, 0); $self->{$leftbox}->pack_start($scrolled, 1, 1, 0); $scrolled->add($self->{$lefttable}); # vbox in the bottom/right if(defined($self->{$righttable})) { $self->{$righttable}->destroy(); } if ($mode eq "cacert") { @fields = qw(SERIAL NOTBEFORE NOTAFTER KEYSIZE PK_ALGORITHM SIG_ALGORITHM TYPE); } else { @fields = qw(STATUS SERIAL NOTBEFORE NOTAFTER KEYSIZE PK_ALGORITHM SIG_ALGORITHM TYPE); } $self->{$righttable} = _create_detail_table(\@fields, $parsed); $scrolled = Gtk2::ScrolledWindow->new(); $scrolled->set_shadow_type('etched-in'); $scrolled->set_policy('never', 'never'); $self->{$rightbox} = Gtk2::VBox->new(0, 0); $self->{$bottombox}->pack_start($self->{$rightbox}, 1, 1, 0); $self->{$rightbox}->pack_start($scrolled, 1, 1, 0); $scrolled->add($self->{$righttable}); $self->{$textbox}->show_all(); $parent->show_all(); } sub hide { my $self = shift; if (defined $self->{'child'}) { $self->{'child'}->destroy(); undef $self->{'child'}; } } # # create standard table with details (cert/req) # sub _create_detail_table { my ($fields, $parsed) = @_; my ($list, $store, $rows, $words, @l, $iter, $column, $renderer); $words = GUI::WORDS->new(); $store = Gtk2::ListStore->new('Glib::String', 'Glib::String'); $list = Gtk2::TreeView->new_with_model($store); $list->set_headers_visible(0); $list->get_selection->set_mode('none'); $renderer = Gtk2::CellRendererText->new(); $column = Gtk2::TreeViewColumn->new_with_attributes( '', $renderer, 'text' => 0); $list->append_column($column); $renderer = Gtk2::CellRendererText->new(); $column = Gtk2::TreeViewColumn->new_with_attributes( '', $renderer, 'text' => 1); $list->append_column($column); foreach my $f (@{$fields}) { if(defined($parsed->{$f})){ if(ref($parsed->{$f})) { foreach(@{$parsed->{$f}}) { $iter = $store->append(); $store->set($iter, 0 => $words->{$f}, 1 => $_); # print STDERR "DEBUG: add line: @l\n"; } }else{ # print STDERR "DEBUG: add line: @l\n"; $iter = $store->append(); $store->set($iter, 0 => $words->{$f}, 1 => $parsed->{$f}); } } } return($list); } 1; __END__ =head1 NAME GUI::X509_infobox - show X.509 certificates and requests in a Gtk2::VBox =head1 SYNOPSIS use X509_infobox; $infobox=X509_infobox->new(); $infobox->update($parent,$parsed,$mode,$title); $infobox->update($parent,$parsed,$mode); $infobox->hide(); =head1 DESCRIPTION This displays the information of an X.509v3 certificate or certification request (CSR) inside a given Gtk2::VBox. Creation of an X509_infobox is done by calling B, no arguments are required. The infobox is shown when inserted into an already existing Gtk2::VBox using the method B. Arguments to update are: =over 1 =item $parent: the existing Gtk2::VBox inside which the info will be displayed. =item $parsed: a structure returned by OpenSSL::parsecert() or OpenSSL::parsecrl() containing the required information. =item $mode: what type of information is to be displayed. Valid modes are 'req' (certification request), 'cert' (certificate), 'key' or 'cacert' (same as certificate but without displaying the validity information of the cert because this cannot be decided on from the view of the actual CA). =item $title: if specified, a surrounding frame with the given title is drawn. =back An existing infobox is destroyed by calling B. =cut tinyca2-0.7.5/lib/GUI/CALLBACK.pm0000644000175000017500000001145610461475420017442 0ustar schollerscholler00000000000000# Copyright (c) Stephan Martin # # $Id: CALLBACK.pm,v 1.6 2006/06/28 21:50:42 sm Exp $ # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. use strict; package GUI::CALLBACK; use POSIX; # # fill given var-reference with text from entry # sub entry_to_var { my ($widget, $entry, $var, $box, $words) = @_; if(defined($words)) { $$var = $words->{$entry->get_text()}; }else{ $$var = $entry->get_text(); } if(defined($box)) { $box->{'button_ok'}->set_sensitive(1); $box->{'button_apply'}->set_sensitive(1); } return; } # # fill given var-reference with text from entry subjectAltName # and set senitivity of togglebuttons # sub entry_to_var_san { my ($widget, $entry, $var, $box, $words, $radio1, $radio2, $radio3, $radio4) = @_; if(defined($words)) { if(my $tmp = $words->{$entry->get_text()}) { $$var = $tmp; } else { $$var = $entry->get_text(); } #print STDERR "DEBUG: var: $$var\n"; if($$var eq 'user') { #print STDERR "set sensitive(1)\n"; $radio1->set_sensitive(1) if(defined($radio1)); $radio2->set_sensitive(1) if(defined($radio2)); $radio3->set_sensitive(1) if(defined($radio3)); $radio4->set_sensitive(1) if(defined($radio4)); }else{ #print STDERR "DEBUG: set sensitive(0)\n"; #print STDERR "DEBUG: r1 $radio1 r2 $radio2 r3 $radio3 r4 $radio4\n"; $radio1->set_sensitive(0) if(defined($radio1)); $radio2->set_sensitive(0) if(defined($radio2)); $radio3->set_sensitive(0) if(defined($radio3)); $radio4->set_sensitive(0) if(defined($radio4)); } }else{ $$var = $entry->get_text(); } if(defined($box)) { $box->{'button_ok'}->set_sensitive(1); $box->{'button_apply'}->set_sensitive(1); } return; } # # fill given var-reference with text from entry subjectAltName # and set senitivity of togglebuttons # sub entry_to_var_key { my ($widget, $entry, $var, $box, $words, $radio1, $radio2, $radio3) = @_; if(defined($words)) { if(my $tmp = $words->{$entry->get_text()}) { $$var = $tmp; } else { $$var = $entry->get_text(); } if(($$var ne '') && ($$var ne 'none')) { $radio1->set_sensitive(1) if(defined($radio1)); $radio2->set_sensitive(1) if(defined($radio2)); $radio3->set_sensitive(1) if(defined($radio3)); }else{ $radio1->set_sensitive(0) if(defined($radio1)); $radio2->set_sensitive(0) if(defined($radio2)); $radio3->set_sensitive(0) if(defined($radio3)); } }else{ $$var = $entry->get_text(); } if(defined($box)) { $box->{'button_ok'}->set_sensitive(1); $box->{'button_apply'}->set_sensitive(1); } return; } # # fill given var-reference with value from togglebutton # sub toggle_to_var { my ($button, $var, $value, $outfileref, $formatref, $fileentry, $pass1, $pass2) = @_; $$var = $value; if(defined($outfileref) && defined($formatref)) { if($$outfileref =~ s/\.(pem|der|txt|p12|zip|tar)$//i) { $$outfileref .= "." . lc $$formatref; # something seem broken, need tmp var my $tmp = $$outfileref; $fileentry->set_text($tmp); } } if(defined($pass1) && defined($pass2)) { if($$formatref eq "PEM") { $pass1->set_sensitive(1); $pass2->set_sensitive(1); } elsif ($$formatref eq "DER") { $pass1->set_sensitive(0); $pass2->set_sensitive(0); } elsif ($$formatref eq "P12") { $pass1->set_sensitive(0); $pass2->set_sensitive(0); } elsif ($$formatref eq "ZIP") { $pass1->set_sensitive(0); $pass2->set_sensitive(0); } elsif ($$formatref eq "TAR") { $pass1->set_sensitive(0); $pass2->set_sensitive(0); } } return; } # # fill given var-reference with value from togglebutton # sub toggle_to_var_pref { my ($button, $var, $value, $box) = @_; $$var = $value; if(defined($box) && defined($box->{'nb'}->get_current_page())) { $box->{'button_ok'}->set_sensitive(1); $box->{'button_apply'}->set_sensitive(1); } return; } 1 tinyca2-0.7.5/lib/GUI/HELPERS.pm0000644000175000017500000002705410461475420017411 0ustar schollerscholler00000000000000# Copyright (c) Stephan Martin # # $Id: HELPERS.pm,v 1.6 2006/06/28 21:50:42 sm Exp $ # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. use strict; package GUI::HELPERS; use POSIX; # # Error message box, kills application # sub print_error { my ($t, $ext) = @_; my ($box, $button, $dbutton, $expander, $text, $scrolled, $buffer); $button = Gtk2::Button->new_from_stock('gtk-ok'); $button->signal_connect('clicked', sub { HELPERS::exit_clean(1) }); $button->can_default(1); $box = Gtk2::MessageDialog->new( undef, [qw/destroy-with-parent modal/], 'error', 'none', $t); $box->set_default_size(600, 0); $box->set_resizable(1); if(defined($ext)) { $buffer = Gtk2::TextBuffer->new(); $buffer->set_text($ext); $text = Gtk2::TextView->new_with_buffer($buffer); $text->set_editable(0); $text->set_wrap_mode('word'); $scrolled = Gtk2::ScrolledWindow->new(undef, undef); $scrolled->set_policy('never', 'automatic'); $scrolled->set_shadow_type('etched-in'); $scrolled->add($text); $expander = Gtk2::Expander->new(_("Command Details")); $expander->add($scrolled); $box->vbox->add($expander); } $box->add_action_widget($button, 0); $box->show_all(); } # # Warning message box # sub print_warning { my ($t, $ext) = @_; my ($box, $button, $dbutton, $expander, $text, $scrolled, $buffer); $button = Gtk2::Button->new_from_stock('gtk-ok'); $button->signal_connect('clicked', sub { $box->destroy() }); $button->can_default(1); $box = Gtk2::MessageDialog->new( undef, [qw/destroy-with-parent modal/], 'warning', 'none', $t); $box->set_default_size(600, 0); $box->set_resizable(1); if(defined($ext)) { $buffer = Gtk2::TextBuffer->new(); $buffer->set_text($ext); $text = Gtk2::TextView->new_with_buffer($buffer); $text->set_editable(0); $text->set_wrap_mode('word'); $scrolled = Gtk2::ScrolledWindow->new(undef, undef); $scrolled->set_policy('never', 'automatic'); $scrolled->set_shadow_type('etched-in'); $scrolled->add($text); $expander = Gtk2::Expander->new(_("Command Details")); $expander->add($scrolled); $box->vbox->add($expander); } $box->add_action_widget($button, 0); $box->show_all(); return; } # # Info message box # sub print_info { my ($t, $ext) = @_; my ($box, $button, $dbutton, $buffer, $text, $scrolled, $expander); $button = Gtk2::Button->new_from_stock('gtk-ok'); $button->signal_connect('clicked', sub { $box->destroy() }); $button->can_default(1); $box = Gtk2::MessageDialog->new( undef, [qw/destroy-with-parent modal/], 'info', 'none', $t); $box->set_default_size(600, 0); $box->set_resizable(1); if(defined($ext)) { $buffer = Gtk2::TextBuffer->new(); $buffer->set_text($ext); $text = Gtk2::TextView->new_with_buffer($buffer); $text->set_editable(0); $text->set_wrap_mode('word'); $scrolled = Gtk2::ScrolledWindow->new(undef, undef); $scrolled->set_policy('never', 'automatic'); $scrolled->set_shadow_type('etched-in'); $scrolled->add($text); $expander = Gtk2::Expander->new(_("Command Details")); $expander->add($scrolled); $box->vbox->add($expander); } $box->add_action_widget($button, 0); $box->show_all(); return; } # # create standard dialog box # sub dialog_box { my ($title, $text, $button1, $button2) = @_; my $box = Gtk2::Dialog->new($title, undef, ["destroy-with-parent"]); $box->add_action_widget($button1, 0); if(defined($button2)) { $box->add_action_widget($button2, 0); $box->action_area->set_layout('spread'); } if(defined($text)) { my $label = create_label($text, 'center', 0, 1); $box->vbox->pack_start($label, 0, 0, 0); } $box->signal_connect(response => sub { $box->destroy }); return($box); } # # create standard label # sub create_label { my ($text, $mode, $wrap, $bold) = @_; $text = "$text" if($bold); my $label = Gtk2::Label->new($text); $label->set_justify($mode); if($mode eq 'center') { $label->set_alignment(0.5, 0.5); }elsif($mode eq 'left') { $label->set_alignment(0, 0); }elsif($mode eq 'right') { $label->set_alignment(1, 1); } $label->set_line_wrap($wrap); $label->set_markup($text) if($bold); return($label); } # # write two labels to table # sub label_to_table { my ($key, $val, $table, $row, $mode, $wrap, $bold) = @_; my ($label, $entry); $label = create_label($key, $mode, $wrap, $bold); $label->set_padding(20, 0); $table->attach_defaults($label, 0, 1, $row, $row+1); $label = create_label($val, $mode, $wrap, $bold); $label->set_padding(20, 0); $table->attach_defaults($label, 1, 2, $row, $row+1); $row++; $table->resize($row, 2); return($row); } # # write label and entry to table # sub entry_to_table { my ($text, $var, $table, $row, $visibility, $box) = @_; my ($label, $entry); $label = create_label($text, 'left', 0, 0); $table->attach_defaults($label, 0, 1, $row, $row+1); $entry = Gtk2::Entry->new(); $entry->set_text($$var) if(defined($$var)); $table->attach_defaults($entry, 1, 2, $row, $row+1); $entry->signal_connect('changed' => sub {GUI::CALLBACK::entry_to_var($entry, $entry, $var, $box)} ); $entry->set_visibility($visibility); return($entry); } # # sort the table by the clicked column # sub sort_clist { my ($clist, $col) = @_; $clist->set_sort_column($col); $clist->sort(); return(1); } sub create_activity_bar { my ($t) = @_; my($box, $bar); $box = Gtk2::MessageDialog->new( undef, [qw/destroy-with-parent modal/], 'info', 'none', $t); $bar = Gtk2::ProgressBar->new(); $bar->pulse(); $bar->set_pulse_step(0.1); $box->vbox->add($bar); $box->show_all(); return($box, $bar); } # # set curser busy # sub set_cursor { my $main = shift; my $busy = shift; if($busy) { $main->{'rootwin'}->set_cursor($main->{'busycursor'}); } else { $main->{'rootwin'}->set_cursor($main->{'cursor'}); } while(Gtk2->events_pending) { Gtk2->main_iteration; } } # # call file chooser # sub browse_file { my($title, $entry, $mode) = @_; my($file_chooser, $filename, $filter); $file_chooser = Gtk2::FileChooserDialog->new ($title, undef, $mode, 'gtk-cancel' => 'cancel', 'gtk-ok' => 'ok'); $file_chooser->add_shortcut_folder ('/tmp'); if($mode eq 'open') { $filter = Gtk2::FileFilter->new(); $filter->set_name(_("Request Files (*.pem, *.der, *.req)")); $filter->add_pattern("*.pem"); $filter->add_pattern("*.der"); $filter->add_pattern("*.req"); $file_chooser->add_filter($filter); $filter = Gtk2::FileFilter->new(); $filter->set_name(_("All Files (*.*)")); $filter->add_pattern("*"); $file_chooser->add_filter($filter); } if ('ok' eq $file_chooser->run) { $filename = $file_chooser->get_filename(); $entry->set_text($filename); } $file_chooser->destroy(); } # # set text in statusbar # sub set_status { my ($main, $t) = @_; $main->{'bar'}->pop($main->{'lastid'}) if(defined($main->{'lastid'})); $main->{'lastid'} = $main->{'bar'}->get_context_id('gargs'); $main->{'bar'}->push($main->{'lastid'}, $t); } 1 __END__ =head1 NAME GUI::HELPERS - helper functions for TinyCA, doing small jobs related to the GUI =head1 SYNOPSIS use GUI::HELPERS; GUI::HELPERS::print_info($text, $ext); GUI::HELPERS::print_warning($text, $ext); GUI::HELPERS::print_error($text, $ext); GUI::HELPERS::sort_clist($clist, $col); GUI::HELPERS::set_cursor($main, $busy); GUI::HELPERS::browse_file($main, $entry, $mode); GUI::HELPERS::set_status($main, $text); $box = GUI::HELPERS::dialog_box( $title, $text, $button1, $button2); $label = GUI::HELPERS::create_label( $text, $mode, $wrap, $bold); $row = GUI::HELPERS::label_to_table( $key, $val, $table, $row, $mode, $wrap, $bold); $entry = GUI::HELPERS::entry_to_table( $text, $var, $table, $row, $visibility, $box); =head1 DESCRIPTION GUI::HELPERS.pm is a library, containing some useful functions used by other TinyCA2 modules. All functions are related to the GUI. =head2 GUI::HELPERS::print_info($text, $ext); =over 1 creates an Gtk2::MessageDialog of the type info. The string given in $text is shown as message, the (multiline) string $ext is available through the "Details" Button. =back =head2 GUI::HELPERS::print_warning($text, $ext); =over 1 is identically with GUI::HELPERS::print_warning(), only the Gtk2::MessageDialog is of type warning. =back =head2 GUI::HELPERS::print_error($text, $ext); =over 1 is identically with GUI::HELPERS::print_info(), only the Gtk2::MessageDialogog is of type error and the program will shut down after closing the message. =back =head2 GUI::HELPERS::sort_clist($clist, $col); =over 1 sorts the clist with the values from the given column $col. =back =head2 GUI::HELPERS::dialog_box($title, $text, $button1, $button2); =over 1 returns the reference to a new window of type Gtk2::Dialog. $title and $button1 must be given. $text and $button2 are optional arguments and can be undef. =back =head2 GUI::HELPERS::create_label($text, $mode, $wrap, $bold); =over 1 returns the reference to a new Gtk2::Label. $mode can be "center", "left" or "right". $wrap and $bold are boolean values. =back =head2 GUI::HELPERS::label_to_table($key, $val, $table, $row, $mode, $wrap, $bold); =over 1 adds a new row to $table. The new row is appended at $row and has two columns: the first will contain a label with the content of string $k, the second the content of string $v. $mode, $wrap, $bold are the arguments for GUI::HELPERS::create_label(), mentioned above. The function returns the number of the next free row in the table. =back =head2 GUI::HELPERS::entry_to_table($text, $var, $table, $row, $visibility, $box); =over 1 adds a new row to $table. The new row is appended at $row and has two columns: the first will contain a label with the content of the string $text, the second one will contain a textentry Gtk2::Entry, associated with the variable $var. $visibility controls, if the entered text will be displayed or not (passwords). The function returns the reference to the new created entry. =back =head2 GUI::HELPERS::set_cursor($main, $busy); =over 1 sets the actual cursor to busy or back to normal. The value of $busy is boolean. This functions returns nothing; =back =head2 GUI::HELPERS::browse_file($main, $entry, $mode); =over 1 opens a FileChooser dialog to select files or directories. $entry is a reference to the variable, where the selected path shall be stored. If $mode is set to "open", then only files with appropriate suffixes are displyed. =back =head2 GUI::HELPERS::set_status($main, $text); =over 1 sets the text in $text to the statusbar at the bottom of the window. =back =cut tinyca2-0.7.5/lib/GUI/X509_browser.pm0000644000175000017500000005572510461475420020525 0ustar schollerscholler00000000000000# Copyright (c) Olaf Gellert and # Stephan Martin # # $Id: X509_browser.pm,v 1.6 2006/06/28 21:50:42 sm Exp $ # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. use strict; package GUI::X509_browser; use HELPERS; use GUI::HELPERS; use GUI::X509_infobox; use POSIX; my $tmpdefault="/tmp"; my $version = "0.1"; my $true = 1; my $false = undef; sub new { my $that = shift; my $self = {}; $self->{'main'} = shift; my $mode = shift; my ($font, $fontfix); my $class = ref($that) || $that; if ((defined $mode) && (($mode eq 'cert') || ($mode eq 'req') || ($mode eq 'key'))) { $self->{'mode'} = $mode; } else { printf STDERR "No mode specified for X509browser\n"; return undef; } # initialize fonts and styles $font = Gtk2::Pango::FontDescription->from_string( "-adobe-helvetica-bold-r-normal--*-120-*-*-*-*-*-*"); if(defined($font)) { $self->{'stylebold'} = Gtk2::Style->new(); $self->{'stylebold'}->font_desc->from_string( "-adobe-helvetica-bold-r-normal--*-120-*-*-*-*-*-*"); } else { $self->{'stylebold'} = undef; } $fontfix = Gtk2::Pango::FontDescription->from_string( "-adobe-courier-medium-r-normal--*-100-*-*-*-*-*-*"); if(defined($fontfix)) { $self->{'stylefix'} = Gtk2::Style->new(); $self->{'stylefix'}->font_desc->from_string( "-adobe-courier-medium-r-normal--*-100-*-*-*-*-*-*"); } else { $self->{'stylefix'} = undef; } bless($self, $class); $self; } # sub create_window { # my ($self, $title, $ok_text, $cancel_text, # $ok_function, $cancel_function) = @_; # # my ($button_ok, $button_cancel); # # if ( $self->{'dialog_shown'} == $true ) { # return(undef); # } # # # check arguments # if ($title eq undef) { # $title = "CA browser, V$version"; # } # # if (not defined($ok_text)) { # $ok_text = _("OK"); # } # if (not defined($cancel_text)) { # $cancel_text = _("Cancel"); # } # # # initialize main window # $self->{'window'} = new Gtk::Dialog(); # # # $self->{'window'}->set_policy($false,$false,$true); # # # store pointer to vbox as "browser widget" # $self->{'browser'}=$self->{'window'}->vbox; # # if (defined $ok_function) { # # todo: we should check if this is a function reference # $self->{'User_OK_function'} = $ok_function; # } # $self->{'OK_function'} = sub { $self->ok_function(); }; # # if (defined $cancel_function) { # # todo: we should check if this is a function reference # $self->{'User_CANCEL_function'} = $cancel_function; # } # $self->{'CANCEL_function'} = sub { $self->cancel_function(); }; # # # # $button_ok = new Gtk::Button( "$ok_text" ); # $button_ok->signal_connect( "clicked", $self->{'OK_function'}); # $self->{'window'}->action_area->pack_start( $button_ok, $true, $true, 0 ); # # $button_cancel = new Gtk::Button( "$cancel_text" ); # $button_cancel->signal_connect('clicked', $self->{'CANCEL_function'}); # $self->{'window'}->action_area->pack_start( $button_cancel, $true, $true, 0 ); # # $self->{'window'}->set_title( "$title" ); # # $self->{'window'}->show_all(); # # } sub set_window { my $self = shift; my $widget = shift; if ( (not defined $self->{'browser'}) || ( $self->{'browser'} == undef )) { $self->{'browser'}=$widget; } else { # browser widget already exists return $false; } } sub add_list { my ($self, $actca, $directory, $crlfile, $indexfile) = @_; my ($x509listwin, @titles, @certtitles, @reqtitles, @keytitles, $column, $color, $text, $iter, $renderer); # printf STDERR "AddList: Self: $self, Dir $directory, CRL $crlfile, Index: $indexfile\n"; @reqtitles = (_("Common Name"), _("eMail Address"), _("Organizational Unit"), _("Organization"), _("Location"), _("State"), _("Country")); @certtitles = (_("Common Name"), _("eMail Address"), _("Organizational Unit"), _("Organization"), _("Location"), _("State"), _("Country"), _("Status")); @keytitles = (_("Common Name"), _("eMail Address"), _("Organizational Unit"), _("Organization"), _("Location"), _("State"), _("Country"), _("Type")); $self->{'actca'} = $actca; $self->{'actdir'} = $directory; $self->{'actcrl'} = $crlfile; $self->{'actindex'} = $indexfile; if(defined($self->{'x509box'})) { $self->{'browser'}->remove($self->{'x509box'}); $self->{'x509box'}->destroy(); } $self->{'x509box'} = Gtk2::VBox->new(0, 0); # pane for list (top) and cert infos (bottom) $self->{'x509pane'} = Gtk2::VPaned->new(); $self->{'x509pane'}->set_position(250); $self->{'x509box'}->add($self->{'x509pane'}); $self->{'browser'}->pack_start($self->{'x509box'}, 1, 1, 0); # now the list $x509listwin = Gtk2::ScrolledWindow->new(undef, undef); $x509listwin->set_policy('automatic', 'automatic'); $x509listwin->set_shadow_type('etched-in'); $self->{'x509pane'}->pack1($x509listwin, 1, 1); # shall we display certificates, requests or keys? if ((defined $self->{'mode'}) && ($self->{'mode'} eq "cert")) { $self->{'x509store'} = Gtk2::ListStore->new( 'Glib::String', 'Glib::String', 'Glib::String', 'Glib::String', 'Glib::String', 'Glib::String', 'Glib::String', 'Glib::String', 'Glib::Int'); @titles = @certtitles; } elsif ((defined $self->{'mode'}) && ($self->{'mode'} eq "req")) { $self->{'x509store'} = Gtk2::ListStore->new( 'Glib::String', 'Glib::String', 'Glib::String', 'Glib::String', 'Glib::String', 'Glib::String', 'Glib::String', 'Glib::Int'); @titles = @reqtitles; } elsif ((defined $self->{'mode'}) && ($self->{'mode'} eq "key")) { $self->{'x509store'} = Gtk2::ListStore->new( 'Glib::String', 'Glib::String', 'Glib::String', 'Glib::String', 'Glib::String', 'Glib::String', 'Glib::String', 'Glib::String', 'Glib::Int'); @titles = @keytitles; } else { # undefined mode return undef; } $self->{'x509store'}->set_sort_column_id(0, 'ascending'); $self->{'x509clist'} = Gtk2::TreeView->new_with_model($self->{'x509store'}); $self->{'x509clist'}->get_selection->set_mode ('single'); for(my $i = 0; $titles[$i]; $i++) { $renderer = Gtk2::CellRendererText->new(); $column = Gtk2::TreeViewColumn->new_with_attributes( $titles[$i], $renderer, 'text' => $i); $column->set_sort_column_id($i); $column->set_resizable(1); if (($i == 7) && ($self->{'mode'} eq 'cert')) { $column->set_cell_data_func ($renderer, sub { my ($column, $cell, $model, $iter) = @_; $text = $model->get($iter, 7); $color = $text eq _("VALID")?'green':'red'; $cell->set (text => $text, foreground => $color); }); } $self->{'x509clist'}->append_column($column); } if ((defined $self->{'mode'}) && ($self->{'mode'} eq 'cert')) { $self->{'x509clist'}->get_selection->signal_connect('changed' => sub { _fill_info($self, 'cert') }); } elsif ((defined $self->{'mode'}) && ($self->{'mode'} eq 'req')) { $self->{'x509clist'}->get_selection->signal_connect('changed' => sub { _fill_info($self, 'req') }); } $x509listwin->add($self->{'x509clist'}); update($self, $directory, $crlfile, $indexfile, $true); } sub update { my ($self, $directory, $crlfile, $indexfile, $force) = @_; $self->{'actdir'} = $directory; $self->{'actcrl'} = $crlfile; $self->{'actindex'} = $indexfile; # print STDERR "DEBUG: set new dir: $self->{'actdir'}\n"; if ($self->{'mode'} eq "cert") { update_cert($self, $directory, $crlfile, $indexfile, $force); } elsif ($self->{'mode'} eq "req") { update_req($self, $directory, $crlfile, $indexfile, $force); } elsif ($self->{'mode'} eq "key") { update_key($self, $directory, $crlfile, $indexfile, $force); } else { return undef; } if ((defined $self->{'infowin'}) && ($self->{'infowin'} ne "")) { update_info($self); } $self->{'browser'}->show_all(); return($true); } sub update_req { my ($self, $directory, $crlfile, $indexfile, $force) = @_; my ($ind, $name, $state, @line, $iter); $self->{'main'}->{'REQ'}->read_reqlist( $directory, $crlfile, $indexfile, $force, $self->{'main'}); $self->{'x509store'}->clear(); $ind = 0; foreach my $n (@{$self->{'main'}->{'REQ'}->{'reqlist'}}) { ($name, $state) = split(/\%/, $n); @line = split(/\:/, $name); $iter = $self->{'x509store'}->append(); $self->{'x509store'}->set($iter, 0 => $line[0], 1 => $line[1], 2 => $line[2], 3 => $line[3], 4 => $line[4], 5 => $line[5], 6 => $line[6], 7 => $ind); $ind++; } # now select the first row to display certificate informations $self->{'x509clist'}->get_selection->select_path( Gtk2::TreePath->new_first()); } sub update_cert { my ($self, $directory, $crlfile, $indexfile, $force) = @_; my ($ind, $name, $state, @line, $iter); $self->{'main'}->{'CERT'}->read_certlist( $directory, $crlfile, $indexfile, $force, $self->{'main'}); $self->{'x509store'}->clear(); $ind = 0; foreach my $n (@{$self->{'main'}->{'CERT'}->{'certlist'}}) { ($name, $state) = split(/\%/, $n); @line = split(/\:/, $name); $iter = $self->{'x509store'}->append(); $self->{'x509store'}->set($iter, 0 => $line[0], 1 => $line[1], 2 => $line[2], 3 => $line[3], 4 => $line[4], 5 => $line[5], 6 => $line[6], 7 => $state, 8 => $ind); # $self->{'x509clist'}->set_text($row, 7, $state); # if($state eq _("VALID")) { # $self->{'x509clist'}->set_cell_style($row, 7, $self->{'stylegreen'}); # } else { # $self->{'x509clist'}->set_cell_style($row, 7, $self->{'stylered'}); # } # $self->{'x509clist'}->set_text($row, 8, $ind); $ind++; } # now select the first row to display certificate informations $self->{'x509clist'}->get_selection->select_path( Gtk2::TreePath->new_first()); } sub update_key { my ($self, $directory, $crlfile, $indexfile, $force) = @_; my ($ind, $name, @line, $iter, $state); $self->{'main'}->{'KEY'}->read_keylist($self->{'main'}); $self->{'x509store'}->clear(); $ind = 0; foreach my $n (@{$self->{'main'}->{'KEY'}->{'keylist'}}) { ($name, $state) = split(/\%/, $n); @line = split(/\:/, $name); $iter = $self->{'x509store'}->append(); $self->{'x509store'}->set($iter, 0 => $line[0], 1 => $line[1], 2 => $line[2], 3 => $line[3], 4 => $line[4], 5 => $line[5], 6 => $line[6], 7 => $state, 8 => $ind); # $self->{'x509clist'}->set_text($row, 7, $state); # if($state eq _("VALID")) { # $self->{'x509clist'}->set_cell_style($row, 7, $self->{'stylegreen'}); # } else { # $self->{'x509clist'}->set_cell_style($row, 7, $self->{'stylered'}); # } # $self->{'x509clist'}->set_text($row, 8, $ind); $ind++; } } sub update_info { my ($self)=@_; my ($title, $parsed, $dn); $dn = selection_dn($self); if (defined $dn) { $dn = HELPERS::enc_base64($dn); if ($self->{'mode'} eq 'cert') { $parsed = $self->{'main'}->{'CERT'}->parse_cert($self->{'main'}, $dn, $false); $title = _("Certificate Information"); } else { $parsed = $self->{'main'}->{'REQ'}->parse_req($self->{'main'}, $dn, $false); $title = _("Request Information"); } defined($parsed) || GUI::HELPERS::print_error(_("Can't read file")); if(not defined($self->{'infobox'})) { $self->{'infobox'} = Gtk2::VBox->new(); } # printf STDERR "DEBUG: Infowin: $self->{'infowin'}, infobox: $self->{'infobox'}\n"; $self->{'infowin'}->display($self->{'infobox'}, $parsed, $self->{'mode'}, $title); } else { # nothing selected $self->{'infowin'}->hide(); } } # # add infobox to the browser window # sub add_info { my $self = shift; my ($row, $index, $parsed, $title, $status, $list, $dn); if ((defined $self->{'infowin'}) && ($self->{'infowin'} ne "")) { $self->{'infowin'}->hide(); } else { $self->{'infowin'} = GUI::X509_infobox->new(); } # printf STDERR "Infowin: $self->{'infowin'}\n"; # printf STDERR "x509clist: $self->{'x509clist'}\n"; $row = $self->{'x509clist'}->get_selection->get_selected(); if(defined($row)) { if ($self->{'mode'} eq 'cert') { $index = ($self->{'x509store'}->get($row))[8]; $list = $self->{'main'}->{'CERT'}->{'certlist'}; } else { $index = ($self->{'x509store'}->get($row))[7]; $list = $self->{'main'}->{'REQ'}->{'reqlist'}; } } if (defined $index) { ($dn, $status) = split(/\%/, $list->[$index]); $dn = HELPERS::enc_base64($dn); if ($self->{'mode'} eq 'cert') { $parsed = $self->{'main'}->{'CERT'}->parse_cert($self->{'main'}, $dn, $false); $title="Certificate Information"; } else { $parsed = $self->{'main'}->{'REQ'}->parse_req($self->{'main'}, $dn, $false); $title="Request Information"; } defined($parsed) || GUI::HELPERS::print_error(_("Can't read file")); # printf STDERR "Infowin: $self->{'infowin'}\n"; $self->{'infobox'} = Gtk2::VBox->new(); $self->{'x509pane'}->pack2($self->{'infobox'}, 1, 1); $self->{'infowin'}->display($self->{'infobox'}, $parsed, $self->{'mode'}, $title); } } sub hide { my ($self) = @_; $self->{'window'}->hide(); $self->{'dialog_shown'} = $false; } sub destroy { my ($self) = @_; $self->{'window'}->destroy(); $self->{'dialog_shown'} = $false; } # # signal handler for selected list items # (updates the X509_infobox window) # XXX why is that function needed?? # sub _fill_info { my ($self) = @_; # print STDERR "DEBUG: fill_info: @_\n"; update_info($self) if (defined $self->{'infowin'}); } sub selection_fname { my $self = shift; my ($selected, $row, $index, $dn, $status, $filename, $list); $row = $self->{'x509clist'}->get_selection->get_selected(); return undef if (not defined $row); if ($self->{'mode'} eq 'req') { $index = ($self->{'x509store'}->get($row))[7]; $list = $self->{'main'}->{'REQ'}->{'reqlist'}; } elsif ($self->{'mode'} eq 'cert') { $index = ($self->{'x509store'}->get($row))[8]; $list = $self->{'main'}->{'CERT'}->{'certlist'}; } elsif ($self->{'mode'} eq 'key') { $index = ($self->{'x509store'}->get($row))[8]; $list = $self->{'main'}->{'KEY'}->{'certlist'}; } else { GUI::HELPERS::print_error( _("Invalid browser mode for selection_fname():"." " .$self->{'mode'})); } if (defined $index) { ($dn, $status) = split(/\%/, $list->[$index]); $filename= HELPERS::enc_base64($dn); $filename=$self->{'actdir'}."/$filename".".pem"; } else { $filename = undef; } return($filename); } sub selection_dn { my $self = shift; my ($selected, $row, $index, $dn, $status, $list); $row = $self->{'x509clist'}->get_selection->get_selected(); return undef if (not defined $row); if ($self->{'mode'} eq 'req') { $index = ($self->{'x509store'}->get($row))[7]; $list = $self->{'main'}->{'REQ'}->{'reqlist'}; } elsif ($self->{'mode'} eq 'cert') { $index = ($self->{'x509store'}->get($row))[8]; $list = $self->{'main'}->{'CERT'}->{'certlist'}; } elsif ($self->{'mode'} eq 'key') { $index = ($self->{'x509store'}->get($row))[8]; $list = $self->{'main'}->{'KEY'}->{'keylist'}; } else { GUI::HELPERS::print_error( _("Invalid browser mode for selection_dn():"." " .$self->{'mode'})); } if (defined $index) { ($dn, $status) = split(/\%/, $list->[$index]); } else { $dn = undef; } return($dn); } sub selection_cadir { my $self = shift; my $dir; $dir = $self->{'actdir'}; # cut off the last directory name to provide the ca-directory $dir =~ s/\/certs|\/req|\/keys$//; return($dir); } sub selection_caname { my $self = shift; my ($selected, $caname); $caname = $self->{'actca'}; return($caname); } sub selection_cn { my $self = shift; my ($selected, $row, $index, $cn); $row = $self->{'x509clist'}->get_selection->get_selected(); return undef if (not defined $row); if (($self->{'mode'} eq 'req') || ($self->{'mode'} eq 'cert')|| ($self->{'mode'} eq 'key')) { $cn = ($self->{'x509store'}->get($row))[0]; } else { GUI::HELPERS::print_error( _("Invalid browser mode for selection_cn():"." " .$self->{'mode'})); } return($cn); } sub selection_email { my $self = shift; my ($selected, $row, $index, $email); $row = $self->{'x509clist'}->get_selection->get_selected(); return undef if (not defined $row); if (($self->{'mode'} eq 'req') || ($self->{'mode'} eq 'cert') || ($self->{'mode'} eq 'key')) { $email = ($self->{'x509store'}->get($row))[1]; } else { GUI::HELPERS::print_error( _("Invalid browser mode for selection_cn():"." " .$self->{'mode'})); } return($email); } sub selection_status { my $self = shift; my ($selected, $row, $index, $dn, $status, $list); $row = $self->{'x509clist'}->get_selection->get_selected(); return undef if (not defined $row); if ($self->{'mode'} eq 'cert') { $index = ($self->{'x509store'}->get($row))[8]; $list = $self->{'main'}->{'CERT'}->{'certlist'}; } else { GUI::HELPERS::print_error( _("Invalid browser mode for selection_status():"." " .$self->{'mode'})); } if (defined $index) { ($dn, $status) = split(/\%/, $list->[$index]); } else { $status = undef; } return($status); } sub selection_type { my $self = shift; my ($selected, $row, $index, $dn, $type, $list); $row = $self->{'x509clist'}->get_selection->get_selected(); return undef if (not defined $row); if ($self->{'mode'} eq 'key') { $index = ($self->{'x509store'}->get($row))[8]; $list = $self->{'main'}->{'KEY'}->{'keylist'}; } else { GUI::HELPERS::print_error( _("Invalid browser mode for selection_type():"." " .$self->{'mode'})); } if (defined $index) { ($dn, $type) = split(/\%/, $list->[$index]); } else { $type = undef; } return($type); } sub ok_function { my ($self) = @_; # is there a user defined ok_function? if (defined $self->{'User_OK_function'}) { $self->{'User_OK_function'}($self, selection_fname($self)); } # otherwise do default else { printf STDOUT "%s\n", selection_fname($self); $self->hide(); } return $true; } sub cancel_function { my ($self) = @_; # is there a user defined ok_function? if (defined $self->{'User_CANCEL_function'}) { $self->{'User_CANCEL_function'}($self, get_listselect($self)); } # otherwise do default else { $self->{'window'}->hide(); $self->{'dialog_shown'} = $false; } return $true; } # # sort the table by the clicked column # sub _sort_clist { my ($clist, $col) = @_; $clist->set_sort_column($col); $clist->sort(); return(1); } # # called on mouseclick in certlist # sub _show_cert_menu { my ($clist, $self, $event) = @_; if ((defined($event->{'type'})) && $event->{'button'} == 3) { $self->{'certmenu'}->popup( undef, undef, 0, $event->{'button'}, undef); return(1); } return(0); } $true; __END__ =head1 NAME GUI::X509_browser - Perl-Gtk2 browser for X.509 certificates and requests =head1 SYNOPSIS use X509_browser; $browser=X509_browser->new($mode); $browser->create_window($title, $oktext, $canceltext, \&okayfunction, \&cancelfunction); $browser->add_ca_select($cadir, @calist, $active-ca); $browser->add_list($active-ca, $X509dir, $crlfile, $indexfile); $browser->add_info(); my $selection = $browser->selection_fname(); $browser->hide(); =head1 DESCRIPTION This displays a browser for X.509v3 certificates or certification requests (CSR) from a CA managed by TinyCA2 (or some similar structure). Creation of an X509_browser is done by calling B, the argument has to be 'cert' or 'req' to display certificates or requests. A window can be created for this purpose using B, all arguments are optional. =over 1 =item $title: the existing Gtk2::VBox inside which the info will be displayed. =item $oktext: The text to be displayed on the OK button of the dialog. =item $canceltext: The text to be displayed on the CANCEL button of the dialog. =item \&okfunction: Reference to a function that is executed on click on OK button. This function should fetch the selected result (using B) and also close the dialog using B. =item \&cancelfunction: Reference to a function that is executed on click on CANCEL button. This function should also close the dialog using B. =back Further functions to get information about the selected item exist, these are selection_dn(), selection_status(), selection_cadir() and selection_caname(). An existing infobox that already displays the content of some directory can be modified by calling update() with the same arguments that add_list(). An existing infobox is destroyed by calling B. =cut tinyca2-0.7.5/lib/GUI/TCONFIG.pm0000644000175000017500000016232510461475420017401 0ustar schollerscholler00000000000000# Copyright (c) Stephan Martin # # $Id: TCONFIG.pm,v 1.6 2006/06/28 21:50:42 sm Exp $ # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. use strict; package GUI::TCONFIG; use POSIX; # # main screen for configuration # sub show_configbox { my ($main, $name) = @_; my ($box, $vbox, $label, $table, $rows, @options, @options_ca, $entry, $key, $separator, $t, @combostrings, $button_cancel, $button_help, $buttonbox, $combonsCertType, $combosubjectAltName, $combokeyUsage, $comboextendedKeyUsage, $combonsSslServer, $combonsRevocationUrl, $combonsRenewalUrl, $combocnsCertType, $combocsubjectAltName, $combockeyUsage, $combocextendedKeyUsage, $combocnsSslServer, $combocnsRevocationUrl, $combocnsRenewalUrl, $combocansCertType, $combocasubjectAltName, $combocakeyUsage, $combocaextendedKeyUsage, $combocansSslServer, $combocansRevocationUrl, $combocansRenewalUrl); if(not defined($name)) { $name = $main->{'CA'}->{'actca'}; } if(not defined($name)) { GUI::HELPERS::print_warning(_("Can't get CA name")); return; } $main->{'TCONFIG'}->init_config($main, $name); $box = Gtk2::Window->new("toplevel"); $box->set_title("OpenSSL Configuration"); $box->set_resizable(1); $box->set_default_size(800, 600); $box->signal_connect('delete_event' => sub { $box->destroy() }); $box->{'button_ok'} = Gtk2::Button->new_from_stock('gtk-ok'); $box->{'button_ok'}->set_sensitive(0); $box->{'button_ok'}->signal_connect('clicked' => sub { $main->{'TCONFIG'}->write_config($main, $name); $box->destroy() }); $box->{'button_apply'} = Gtk2::Button->new_from_stock('gtk-apply'); $box->{'button_apply'}->set_sensitive(0); $box->{'button_apply'}->signal_connect('clicked' => sub { $main->{'TCONFIG'}->write_config($main, $name) }); $button_cancel = Gtk2::Button->new_from_stock('gtk-cancel'); $button_cancel->signal_connect( 'clicked' => sub { $box->destroy() }); $t = _("All Settings are written unchanged to openssl.conf.\nSo please study the documentation of OpenSSL if you don't know exactly what to do.\nIf you are still unsure - keep the defaults and everything is expected to work fine."); $button_help = Gtk2::Button->new_from_stock('gtk-help'); $button_help->signal_connect('clicked' => sub { GUI::HELPERS::print_info($t) }); $box->{'vbox'} = Gtk2::VBox->new(); $box->{'nb'} = Gtk2::Notebook->new(); $box->{'nb'}->set_tab_pos('top'); $box->{'nb'}->set_show_tabs(1); $box->{'nb'}->set_show_border(1); $box->{'nb'}->set_scrollable(0); $box->add($box->{'vbox'}); $box->{'vbox'}->pack_start($box->{'nb'}, 1, 1, 0); $buttonbox = Gtk2::HButtonBox->new(); $buttonbox->set_layout('end'); $buttonbox->set_spacing(3); $buttonbox->set_border_width(3); $buttonbox->add($button_help); $buttonbox->set_child_secondary($button_help, 1); $buttonbox->add($box->{'button_ok'}); $buttonbox->add($box->{'button_apply'}); $buttonbox->add($button_cancel); $box->{'vbox'}->pack_start($buttonbox, 0, 0, 0); # first page: vbox with warnings :-) $vbox = Gtk2::VBox->new(0, 0); $label = GUI::HELPERS::create_label( _("OpenSSL Configuration"), 'center', 0,0); $box->{'nb'}->append_page($vbox, $label); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("OpenSSL Configuration"), 'center', 0, 1); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $separator = Gtk2::HSeparator->new(); $vbox->pack_start($separator, 0, 0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("Only change these options, if you really know, what you are doing!!"), 'center', 1, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("You should be aware, that some options may break some crappy software!!"), 'center', 1, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("If you are unsure: leave the defaults untouched"), 'center', 1, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); # second page: server settings @options = qw( nsComment crlDistributionPoints authorityKeyIdentifier issuerAltName nsBaseUrl nsCaPolicyUrl ); my @special_options = qw( nsCertType nsSslServerName nsRevocationUrl nsRenewalUrl subjectAltName keyUsage extendedkeyUsage ); @options_ca = qw( default_days ); $vbox = Gtk2::VBox->new(0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("These Settings are passed to OpenSSL for creating Server Certificates"), 'center', 0, 1); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("Multiple Values can be separated by \",\""), 'center', 1, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $separator = Gtk2::HSeparator->new(); $vbox->pack_start($separator, 0, 0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $rows = 1; $table = Gtk2::Table->new($rows, 2, 0); $vbox->pack_start($table, 1, 1, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label(_("Server Certificate Settings"), 'center', 0, 0); $label = Gtk2::Label->new(_("Server Certificate Settings")); $box->{'nb'}->append_page($vbox, $label); # special option subjectAltName $label = GUI::HELPERS::create_label( _("Subject alternative name (subjectAltName):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $main->{'radiobox'} = Gtk2::HBox->new(0, 0); $main->{'radio1'} = Gtk2::RadioButton->new( undef, _($main->{'words'}{'ip'})); $main->{'radio1'}->signal_connect('toggled' => sub {GUI::CALLBACK::toggle_to_var_pref($main->{'radio1'}, \$main->{'TCONFIG'}->{'server_cert'}->{'subjectAltNameType'}, 'ip', $box)}); $main->{'radiobox'}->add($main->{'radio1'}); $main->{'radio2'} = Gtk2::RadioButton->new( $main->{'radio1'}, _($main->{'words'}{'dns'})); $main->{'radio2'}->signal_connect('toggled' => sub {GUI::CALLBACK::toggle_to_var_pref($main->{'radio2'}, \$main->{'TCONFIG'}->{'server_cert'}->{'subjectAltNameType'}, 'dns', $box)}); $main->{'radiobox'}->add($main->{'radio2'}); $main->{'radio3'} = Gtk2::RadioButton->new($main->{'radio1'}, _($main->{'words'}{'raw'})); $main->{'radio3'}->signal_connect('toggled' => sub {GUI::CALLBACK::toggle_to_var_pref($main->{'radio3'}, \$main->{'TCONFIG'}->{'server_cert'}->{'subjectAltNameType'}, 'raw', $box)}); $main->{'radiobox'}->add($main->{'radio3'}); if($main->{'TCONFIG'}->{'server_cert'}->{'subjectAltNameType'} eq 'ip') { $main->{'radio1'}->set_active(1) }elsif($main->{'TCONFIG'}->{'server_cert'}->{'subjectAltNameType'} eq 'dns') { $main->{'radio2'}->set_active(1) }elsif($main->{'TCONFIG'}->{'server_cert'}->{'subjectAltNameType'} eq 'raw') { $main->{'radio3'}->set_active(1) } $combosubjectAltName = Gtk2::Combo->new(); @combostrings = ( $main->{'words'}{'none'}, $main->{'words'}{'user'}, $main->{'words'}{'emailcopy'}); $combosubjectAltName->set_popdown_strings(@combostrings); $combosubjectAltName->set_use_arrows(1); $combosubjectAltName->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'server_cert'}->{'subjectAltName'})) { if($main->{'TCONFIG'}->{'server_cert'}->{'subjectAltName'} eq 'user') { $main->{'radio1'}->set_sensitive(1); $main->{'radio2'}->set_sensitive(1); $main->{'radio3'}->set_sensitive(1); $combosubjectAltName->entry->set_text($main->{'words'}{'user'}); }elsif($main->{'TCONFIG'}->{'server_cert'}->{'subjectAltName'} eq 'emailcopy') { $combosubjectAltName->entry->set_text($main->{'words'}{'emailcopy'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); $main->{'radio3'}->set_sensitive(0); }elsif($main->{'TCONFIG'}->{'server_cert'}->{'subjectAltName'} eq 'none') { $combosubjectAltName->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); $main->{'radio3'}->set_sensitive(0); } } else { $combosubjectAltName->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); $main->{'radio3'}->set_sensitive(0); } $combosubjectAltName->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var_san( $combosubjectAltName, $combosubjectAltName->entry, \$main->{'TCONFIG'}->{'server_cert'}->{'subjectAltName'}, $box, $main->{words}, $main->{'radio1'}, $main->{'radio2'}, $main->{'radio3'})}); $table->attach_defaults($combosubjectAltName, 1, 2, $rows-1, $rows); $rows++; $table->attach_defaults($main->{'radiobox'}, 1, 2, $rows-1, $rows); $rows++; # special option keyUsage $label = GUI::HELPERS::create_label( _("Key Usage (keyUsage):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $main->{'radiobox'} = Gtk2::HBox->new(0, 0); $main->{'radio1'} = Gtk2::RadioButton->new(undef, _($main->{'words'}{'critical'})); if($main->{'TCONFIG'}->{'server_cert'}->{'keyUsageType'} eq 'critical') { $main->{'radio1'}->set_active(1) } $main->{'radio1'}->signal_connect('toggled' => sub {GUI::CALLBACK::toggle_to_var_pref($main->{'radio1'}, \$main->{'TCONFIG'}->{'server_cert'}->{'keyUsageType'}, 'critical', $box)}); $main->{'radiobox'}->add($main->{'radio1'}); $main->{'radio2'} = Gtk2::RadioButton->new($main->{'radio1'}, _($main->{'words'}{'noncritical'})); if($main->{'TCONFIG'}->{'server_cert'}->{'keyUsageType'} eq 'noncritical') { $main->{'radio2'}->set_active(1) } $main->{'radio2'}->signal_connect('toggled' => sub {GUI::CALLBACK::toggle_to_var_pref($main->{'radio2'}, \$main->{'TCONFIG'}->{'server_cert'}->{'keyUsageType'}, 'noncritical', $box)}); $main->{'radiobox'}->add($main->{'radio2'}); $combokeyUsage = Gtk2::Combo->new(); @combostrings = ( $main->{'words'}{'none'}, $main->{'words'}{'sig'}, $main->{'words'}{'key'}, $main->{'words'}{'keysig'}); $combokeyUsage->set_popdown_strings(@combostrings); $combokeyUsage->set_use_arrows(1); $combokeyUsage->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'server_cert'}->{'keyUsage'})) { if($main->{'TCONFIG'}->{'server_cert'}->{'keyUsage'} ne 'none') { $main->{'radio1'}->set_sensitive(1); $main->{'radio2'}->set_sensitive(1); if($main->{'TCONFIG'}->{'server_cert'}->{'keyUsage'} eq 'sig') { $combokeyUsage->entry->set_text($main->{'words'}{'sig'}); }elsif($main->{'TCONFIG'}->{'server_cert'}->{'keyUsage'} eq 'key') { $combokeyUsage->entry->set_text($main->{'words'}{'key'}); }elsif($main->{'TCONFIG'}->{'server_cert'}->{'keyUsage'} eq 'keysig') { $combokeyUsage->entry->set_text($main->{'words'}{'keysig'}); }else { $combokeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } }else { $combokeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } } else { $combokeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } $combokeyUsage->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var_key($combokeyUsage, $combokeyUsage->entry, \$main->{'TCONFIG'}->{'server_cert'}->{'keyUsage'}, $box, $main->{words}, $main->{'radio1'}, $main->{'radio2'})}); $table->attach_defaults($combokeyUsage, 1, 2, $rows-1, $rows); $rows++; $table->attach_defaults($main->{'radiobox'}, 1, 2, $rows-1, $rows); $rows++; # special option extendedKeyUsage $label = GUI::HELPERS::create_label( _("Extended Key Usage (extendedKeyUsage):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $main->{'radiobox'} = Gtk2::HBox->new(0, 0); $main->{'radio1'} = Gtk2::RadioButton->new(undef, _($main->{'words'}{'critical'})); if($main->{'TCONFIG'}->{'server_cert'}->{'extendedKeyUsageType'} eq 'critical') { $main->{'radio1'}->set_active(1) } $main->{'radio1'}->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var_pref($main->{'radio1'}, \$main->{'TCONFIG'}->{'server_cert'}->{'extendedKeyUsageType'}, 'critical', $box)}); $main->{'radiobox'}->add($main->{'radio1'}); $main->{'radio2'} = Gtk2::RadioButton->new($main->{'radio1'}, _($main->{'words'}{'noncritical'})); if($main->{'TCONFIG'}->{'server_cert'}->{'extendedKeyUsageType'} eq 'noncritical') { $main->{'radio2'}->set_active(1) } $main->{'radio2'}->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var_pref($main->{'radio2'}, \$main->{'TCONFIG'}->{'server_cert'}->{'extendedKeyUsageType'}, 'noncritical', $box)}); $main->{'radiobox'}->add($main->{'radio2'}); $comboextendedKeyUsage = Gtk2::Combo->new(); @combostrings = ( $main->{'words'}{'none'}, $main->{'words'}{'user'}); if((defined($main->{'TCONFIG'}->{'server_cert'}->{'extendedKeyUsage'})) && ($main->{'TCONFIG'}->{'server_cert'}->{'extendedKeyUsage'} ne 'none') && ($main->{'TCONFIG'}->{'server_cert'}->{'extendedKeyUsage'} ne '')) { push(@combostrings, $main->{'TCONFIG'}->{'server_cert'}->{'extendedKeyUsage'}); } $comboextendedKeyUsage->set_popdown_strings(@combostrings); $comboextendedKeyUsage->set_use_arrows(1); $comboextendedKeyUsage->set_value_in_list(0, 0); if(defined($main->{'TCONFIG'}->{'server_cert'}->{'extendedKeyUsage'})) { if($main->{'TCONFIG'}->{'server_cert'}->{'extendedKeyUsage'} ne 'none') { $main->{'radio1'}->set_sensitive(1); $main->{'radio2'}->set_sensitive(1); if($main->{'TCONFIG'}->{'server_cert'}->{'extendedKeyUsage'} eq 'user'){ $comboextendedKeyUsage->entry->set_text($main->{'words'}{'user'}); } else { $comboextendedKeyUsage->entry->set_text($main->{'TCONFIG'}->{'server_cert'}->{'extendedKeyUsage'}); } } else { $comboextendedKeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } } else { $comboextendedKeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } $comboextendedKeyUsage->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var_key($comboextendedKeyUsage, $comboextendedKeyUsage->entry, \$main->{'TCONFIG'}->{'server_cert'}->{'extendedKeyUsage'}, $box, $main->{words}, $main->{'radio1'}, $main->{'radio2'}) }); $table->attach_defaults($comboextendedKeyUsage, 1, 2, $rows-1, $rows); $rows++; $table->attach_defaults($main->{'radiobox'}, 1, 2, $rows-1, $rows); $rows++; # special option nsCerttype $label = GUI::HELPERS::create_label( _("Netscape Certificate Type (nsCertType):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $combonsCertType = Gtk2::Combo->new(); @combostrings = ( $main->{'words'}{'none'}, $main->{'words'}{'server'}, $main->{'words'}{'server, client'}); $combonsCertType->set_popdown_strings(@combostrings); $combonsCertType->set_use_arrows(1); $combonsCertType->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'server_cert'}->{'nsCertType'})) { $combonsCertType->entry->set_text( $main->{'words'}{$main->{'TCONFIG'}->{'server_cert'}->{'nsCertType'}}); } else { $combonsCertType->entry->set_text($main->{'words'}{'none'}); } $combonsCertType->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var($combonsCertType, $combonsCertType->entry, \$main->{'TCONFIG'}->{'server_cert'}->{'nsCertType'}, $box, $main->{words}) }); $table->attach_defaults($combonsCertType, 1, 2, $rows-1, $rows); $rows++; # special option nsSslServer $label = GUI::HELPERS::create_label( _("Netscape SSL Server Name (nsSslServerName):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $combonsSslServer = Gtk2::Combo->new(); @combostrings = ($main->{'words'}{'none'}, $main->{'words'}{'user'}); $combonsSslServer->set_popdown_strings(@combostrings); $combonsSslServer->set_use_arrows(1); $combonsSslServer->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'server_cert'}->{'nsSslServerName'}) && $main->{'TCONFIG'}->{'server_cert'}->{'nsSslServerName'} eq 'user') { $combonsSslServer->entry->set_text($main->{'words'}{'user'}); } else { $combonsSslServer->entry->set_text($main->{'words'}{'none'}); } $combonsSslServer->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var($combonsSslServer, $combonsSslServer->entry, \$main->{'TCONFIG'}->{'server_cert'}->{'nsSslServerName'}, $box, $main->{words}) }); $table->attach_defaults($combonsSslServer, 1, 2, $rows-1, $rows); $rows++; # special option nsRevocationUrl $label = GUI::HELPERS::create_label( _("Netscape Revocation URL (nsRevocationUrl):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $combonsRevocationUrl = Gtk2::Combo->new(); @combostrings = ($main->{'words'}{'none'}, $main->{'words'}{'user'}); $combonsRevocationUrl->set_popdown_strings(@combostrings); $combonsRevocationUrl->set_use_arrows(1); $combonsRevocationUrl->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'server_cert'}->{'nsRevocationUrl'}) && $main->{'TCONFIG'}->{'server_cert'}->{'nsRevocationUrl'} eq 'user') { $combonsRevocationUrl->entry->set_text($main->{'words'}{'user'}); } else { $combonsRevocationUrl->entry->set_text($main->{'words'}{'none'}); } $combonsRevocationUrl->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var($combonsRevocationUrl, $combonsRevocationUrl->entry, \$main->{'TCONFIG'}->{'server_cert'}->{'nsRevocationUrl'}, $box, $main->{words}) }); $table->attach_defaults($combonsRevocationUrl, 1, 2, $rows-1, $rows); $rows++; # special option nsRenewalUrl $label = GUI::HELPERS::create_label( _("Netscape Renewal URL (nsRenewalUrl):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $combonsRenewalUrl = Gtk2::Combo->new(); @combostrings = ($main->{'words'}{'none'}, $main->{'words'}{'user'}); $combonsRenewalUrl->set_popdown_strings(@combostrings); $combonsRenewalUrl->set_use_arrows(1); $combonsRenewalUrl->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'server_cert'}->{'nsRenewalUrl'}) && $main->{'TCONFIG'}->{'server_cert'}->{'nsRenewalUrl'} eq 'user') { $combonsRenewalUrl->entry->set_text($main->{'words'}{'user'}); } else { $combonsRenewalUrl->entry->set_text($main->{'words'}{'none'}); } $combonsRenewalUrl->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var($combonsRenewalUrl, $combonsRenewalUrl->entry, \$main->{'TCONFIG'}->{'server_cert'}->{'nsRenewalUrl'}, $box, $main->{words}) }); $table->attach_defaults($combonsRenewalUrl, 1, 2, $rows-1, $rows); $rows++; # standard options foreach $key (@options) { $entry = GUI::HELPERS::entry_to_table("$key:", \$main->{'TCONFIG'}->{'server_cert'}->{$key}, $table, $rows-1, 1, $box); $rows++; $table->resize($rows, 2); } foreach $key (@options_ca) { $entry = GUI::HELPERS::entry_to_table("$key:", \$main->{'TCONFIG'}->{'server_ca'}->{$key}, $table, $rows-1, 1, $box); $rows++; $table->resize($rows, 2); } # third page: client settings @options = qw( nsComment crlDistributionPoints authorityKeyIdentifier issuerAltName nsBaseUrl nsCaPolicyUrl ); @options_ca = qw( default_days ); $vbox = Gtk2::VBox->new(0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("These Settings are passed to OpenSSL for creating Client Certificates"), 'center', 0, 1); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("Multiple Values can be separated by \",\""), 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $separator = Gtk2::HSeparator->new(); $vbox->pack_start($separator, 0, 0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $rows = 1; $table = Gtk2::Table->new($rows, 2, 0); $vbox->pack_start($table, 1, 1, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label(_("Client Certificate Settings"), 'center', 0, 0); $box->{'nb'}->append_page($vbox, $label); # special option subjectAltName $label = GUI::HELPERS::create_label( _("Subject alternative name (subjectAltName):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $main->{'radiobox'} = Gtk2::HBox->new(0, 0); $main->{'radio1'} = Gtk2::RadioButton->new(undef, _($main->{'words'}{'ip'})); $main->{'radio1'}->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var_pref($main->{'radio1'}, \$main->{'TCONFIG'}->{'client_cert'}->{'subjectAltNameType'}, 'ip', $box) }); $main->{'radiobox'}->add($main->{'radio1'}); $main->{'radio2'} = Gtk2::RadioButton->new($main->{'radio1'}, _($main->{'words'}{'dns'})); $main->{'radio2'}->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var_pref($main->{'radio2'}, \$main->{'TCONFIG'}->{'client_cert'}->{'subjectAltNameType'}, 'dns', $box) }); $main->{'radiobox'}->add($main->{'radio2'}); $main->{'radio3'} = Gtk2::RadioButton->new($main->{'radio1'}, _($main->{'words'}{'mail'})); $main->{'radio3'}->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var_pref($main->{'radio3'}, \$main->{'TCONFIG'}->{'client_cert'}->{'subjectAltNameType'}, 'mail', $box) }); $main->{'radiobox'}->add($main->{'radio3'}); $main->{'radio4'} = Gtk2::RadioButton->new($main->{'radio1'}, _($main->{'words'}{'raw'})); $main->{'radio4'}->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var_pref($main->{'radio4'}, \$main->{'TCONFIG'}->{'client_cert'}->{'subjectAltNameType'}, 'raw', $box) }); $main->{'radiobox'}->add($main->{'radio4'}); if($main->{'TCONFIG'}->{'client_cert'}->{'subjectAltNameType'} eq 'ip') { $main->{'radio1'}->set_active(1) }elsif($main->{'TCONFIG'}->{'client_cert'}->{'subjectAltNameType'} eq 'dns') { $main->{'radio2'}->set_active(1) }elsif($main->{'TCONFIG'}->{'client_cert'}->{'subjectAltNameType'} eq 'mail') { $main->{'radio3'}->set_active(1) }elsif($main->{'TCONFIG'}->{'client_cert'}->{'subjectAltNameType'} eq 'raw') { $main->{'radio4'}->set_active(1) } $combocsubjectAltName = Gtk2::Combo->new(); @combostrings = ( $main->{'words'}{'none'}, $main->{'words'}{'user'}, $main->{'words'}{'emailcopy'}); $combocsubjectAltName->set_popdown_strings(@combostrings); $combocsubjectAltName->set_use_arrows(1); $combocsubjectAltName->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'client_cert'}->{'subjectAltName'})) { if($main->{'TCONFIG'}->{'client_cert'}->{'subjectAltName'} eq 'user') { $main->{'radio1'}->set_sensitive(1); $main->{'radio2'}->set_sensitive(1); $main->{'radio3'}->set_sensitive(1); $main->{'radio4'}->set_sensitive(1); $combocsubjectAltName->entry->set_text($main->{'words'}{'user'}); }elsif($main->{'TCONFIG'}->{'client_cert'}->{'subjectAltName'} eq 'emailcopy') { $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); $main->{'radio3'}->set_sensitive(0); $main->{'radio4'}->set_sensitive(1); $combocsubjectAltName->entry->set_text($main->{'words'}{'emailcopy'}); }elsif($main->{'TCONFIG'}->{'client_cert'}->{'subjectAltName'} eq 'none') { $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); $main->{'radio3'}->set_sensitive(0); $main->{'radio4'}->set_sensitive(1); $combocsubjectAltName->entry->set_text($main->{'words'}{'none'}); } } else { $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); $main->{'radio3'}->set_sensitive(0); $main->{'radio4'}->set_sensitive(1); $combocsubjectAltName->entry->set_text($main->{'words'}{'none'}); } $combocsubjectAltName->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var_san($combocsubjectAltName, $combocsubjectAltName->entry, \$main->{'TCONFIG'}->{'client_cert'}->{'subjectAltName'}, $box, $main->{words}, $main->{'radio1'}, $main->{'radio2'}, $main->{'radio3'}, $main->{'radio4'}) }); $table->attach_defaults($combocsubjectAltName, 1, 2, $rows-1, $rows); $rows++; $table->attach_defaults($main->{'radiobox'}, 1, 2, $rows-1, $rows); $rows++; # special option keyUsage $label = GUI::HELPERS::create_label( _("Key Usage (keyUsage):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $main->{'radiobox'} = Gtk2::HBox->new(0, 0); $main->{'radio1'} = Gtk2::RadioButton->new(undef, _($main->{'words'}{'critical'})); if($main->{'TCONFIG'}->{'client_cert'}->{'keyUsageType'} eq 'critical') { $main->{'radio1'}->set_active(1) } $main->{'radio1'}->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var_pref($main->{'radio1'}, \$main->{'TCONFIG'}->{'client_cert'}->{'keyUsageType'}, 'critical', $box) }); $main->{'radiobox'}->add($main->{'radio1'}); $main->{'radio2'} = Gtk2::RadioButton->new($main->{'radio1'}, _($main->{'words'}{'noncritical'})); if($main->{'TCONFIG'}->{'client_cert'}->{'keyUsageType'} eq 'noncritical') { $main->{'radio2'}->set_active(1) } $main->{'radio2'}->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var_pref($main->{'radio2'}, \$main->{'TCONFIG'}->{'client_cert'}->{'keyUsageType'}, 'noncritical', $box) }); $main->{'radiobox'}->add($main->{'radio2'}); $combockeyUsage = Gtk2::Combo->new(); @combostrings = ( $main->{'words'}{'none'}, $main->{'words'}{'sig'}, $main->{'words'}{'key'}, $main->{'words'}{'keysig'}); $combockeyUsage->set_popdown_strings(@combostrings); $combockeyUsage->set_use_arrows(1); $combockeyUsage->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'client_cert'}->{'keyUsage'})) { if($main->{'TCONFIG'}->{'client_cert'}->{'keyUsage'} ne 'none') { $main->{'radio1'}->set_sensitive(1); $main->{'radio2'}->set_sensitive(1); if($main->{'TCONFIG'}->{'client_cert'}->{'keyUsage'} eq 'sig') { $combockeyUsage->entry->set_text($main->{'words'}{'sig'}); }elsif($main->{'TCONFIG'}->{'client_cert'}->{'keyUsage'} eq 'key') { $combockeyUsage->entry->set_text($main->{'words'}{'key'}); }elsif($main->{'TCONFIG'}->{'client_cert'}->{'keyUsage'} eq 'keysig') { $combockeyUsage->entry->set_text($main->{'words'}{'keysig'}); }else { $combockeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } }else { $combockeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } } else { $combockeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } $combockeyUsage->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var_key($combockeyUsage, $combockeyUsage->entry, \$main->{'TCONFIG'}->{'client_cert'}->{'keyUsage'}, $box, $main->{words}, $main->{'radio1'}, $main->{'radio2'}) }); $table->attach_defaults($combockeyUsage, 1, 2, $rows-1, $rows); $rows++; $table->attach_defaults($main->{'radiobox'}, 1, 2, $rows-1, $rows); $rows++; # special option extendedKeyUsage $label = GUI::HELPERS::create_label( _("Extended Key Usage (extendedKeyUsage):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $main->{'radiobox'} = Gtk2::HBox->new(0, 0); $main->{'radio1'} = Gtk2::RadioButton->new(undef, _($main->{'words'}{'critical'})); if($main->{'TCONFIG'}->{'client_cert'}->{'extendedKeyUsageType'} eq 'critical') { $main->{'radio1'}->set_active(1) } $main->{'radio1'}->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var_pref($main->{'radio1'}, \$main->{'TCONFIG'}->{'client_cert'}->{'extendedKeyUsageType'}, 'critical', $box) }); $main->{'radiobox'}->add($main->{'radio1'}); $main->{'radio2'} = Gtk2::RadioButton->new($main->{'radio1'}, _($main->{'words'}{'noncritical'})); if($main->{'TCONFIG'}->{'client_cert'}->{'extendedKeyUsageType'} eq 'noncritical') { $main->{'radio2'}->set_active(1) } $main->{'radio2'}->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var_pref( $main->{'radio2'}, \$main->{'TCONFIG'}->{'client_cert'}->{'extendedKeyUsageType'}, 'noncritical', $box) }); $main->{'radiobox'}->add($main->{'radio2'}); $combocextendedKeyUsage = Gtk2::Combo->new(); @combostrings = ( $main->{'words'}{'none'}, $main->{'words'}{'user'}); if((defined($main->{'TCONFIG'}->{'client_cert'}->{'extendedKeyUsage'})) && ($main->{'TCONFIG'}->{'client_cert'}->{'extendedKeyUsage'} ne 'none') && ($main->{'TCONFIG'}->{'client_cert'}->{'extendedKeyUsage'} ne '')) { push(@combostrings, $main->{'TCONFIG'}->{'client_cert'}->{'extendedKeyUsage'}); } $combocextendedKeyUsage->set_popdown_strings(@combostrings); $combocextendedKeyUsage->set_use_arrows(1); $combocextendedKeyUsage->set_value_in_list(0, 0); if(defined($main->{'TCONFIG'}->{'client_cert'}->{'extendedKeyUsage'})) { if($main->{'TCONFIG'}->{'client_cert'}->{'extendedKeyUsage'} ne 'none') { $main->{'radio1'}->set_sensitive(1); $main->{'radio2'}->set_sensitive(1); if($main->{'TCONFIG'}->{'client_cert'}->{'extendedKeyUsage'} eq 'user'){ $combocextendedKeyUsage->entry->set_text($main->{'words'}{'user'}); } else { $combocextendedKeyUsage->entry->set_text($main->{'TCONFIG'}->{'client_cert'}->{'extendedKeyUsage'}); } } else { $combocextendedKeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } } else { $combocextendedKeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } $combocextendedKeyUsage->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var_key($combocextendedKeyUsage, $combocextendedKeyUsage->entry, \$main->{'TCONFIG'}->{'client_cert'}->{'extendedKeyUsage'}, $box, $main->{words}, $main->{'radio1'}, $main->{'radio2'}) }); $table->attach_defaults($combocextendedKeyUsage, 1, 2, $rows-1, $rows); $rows++; $table->attach_defaults($main->{'radiobox'}, 1, 2, $rows-1, $rows); $rows++; # special option nsCerttype $label = GUI::HELPERS::create_label( _("Netscape Certificate Type (nsCertType):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $combocnsCertType = Gtk2::Combo->new(); @combostrings = ( $main->{'words'}{'none'}, $main->{'words'}{'objsign'}, $main->{'words'}{'email'}, $main->{'words'}{'client'}, $main->{'words'}{'client, email'}, $main->{'words'}{'client, objsign'}, $main->{'words'}{'client, email, objsign'}); $combocnsCertType->set_popdown_strings(@combostrings); $combocnsCertType->set_use_arrows(1); $combocnsCertType->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'client_cert'}->{'nsCertType'})) { $combocnsCertType->entry->set_text( $main->{'words'}{$main->{'TCONFIG'}->{'client_cert'}->{'nsCertType'}}); } else { $combocnsCertType->entry->set_text($main->{'words'}{'none'}); } $combocnsCertType->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var($combocnsCertType, $combocnsCertType->entry, \$main->{'TCONFIG'}->{'client_cert'}->{'nsCertType'}, $box, $main->{words}) }); $table->attach_defaults($combocnsCertType, 1, 2, $rows-1, $rows); $rows++; # special option nsRevocationUrl $label = GUI::HELPERS::create_label( _("Netscape Revocation URL (nsRevocationUrl):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $combocnsRevocationUrl = Gtk2::Combo->new(); @combostrings = ($main->{'words'}{'none'}, $main->{'words'}{'user'}); $combocnsRevocationUrl->set_popdown_strings(@combostrings); $combocnsRevocationUrl->set_use_arrows(1); $combocnsRevocationUrl->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'client_cert'}->{'nsRevocationUrl'}) && $main->{'TCONFIG'}->{'client_cert'}->{'nsRevocationUrl'} eq 'user') { $combocnsRevocationUrl->entry->set_text($main->{'words'}{'user'}); } else { $combocnsRevocationUrl->entry->set_text($main->{'words'}{'none'}); } $combocnsRevocationUrl->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var($combocnsRevocationUrl, $combocnsRevocationUrl->entry, \$main->{'TCONFIG'}->{'client_cert'}->{'nsRevocationUrl'}, $box, $main->{words}) }); $table->attach_defaults($combocnsRevocationUrl, 1, 2, $rows-1, $rows); $rows++; # special option nsRenewalUrl $label = GUI::HELPERS::create_label( _("Netscape Renewal URL (nsRenewalUrl):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $combocnsRenewalUrl = Gtk2::Combo->new(); @combostrings = ($main->{'words'}{'none'}, $main->{'words'}{'user'}); $combocnsRenewalUrl->set_popdown_strings(@combostrings); $combocnsRenewalUrl->set_use_arrows(1); $combocnsRenewalUrl->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'client_cert'}->{'nsRenewalUrl'}) && $main->{'TCONFIG'}->{'client_cert'}->{'nsRenewalUrl'} eq 'user') { $combocnsRenewalUrl->entry->set_text($main->{'words'}{'user'}); } else { $combocnsRenewalUrl->entry->set_text($main->{'words'}{'none'}); } $combocnsRenewalUrl->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var($combocnsRenewalUrl, $combocnsRenewalUrl->entry, \$main->{'TCONFIG'}->{'client_cert'}->{'nsRenewalUrl'}, $box, $main->{words}) }); $table->attach_defaults($combocnsRenewalUrl, 1, 2, $rows-1, $rows); $rows++; # standard options foreach $key (@options) { $entry = GUI::HELPERS::entry_to_table("$key:", \$main->{'TCONFIG'}->{'client_cert'}->{$key}, $table, $rows-1, 1, $box); $rows++; $table->resize($rows, 2); } foreach $key (@options_ca) { $entry = GUI::HELPERS::entry_to_table("$key:", \$main->{'TCONFIG'}->{'client_ca'}->{$key}, $table, $rows-1, 1, $box); $rows++; $table->resize($rows, 2); } # fourth page: ca settings @options = qw( nsComment crlDistributionPoints authorityKeyIdentifier issuerAltName nsBaseUrl nsCaPolicyUrl ); @special_options = qw( nsCertType nsRevocationUrl subjectAltName ); @options_ca = qw( default_days ); $vbox = Gtk2::VBox->new(0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("These Settings are passed to OpenSSL for creating CA Certificates"), 'center', 0, 1); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("Multiple Values can be separated by \",\""), 'center', 1, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $separator = Gtk2::HSeparator->new(); $vbox->pack_start($separator, 0, 0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $rows = 1; $table = Gtk2::Table->new($rows, 2, 0); $vbox->pack_start($table, 1, 1, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label(_("CA Certificate Settings"), 'center', 0, 0); $label = Gtk2::Label->new(_("CA Certificate Settings")); $box->{'nb'}->append_page($vbox, $label); # special option subjectAltName $label = GUI::HELPERS::create_label( _("Subject alternative name (subjectAltName):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $combocasubjectAltName = Gtk2::Combo->new(); @combostrings = ($main->{'words'}{'none'}, $main->{'words'}{'emailcopy'}); $combocasubjectAltName->set_popdown_strings(@combostrings); $combocasubjectAltName->set_use_arrows(1); $combocasubjectAltName->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'v3_ca'}->{'subjectAltName'})) { if($main->{'TCONFIG'}->{'v3_ca'}->{'subjectAltName'} eq 'emailcopy') { $combocasubjectAltName->entry->set_text($main->{'words'}{'emailcopy'}); }elsif($main->{'TCONFIG'}->{'v3_ca'}->{'subjectAltName'} eq 'none') { $combocasubjectAltName->entry->set_text($main->{'words'}{'none'}); } } else { $combocasubjectAltName->entry->set_text($main->{'words'}{'none'}); } $combocasubjectAltName->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var_san($combocasubjectAltName, $combocasubjectAltName->entry, \$main->{'TCONFIG'}->{'v3_ca'}->{'subjectAltName'}, $box, $main->{words}) }); $table->attach_defaults($combocasubjectAltName, 1, 2, $rows-1, $rows); $rows++; # special option nsCerttype $label = GUI::HELPERS::create_label( _("Netscape Certificate Type (nsCertType):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $combocansCertType = Gtk2::Combo->new(); @combostrings = ($main->{'words'}{'none'}, $main->{'words'}{'emailCA'}, $main->{'words'}{'sslCA'}, $main->{'words'}{'objCA'}, $main->{'words'}{'sslCA, emailCA'}, $main->{'words'}{'sslCA, objCA'}, $main->{'words'}{'emailCA, objCA'}, $main->{'words'}{'sslCA, emailCA, objCA'} ); $combocansCertType->set_popdown_strings(@combostrings); $combocansCertType->set_use_arrows(1); $combocansCertType->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'v3_ca'}->{'nsCertType'})) { $combocansCertType->entry->set_text( $main->{'words'}{$main->{'TCONFIG'}->{'v3_ca'}->{'nsCertType'}}); } else { $combocansCertType->entry->set_text($main->{'words'}{'none'}); } $combocansCertType->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var($combocansCertType, $combocansCertType->entry, \$main->{'TCONFIG'}->{'v3_ca'}->{'nsCertType'}, $box, $main->{words}) }); $table->attach_defaults($combocansCertType, 1, 2, $rows-1, $rows); $rows++; # special option keyUsage $label = GUI::HELPERS::create_label( _("Key Usage (keyUsage):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $main->{'radiobox'} = Gtk2::HBox->new(0, 0); $main->{'radio1'} = Gtk2::RadioButton->new(undef, _($main->{'words'}{'critical'})); if($main->{'TCONFIG'}->{'v3_ca'}->{'keyUsageType'} eq 'critical') { $main->{'radio1'}->set_active(1) } $main->{'radio1'}->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var_pref($main->{'radio1'}, \$main->{'TCONFIG'}->{'v3_ca'}->{'keyUsageType'}, 'critical', $box) }); $main->{'radiobox'}->add($main->{'radio1'}); $main->{'radio2'} = Gtk2::RadioButton->new($main->{'radio1'}, _($main->{'words'}{'noncritical'})); if($main->{'TCONFIG'}->{'v3_ca'}->{'keyUsageType'} eq 'noncritical') { $main->{'radio2'}->set_active(1) } $main->{'radio2'}->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var_pref($main->{'radio2'}, \$main->{'TCONFIG'}->{'v3_ca'}->{'keyUsageType'}, 'noncritical', $box) }); $main->{'radiobox'}->add($main->{'radio2'}); $combocakeyUsage = Gtk2::Combo->new(); @combostrings = ($main->{'words'}{'none'}, $main->{'words'}{'keyCertSign'}, $main->{'words'}{'cRLSign'}, $main->{'words'}{'keyCertSign, cRLSign'}); $combocakeyUsage->set_popdown_strings(@combostrings); $combocakeyUsage->set_use_arrows(1); $combocakeyUsage->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'v3_ca'}->{'keyUsage'})) { if($main->{'TCONFIG'}->{'v3_ca'}->{'keyUsage'} ne 'none') { $main->{'radio1'}->set_sensitive(1); $main->{'radio2'}->set_sensitive(1); if($main->{'TCONFIG'}->{'v3_ca'}->{'keyUsage'} eq 'keyCertSign') { $combocakeyUsage->entry->set_text($main->{'words'}{'keyCertSign'}); }elsif($main->{'TCONFIG'}->{'v3_ca'}->{'keyUsage'} eq 'cRLSign') { $combocakeyUsage->entry->set_text($main->{'words'}{'cRLSign'}); }elsif($main->{'TCONFIG'}->{'v3_ca'}->{'keyUsage'} eq 'keyCertSign, cRLSign') { $combocakeyUsage->entry->set_text($main->{'words'}{'keyCertSign, cRLSign'}); }else { $combocakeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } }else { $combocakeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } } else { $combocakeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } $combocakeyUsage->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var_key($combocakeyUsage, $combocakeyUsage->entry, \$main->{'TCONFIG'}->{'v3_ca'}->{'keyUsage'}, $box, $main->{words}, $main->{'radio1'}, $main->{'radio2'}) }); $table->attach_defaults($combocakeyUsage, 1, 2, $rows-1, $rows); $rows++; $table->attach_defaults($main->{'radiobox'}, 1, 2, $rows-1, $rows); $rows++; # special option nsRevocationUrl $label = GUI::HELPERS::create_label( _("Netscape Revocation URL (nsRevocationUrl):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $combocansRevocationUrl = Gtk2::Combo->new(); @combostrings = ($main->{'words'}{'none'}, $main->{'words'}{'user'}); $combocansRevocationUrl->set_popdown_strings(@combostrings); $combocansRevocationUrl->set_use_arrows(1); $combocansRevocationUrl->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'v3_ca'}->{'nsRevocationUrl'}) && $main->{'TCONFIG'}->{'v3_ca'}->{'nsRevocationUrl'} eq 'user') { $combocansRevocationUrl->entry->set_text($main->{'words'}{'user'}); } else { $combocansRevocationUrl->entry->set_text($main->{'words'}{'none'}); } $combocansRevocationUrl->entry->signal_connect('changed' => sub { GUI::CALLBACK::entry_to_var($combocansRevocationUrl, $combocansRevocationUrl->entry, \$main->{'TCONFIG'}->{'v3_ca'}->{'nsRevocationUrl'}, $box, $main->{words}) }); $table->attach_defaults($combocansRevocationUrl, 1, 2, $rows-1, $rows); $rows++; # standard options foreach $key (@options) { $entry = GUI::HELPERS::entry_to_table("$key:", \$main->{'TCONFIG'}->{'v3_ca'}->{$key}, $table, $rows-1, 1, $box); $rows++; $table->resize($rows, 2); } foreach $key (@options_ca) { $entry = GUI::HELPERS::entry_to_table("$key:", \$main->{'TCONFIG'}->{'ca_ca'}->{$key}, $table, $rows-1, 1, $box); $rows++; $table->resize($rows, 2); } # fifth page: crl settings @options = qw( default_crl_days ); $vbox = Gtk2::VBox->new(0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("These Settings are passed to OpenSSL for creating Certificate Revocation Lists"), 'center', 0, 1); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("Multiple Values can be separated by \",\""), 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $separator = Gtk2::HSeparator->new(); $vbox->pack_start($separator, 0, 0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $rows = 1; $table = Gtk2::Table->new($rows, 2, 0); $vbox->pack_start($table, 0, 0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("Revocation List Settings"), 'center', 0, 0); $box->{'nb'}->append_page($vbox, $label); foreach $key (@options) { $entry = GUI::HELPERS::entry_to_table("$key:", \$main->{'TCONFIG'}->{'server_ca'}->{$key}, $table, $rows-1, 1, $box); $rows++; $table->resize($rows, 2); } $box->show_all(); $box->{'button_ok'}->set_sensitive(0); $box->{'button_apply'}->set_sensitive(0); return; } # # configuration for CA # sub show_config_ca { my ($main, $opts, $mode) = @_; my(@options, $key, $box, $button_ok, $button_cancel, $table, $label, $entry, $rows, @combostrings, $combonsCertType, $combosubjectAltName, $combokeyUsage); @options = qw( authorityKeyIdentifier basicConstraints issuerAltName nsComment nsCaRevocationUrl nsCaPolicyUrl nsRevocationUrl nsPolicyUrl ); if(not defined($opts->{'name'})) { GUI::HELPERS::print_warning(_("Can't get CA name")); return; } $main->{'TCONFIG'}->init_config($main, $opts->{'name'}); $button_ok = Gtk2::Button->new_from_stock('gtk-ok'); $button_ok->can_default(1); $button_ok->signal_connect('clicked', sub { $main->{'TCONFIG'}->write_config($main, $opts->{'name'}); $opts->{'configured'} = 1; $main->{'CA'}->create_ca($main, $opts, $box, $mode) }); $button_cancel = Gtk2::Button->new_from_stock('gtk-cancel'); $button_cancel->signal_connect('clicked', sub { $box->destroy() }); $box = GUI::HELPERS::dialog_box( _("CA Configuration"), _("CA Configuration"), $button_ok, $button_cancel); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $box->vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("These Settings are passed to OpenSSL for creating this CA Certificate"), 'center', 0, 1); $box->vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("and the CA Certificates of every SubCA, created with this CA."), 'center', 0, 1); $box->vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("Multiple Values can be separated by \",\""), 'center', 0, 0); $box->vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $box->vbox->pack_start($label, 0, 0, 0); $label = GUI::HELPERS::create_label( _("If you are unsure: leave the defaults untouched"), 'center', 0, 0); $box->vbox->pack_start($label, 0, 0, 0); $rows = 1; $table = Gtk2::Table->new($rows, 2, 0); $box->vbox->add($table); # special option keyUsage $label = GUI::HELPERS::create_label( _("Key Usage (keyUsage):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $main->{'radiobox'} = Gtk2::HBox->new(0, 0); $main->{'radio1'} = Gtk2::RadioButton->new(undef, _($main->{'words'}{'critical'})); if($main->{'TCONFIG'}->{'v3_ca'}->{'keyUsageType'} eq 'critical') { $main->{'radio1'}->set_active(1) } $main->{'radio1'}->signal_connect('toggled' => sub{ GUI::CALLBACK::toggle_to_var_pref( $main->{'radio1'}, \$main->{'TCONFIG'}->{'v3_ca'}->{'keyUsageType'}, 'critical')}); $main->{'radiobox'}->add($main->{'radio1'}); $main->{'radio2'} = Gtk2::RadioButton->new($main->{'radio1'}, _($main->{'words'}{'noncritical'})); if($main->{'TCONFIG'}->{'v3_ca'}->{'keyUsageType'} eq 'noncritical') { $main->{'radio2'}->set_active(1) } $main->{'radio2'}->signal_connect('toggled' => sub {GUI::CALLBACK::toggle_to_var_pref($main->{'radio2'}, \$main->{'TCONFIG'}->{'v3_ca'}->{'keyUsageType'}, 'noncritical')}); $main->{'radiobox'}->add($main->{'radio2'}); $combokeyUsage = Gtk2::Combo->new(); @combostrings = ($main->{'words'}{'none'}, $main->{'words'}{'keyCertSign'}, $main->{'words'}{'cRLSign'}, $main->{'words'}{'keyCertSign, cRLSign'}); $combokeyUsage->set_popdown_strings(@combostrings); $combokeyUsage->set_use_arrows(1); $combokeyUsage->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'v3_ca'}->{'keyUsage'})) { if($main->{'TCONFIG'}->{'v3_ca'}->{'keyUsage'} ne 'none') { $main->{'radio1'}->set_sensitive(1); $main->{'radio2'}->set_sensitive(1); if($main->{'TCONFIG'}->{'v3_ca'}->{'keyUsage'} eq 'keyCertSign') { $combokeyUsage->entry->set_text($main->{'words'}{'keyCertSign'}); }elsif($main->{'TCONFIG'}->{'v3_ca'}->{'keyUsage'} eq 'cRLSign') { $combokeyUsage->entry->set_text($main->{'words'}{'cRLSign'}); }elsif($main->{'TCONFIG'}->{'v3_ca'}->{'keyUsage'} eq 'keyCertSign, cRLSign') { $combokeyUsage->entry->set_text($main->{'words'}{'keyCertSign, cRLSign'}); }else { $combokeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } }else { $combokeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } } else { $combokeyUsage->entry->set_text($main->{'words'}{'none'}); $main->{'radio1'}->set_sensitive(0); $main->{'radio2'}->set_sensitive(0); } $combokeyUsage->entry->signal_connect('changed' => sub{&GUI::CALLBACK::entry_to_var_key($combokeyUsage, $combokeyUsage->entry, \$main->{'TCONFIG'}->{'v3_ca'}->{'keyUsage'}, undef, $main->{words}, $main->{'radio1'}, $main->{'radio2'})}); $table->attach_defaults($combokeyUsage, 1, 2, $rows-1, $rows); $rows++; $table->attach_defaults($main->{'radiobox'}, 1, 2, $rows-1, $rows); $rows++; # special option nsCerttype $label = GUI::HELPERS::create_label( _("Netscape Certificate Type (nsCertType):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $combonsCertType = Gtk2::Combo->new(); @combostrings = ($main->{'words'}{'none'}, $main->{'words'}{'emailCA'}, $main->{'words'}{'sslCA'}, $main->{'words'}{'objCA'}, $main->{'words'}{'sslCA, emailCA'}, $main->{'words'}{'sslCA, objCA'}, $main->{'words'}{'emailCA, objCA'}, $main->{'words'}{'sslCA, emailCA, objCA'} ); $combonsCertType->set_popdown_strings(@combostrings); $combonsCertType->set_use_arrows(1); $combonsCertType->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'v3_ca'}->{'nsCertType'})) { $combonsCertType->entry->set_text( $main->{'words'}{$main->{'TCONFIG'}->{'v3_ca'}->{'nsCertType'}}); } else { $combonsCertType->entry->set_text($main->{'words'}{'none'}); } $combonsCertType->entry->signal_connect('changed' => sub{GUI::CALLBACK::entry_to_var($combonsCertType, $combonsCertType->entry, \$main->{'TCONFIG'}->{'v3_ca'}->{'nsCertType'}, undef, $main->{words})}); $table->attach_defaults($combonsCertType, 1, 2, $rows-1, $rows); $rows++; # special option subjectAltName $label = GUI::HELPERS::create_label( _("Subject alternative name (subjectAltName):"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows-1, $rows); $combosubjectAltName = Gtk2::Combo->new(); @combostrings = ($main->{'words'}{'none'}, $main->{'words'}{'emailcopy'}); $combosubjectAltName->set_popdown_strings(@combostrings); $combosubjectAltName->set_use_arrows(1); $combosubjectAltName->set_value_in_list(1, 0); if(defined($main->{'TCONFIG'}->{'v3_ca'}->{'subjectAltName'})) { if($main->{'TCONFIG'}->{'v3_ca'}->{'subjectAltName'} eq 'emailcopy') { $combosubjectAltName->entry->set_text($main->{'words'}{'emailcopy'}); }elsif($main->{'TCONFIG'}->{'v3_ca'}->{'subjectAltName'} eq 'none') { $combosubjectAltName->entry->set_text($main->{'words'}{'none'}); } } else { $combosubjectAltName->entry->set_text($main->{'words'}{'none'}); } $combosubjectAltName->entry->signal_connect('changed' => sub{GUI::CALLBACK::entry_to_var_san($combosubjectAltName, $combosubjectAltName->entry, \$main->{'TCONFIG'}->{'v3_ca'}->{'subjectAltName'}, undef, $main->{words})}); $table->attach_defaults($combosubjectAltName, 1, 2, $rows-1, $rows); $rows++; foreach $key (@options) { $entry = GUI::HELPERS::entry_to_table("$key:", \$main->{'TCONFIG'}->{'v3_ca'}->{$key}, $table, $rows-1, 1); $rows++; $table->resize($rows, 2); } $box->show_all(); return; } 1 tinyca2-0.7.5/lib/GUI.pm0000644000175000017500000030236010461475420016303 0ustar schollerscholler00000000000000# Copyright (c) Stephan Martin # # $Id: GUI.pm,v 1.34 2006/07/25 20:10:54 sm Exp $ # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. use strict; package GUI; use POSIX; use Gtk2::SimpleMenu; my $false=undef; my $true=1; # This hash maps our internal MD names to the displayed digest names. # Maybe it should live in a crypto-related file instead of a UI-related file? my %md_algorithms = ( 'md5' => 'MD5', 'sha1' => 'SHA1', 'md2' => 'MD2', 'mdc2' => 'MDC2', 'md4' => 'MD4', 'ripemd160' => 'RIPEMD-160', # 'sha' => 'SHA', 'sha1' => 'SHA-1', ); my %bit_lengths = ( '1024' => '1024', '2048' => '2048', '4096' => '4096' ); # # create the main object # sub new { my $that = shift; my $class = ref($that) || $that; my $self = {}; $self->{'init'} = shift; bless($self, $class); $self->{'version'} = '0.7.5'; $self->{'words'} = GUI::WORDS->new(); $self->{'exportdir'} = $self->{'init'}->{'exportdir'}; $self->{'basedir'} = $self->{'init'}->{'basedir'}; $self->{'tmpdir'} = $self->{'basedir'}."/tmp"; $self->{'init'}->{'tmpdir'} = $self->{'basedir'}."/tmp"; # initialize CA object $self->{'CA'} = CA->new($self->{'init'}); # initialize OpenSSL object $self->{'OpenSSL'} = OpenSSL->new($self->{'init'}->{'opensslbin'}, $self->{'tmpdir'}); # initialize CERT object $self->{'CERT'} = CERT->new($self->{'OpenSSL'}); # initialize KEY object $self->{'KEY'} = KEY->new(); # initialize REQ object $self->{'REQ'} = REQ->new($self->{'OpenSSL'}); # initialize CONFIG object $self->{'TCONFIG'} = TCONFIG->new(); # initialize fonts and styles $self->{'fontfix'} = Gtk2::Pango::FontDescription->from_string( "Courier 10" ); # Gtk::Rc->parse_string( #'style "default" #{ # fontset = "-*-helvetica-medium-r-normal--11-*,-*-fixed-medium-r-normal--11-*" #} #widget_class "*" style "default"'); # $self->{'stylered'} = Gtk2::Style->new(); # $self->{'stylered'}->fg('normal', Gtk2::Gdk::Color->parse('red')); # $self->{'stylegreen'} = Gtk2::Style->new(); # $self->{'stylegreen'}->fg('normal', Gtk2::Gdk::Color->parse('green')); # initialize main window $self->{'mw'} = Gtk2::Window->new("toplevel"); $self->{'mw'}->set_title("TinyCA2 Management $self->{'version'}"); $self->{'mw'}->set_resizable(1); $self->{'mw'}->set_default_size(850, 600); $self->{'mw'}->signal_connect( 'delete_event', sub { HELPERS::exit_clean(0) }); $self->{'busycursor'} = Gtk2::Gdk::Cursor->new('watch'); $self->{'cursor'} = Gtk2::Gdk::Cursor->new('left-ptr'); $self->{'rootwin'} = Gtk2::Gdk->get_default_root_window(); # split window horizontal to add menu, toolbar and notebook $self->{'mvb'} = Gtk2::VBox->new(); $self->{'mw'}->add($self->{'mvb'}); $self->create_menu(); $self->{'mvb'}->pack_start($self->{'menu'}->{'widget'} , 0, 0, 0); $self->create_toolbar('startup'); $self->{'mvb'}->pack_start($self->{'toolbar'}, 0, 0, 0); $self->create_nb(); $self->{'sizebox'} = Gtk2::VBox->new(); $self->{'mvb'}->pack_start($self->{'sizebox'}, 1, 1, 0); $self->{'sizebox'}->pack_start($self->{'nb'}, 1, 1, 0); $self->create_bar(); $self->{'mvb'}->pack_start($self->{'barbox'}, 0, 0, 0); $self->{'rootwin'}->set_cursor($self->{'cursor'}); $self; } # # create/update the main frame with the notebooks # sub create_mframe { my ($self, $force) = @_; my($parsed, $calabel, $caframe, $rows, $table, @fields, $text, @childs, $label, $cert_export, $cert_revoke, $cert_delete, $certlabel, $certlistwin, @certtitles, @keytitles, $keylabel, $keylistwin, $reqlistwin, @reqtitles, $reqlabel, $ind, $column, $ca, $cadir); if ((defined($self->{'CA'}->{'actca'})) && ($self->{'CA'}->{'actca'} ne "")) { $ca = $self->{'CA'}->{'actca'}; } else { return; } $cadir = $self->{'CA'}->{'cadir'}; $parsed = $self->{'CERT'}->parse_cert( $self, 'CA'); defined($parsed) || GUI::HELPERS::print_error( _("Can't read CA certificate")); ### notebooktab for ca information if(not defined($self->{'cabox'})) { $self->{'cabox'} = Gtk2::VBox->new(0, 0); $calabel = GUI::HELPERS::create_label(_("CA"), 'left', 1, 0); $self->{'nb'}->insert_page($self->{'cabox'}, $calabel, 0); } else { $self->{'nb'}->hide(); $self->{'nb'}->remove_page(0); $self->{'cabox'}->destroy(); $self->{'cabox'} = Gtk2::VBox->new(0, 0); $calabel = GUI::HELPERS::create_label(_("CA"), 'left', 1, 0); $self->{'nb'}->insert_page($self->{'cabox'}, $calabel, 0); } # frame for CA informations $self->{'cainfobox'} = GUI::X509_infobox->new(); $self->{'cainfobox'}->display($self->{'cabox'}, $parsed, 'cacert', _("CA Information")); ### notebooktab for certificates # delete old instance, force reinitialisation if (defined($self->{'certbox'}) && $force) { $self->{'certbox'}->destroy(); delete($self->{'certbox'}); $self->{'certbox'} = undef; delete($self->{'certbrowser'}->{'OpenSSL'}); $self->{'certbrowser'}->{'OpenSSL'} = undef; delete($self->{'certbrowser'}); $self->{'certbrowser'} = undef; } if(not defined($self->{'certbox'})) { $self->{'certbox'} = Gtk2::VBox->new(0, 0); $certlabel = GUI::HELPERS::create_label( _("Certificates"), 'left', 1, 0); $self->{'nb'}->insert_page($self->{'certbox'}, $certlabel, 1); if (not defined ($self->{'certbrowser'})) { $self->{'certbrowser'}=GUI::X509_browser->new($self, 'cert'); $self->{'certbrowser'}->set_window($self->{'certbox'}); $self->{'certbrowser'}->add_list($ca, $cadir."/certs", $cadir."/crl/crl.pem", $cadir."/index.txt"); $self->{'certbrowser'}->add_info(); # create popup menu if(not defined($self->{'certmenu'})) { _create_cert_menu($self); } $self->{'certbrowser'}->{'x509clist'}->signal_connect( 'button_release_event', sub { _show_popup_menu($self, 'cert', @_) }); $self->{'certbrowser'}->{'x509clist'}->signal_connect( 'button_press_event', sub { _show_details_wrapper($self, 'cert', @_)}); # $self->{'certbrowser'}->destroy(); } else { $self->{'certbrowser'}->update($cadir."/certs", $cadir."/crl/crl.pem", $cadir."/index.txt"); } } else { $self->{'certbrowser'}->update($cadir."/certs", $cadir."/crl/crl.pem", $cadir."/index.txt"); } ### notebooktab for keys (split info and buttons) @keytitles = (_("Common Name"), _("eMail Address"), _("Organizational Unit"), _("Organization"), _("Location"), _("State"), _("Country"), _("Type")); # delete old instance, force reinitialisation if (defined($self->{'keybox'}) && $force) { $self->{'keybox'}->destroy(); delete($self->{'keybox'}); $self->{'keybox'} = undef; delete($self->{'keybrowser'}->{'OpenSSL'}); $self->{'keybrowser'}->{'OpenSSL'} = undef; delete($self->{'keybrowser'}); $self->{'keybrowser'} = undef; } if(not defined($self->{'keybox'})) { $self->{'keybox'} = Gtk2::VBox->new(0, 0); $keylabel = GUI::HELPERS::create_label( _("Keys"), 'left', 1, 0); $self->{'nb'}->insert_page($self->{'keybox'}, $keylabel, 2); if (not defined ($self->{'keybrowser'})) { $self->{'keybrowser'}=GUI::X509_browser->new($self, 'key'); $self->{'keybrowser'}->set_window($self->{'keybox'}); $self->{'keybrowser'}->add_list($ca, $cadir."/keys", $cadir."/crl/crl.pem", $cadir."/index.txt"); # create popup menu if(not defined($self->{'keymenu'})) { _create_key_menu($self); } $self->{'keybrowser'}->{'x509clist'}->signal_connect( 'button_release_event', sub { _show_popup_menu($self, 'key', @_) }); } else { $self->{'keybrowser'}->update($cadir."/keys", $cadir."/crl/crl.pem", $cadir."/index.txt"); } } # delete old instance, force reinitialisation if (defined($self->{'reqbox'}) && $force) { $self->{'reqbox'}->destroy(); delete($self->{'reqbox'}); $self->{'reqbox'} = undef; delete($self->{'reqbrowser'}->{'OpenSSL'}); $self->{'reqbrowser'}->{'OpenSSL'} = undef; delete($self->{'reqbrowser'}); $self->{'reqbrowser'} = undef; } ### notebooktab for requests (split info and buttons) if(not defined($self->{'reqbox'})) { $self->{'reqbox'} = Gtk2::VBox->new(0, 0); $reqlabel = GUI::HELPERS::create_label( _("Requests"), 'left', 1, 0); $self->{'nb'}->insert_page($self->{'reqbox'}, $reqlabel, 3); if (not defined ($self->{'reqbrowser'})) { $self->{'reqbrowser'}=GUI::X509_browser->new($self, 'req'); $self->{'reqbrowser'}->set_window($self->{'reqbox'}); $self->{'reqbrowser'}->add_list($ca, $cadir."/req", $cadir."/crl/crl.pem", $cadir."/index.txt"); $self->{'reqbrowser'}->add_info(); # create popup menu if(not defined($self->{'reqmenu'})) { _create_req_menu($self); } $self->{'reqbrowser'}->{'x509clist'}->signal_connect( 'button_release_event', sub { _show_popup_menu($self, 'req', @_) }); $self->{'reqbrowser'}->{'x509clist'}->signal_connect( 'button_press_event', sub { _show_details_wrapper($self, 'req', @_)}); } else { $self->{'reqbrowser'}->update($cadir."/req", $cadir."/crl/crl.pem", $cadir."/index.txt"); } } else { $self->{'reqbrowser'}->update($cadir."/req", $cadir."/crl/crl.pem", $cadir."/index.txt"); } $self->{'nb'}->show_all(); $self->{'nb'}->signal_connect_after('switch-page' => sub { _act_toolbar($self->{'nb'}, $self) }); $self->{'nb'}->set_current_page(1); return; } # # create empty notebook, add to main window and configure # sub create_nb { my $self = shift; $self->{'nb'} = Gtk2::Notebook->new(); $self->{'nb'}->set_tab_pos('top'); return; } # # create the applicationbar # sub create_bar { my $self = shift; $self->{'barbox'} = Gtk2::HBox->new(); $self->{'bar'} = Gtk2::Statusbar->new(); $self->{'progress'} = Gtk2::ProgressBar->new(); $self->{'barbox'}->pack_start($self->{'bar'}, 1, 1, 0); GUI::HELPERS::set_status($self, " Watch out..."); return; } # # keep toolbar in sync with notebook # sub _act_toolbar { my ($nb, $self) = @_; my $page_num = $nb->get_current_page(); my $mode = 'startup'; my $t; if(defined($self->{'CA'}->{'actca'})) { if ($page_num == 0) { $mode = 'ca'; $t = _(" Actual CA: %s"); } elsif ($page_num == 1) { $mode = 'cert'; $t = _(" Actual CA: %s - Certificates"); } elsif ($page_num == 2) { $mode = 'key'; $t = _(" Actual CA: %s - Keys"); } elsif ($page_num == 3) { $mode = 'req'; $t = _(" Actual CA: %s - Requests"); } if(defined($self->{'CA'}->{'actca'})) { $t = sprintf($t, $self->{'CA'}->{'actca'}); GUI::HELPERS::set_status($self, $t); } } $self->create_toolbar($mode); } # # create the toolbar # sub create_toolbar { my ($self, $mode) = @_; my ($icon, $mask, $iconw, $button, @children, $c, $ca); $ca = $self->{'CA'}->{'actca'}; if(not defined($self->{'separator'})) { $self->{'separator'} = Gtk2::SeparatorToolItem->new(); } if(defined($self->{'toolbar'})) { @children = $self->{'toolbar'}->get_children(); for(my $i = 6; $i < @children; $i++) { $c = $children[$i]; $c->destroy(); } } else { $self->{'toolbar'} = Gtk2::Toolbar->new(); $self->{'toolbar'}->set_orientation('horizontal'); $self->{'toolbar'}->set_icon_size('small-toolbar'); ## Buttons for all toolbars $self->{'toolbar'} = Gtk2::Toolbar->new(); $self->{'toolbar'}->set_orientation('horizontal'); $button = Gtk2::ToolButton->new_from_stock('gtk-quit'); $self->{'toolbar'}->insert($button, -1); $button->signal_connect('clicked', sub { exit(4) }); $button = Gtk2::ToolButton->new_from_stock('gtk-open'); $self->{'toolbar'}->insert($button, -1); $button->set_label(_("Open CA")); $button->signal_connect('clicked', sub { $self->{'CA'}->get_open_name($self)}); $button = Gtk2::ToolButton->new_from_stock('gtk-new'); $self->{'toolbar'}->insert($button, -1); $button->set_label(_("New CA")); $button->signal_connect('clicked', sub { $self->{'CA'}->get_ca_create($self)}); $button = Gtk2::ToolButton->new_from_stock('gtk-convert'); $self->{'toolbar'}->insert($button, -1); $button->set_label(_("Import CA")); $button->signal_connect('clicked', sub { $self->{'CA'}->get_ca_import($self)}); $button = Gtk2::ToolButton->new_from_stock('gtk-delete'); $self->{'toolbar'}->insert($button, -1); $button->set_label(_("Delete CA")); $button->signal_connect('clicked', sub { $self->{'CA'}->get_ca_delete($self)}); $self->{'toolbar'}->insert($self->{'separator'}, -1); } if($mode eq 'ca') { $button = Gtk2::ToolButton->new_from_stock('gtk-find'); $self->{'toolbar'}->insert($button, -1); $button->set_label(_("Details")); $button->signal_connect('clicked', sub { $self->show_details('CA') }); $button = Gtk2::ToolButton->new_from_stock('gtk-find-and-replace'); $self->{'toolbar'}->insert($button, -1); $button->set_label(_("History")); $button->signal_connect('clicked', sub { $self->show_history() }); $button = Gtk2::ToolButton->new_from_stock('gtk-new'); $self->{'toolbar'}->insert($button, -1); $button->set_label(_("Sub CA")); $button->signal_connect('clicked', sub { $self->{'CA'}->get_ca_create($self, undef, undef, "sub")}); $button = Gtk2::ToolButton->new_from_stock('gtk-save'); $self->{'toolbar'}->insert($button, -1); $button->set_label(_("Export CA")); $button->signal_connect('clicked', sub { $self->{'CA'}->export_ca_cert($self)}); $button = Gtk2::ToolButton->new_from_stock('gtk-save'); $self->{'toolbar'}->insert($button, -1); $button->set_label(_("Export CRL")); $button->signal_connect('clicked', sub { $self->{'CA'}->export_crl($self)}); if(-s $self->{'CA'}->{$ca}->{'dir'}."/cachain.pem") { $button = Gtk2::ToolButton->new_from_stock('gtk-save'); $self->{'toolbar'}->insert($button, -1); $button->set_label(_("Export Chain")); $button->signal_connect('clicked', sub { $self->{'CA'}->export_ca_chain($self)}); } } elsif($mode eq 'cert') { $button = Gtk2::ToolButton->new_from_stock('gtk-find'); $self->{'toolbar'}->insert($button, -1); $button->set_label(_("Details")); $button->signal_connect('clicked', sub { $self->show_details('cert') }); $button = Gtk2::ToolButton->new_from_stock('gtk-find'); $self->{'toolbar'}->insert($button, -1); $button->set_label(_("View")); $button->signal_connect('clicked', sub { $self->show_text('cert') }); if(not(defined($self->{'newcertmenu'}))) { _create_create_cert_menu($self); } $button = Gtk2::ToolButton->new_from_stock('gtk-new'); $self->{'toolbar'}->insert($button, -1); $button->set_label(_("New")); $button->signal_connect('clicked' => sub { $self->{'newcertmenu'}->popup( undef, undef, undef, undef, 1, 0) }); $button = Gtk2::ToolButton->new_from_stock('gtk-save'); $self->{'toolbar'}->insert($button, -1); $button->set_label(_("Export")); $button->signal_connect('clicked', sub { $self->{'CERT'}->get_export_cert($self) }); $button = Gtk2::ToolButton->new_from_stock('gtk-stop'); $self->{'toolbar'}->insert($button, -1); $button->set_label(_("Revoke")); $button->signal_connect('clicked', sub { $self->{'CERT'}->get_revoke_cert($self) }); if(not defined($self->{'renewcertmenu'})) { _create_renew_cert_menu($self); } $button = Gtk2::ToolButton->new_from_stock('gtk-refresh'); $self->{'toolbar'}->insert($button, -1); $button->set_label(_("Renew")); $button->signal_connect('clicked' => sub { $self->{'renewcertmenu'}->popup( undef, undef, undef, undef, 1, 0) }); $button = Gtk2::ToolButton->new_from_stock('gtk-delete'); $self->{'toolbar'}->insert($button, -1); $button->set_label(_("Delete")); $button->signal_connect('clicked', sub { $self->{'CERT'}->get_del_cert($self) }); } elsif($mode eq 'key') { $button = Gtk2::ToolButton->new_from_stock('gtk-save'); $self->{'toolbar'}->insert($button, -1); $button->set_label(_("Export")); $button->signal_connect('clicked', sub { $self->{'KEY'}->get_export_key($self) }); $button = Gtk2::ToolButton->new_from_stock('gtk-delete'); $self->{'toolbar'}->insert($button, -1); $button->set_label(_("Delete")); $button->signal_connect('clicked', sub { $self->{'KEY'}->get_del_key($self) }); } elsif($mode eq 'req') { $button = Gtk2::ToolButton->new_from_stock('gtk-find'); $self->{'toolbar'}->insert($button, -1); $button->set_label(_("Details")); $button->signal_connect('clicked', sub { $self->show_details('req') }); $button = Gtk2::ToolButton->new_from_stock('gtk-find'); $self->{'toolbar'}->insert($button, -1); $button->set_label(_("View")); $button->signal_connect('clicked', sub { $self->show_text('req') }); $button = Gtk2::ToolButton->new_from_stock('gtk-new'); $self->{'toolbar'}->insert($button, -1); $button->set_label(_("New")); $button->signal_connect('clicked', sub { $self->{'REQ'}->get_req_create($self) }); $button = Gtk2::ToolButton->new_from_stock('gtk-revert-to-saved'); $self->{'toolbar'}->insert($button, -1); $button->set_label(_("Import")); $button->signal_connect('clicked', sub { $self->{'REQ'}->get_import_req($self) }); if(not(defined($self->{'reqsignmenu'}))) { _create_sign_req_menu($self); } $button = Gtk2::ToolButton->new_from_stock('gtk-properties'); $self->{'toolbar'}->insert($button, -1); $button->set_label(_("Sign")); $button->signal_connect('clicked' => sub { $self->{'reqsignmenu'}->popup( undef, undef, undef, undef, 1, 0) }); $button = Gtk2::ToolButton->new_from_stock('gtk-delete'); $self->{'toolbar'}->insert($button, -1); $button->set_label(_("Delete")); $button->signal_connect('clicked', sub { $self->{'REQ'}->get_del_req($self) }); } $self->{'toolbar'}->set_icon_size('small-toolbar'); $self->{'toolbar'}->show_all(); return; } # # create the menubar # sub create_menu { my $self = shift; my $menu_tree = [ _("_CA") => { item_type => '', children => [ _("_Open CA") => { callback => sub { $self->{'CA'}->get_open_name($self) }, item_type => '', extra_data => 'gtk-open' }, _("_New CA") => { callback => sub { $self->{'CA'}->get_ca_create($self)}, item_type => '', extra_data => 'gtk-new' }, _("_Delete CA") => { callback => sub { $self->{'CA'}->get_ca_delete($self)}, item_type => '', extra_data => 'gtk-delete' }, Separator => { item_type => '', }, _("_Exit") => { callback => sub { exit(3) }, item_type => '', extra_data => 'gtk-close' } ], }, _("_Preferences") => { item_type => '', children => [ _("Experts Only!!") => { }, Separator => { item_type => '', }, _("OpenSSL _Configuration") => { callback => sub{ $self->{'TCONFIG'}->config_openssl($self) }, item_type => '', extra_data => 'gtk-preferences' } ], }, _("_Help") => { item_type => '', children => [ _("_Help") => { callback => sub{ $self->show_help() }, item_type => '', extra_data => 'gtk-help' }, _("_About TinyCA") => { callback => sub { $self->about($self) }, item_type => '', extra_data => 'gtk-about' } ], } ]; $self->{'menu'} = Gtk2::SimpleMenu->new(menu_tree => $menu_tree); return; } # # pop-up to display request/cert as TXT # sub show_text { my ($self, $mode) = @_; my($parsed, $t, $box, $label, $text, $vscrollbar, $name, $button_ok, $status, $scrolled, $ca, $buffer); $ca = $self->{'CA'}->{'actca'}; if($mode eq 'req') { $name = $self->{'reqbrowser'}->selection_dn(); } elsif($mode eq 'cert') { $name = $self->{'certbrowser'}->selection_dn(); } else { GUI::HELPERS::print_error( _("Invalid mode for show_text():")." ".$mode); return; } if((not defined $name) && ($mode eq 'req')) { GUI::HELPERS::print_info(_("Please select a Request first")); return; }elsif((not defined $name) && ($mode eq 'cert')) { GUI::HELPERS::print_info(_("Please select a certificate first")); return; } if($mode eq 'cert') { $status = $self->{'certbrowser'}->selection_status(); } $name = HELPERS::enc_base64($name); if($mode eq 'req') { $parsed = $self->{'REQ'}->parse_req( $self, $name); } elsif($mode eq 'cert') { $parsed = $self->{'CERT'}->parse_cert( $self, $name); } defined($parsed) || GUI::HELPERS::print_error(_("Can't read file")); $t = $mode eq 'req'?_("Request"):_("Certificate"); $button_ok = Gtk2::Button->new_from_stock('gtk-ok'); $button_ok->signal_connect('clicked', sub { $box->destroy() }); $button_ok->can_default(1); $box = GUI::HELPERS::dialog_box($t, $t, $button_ok); $box->set_default_size(550, 440); $button_ok->grab_default(); $scrolled = Gtk2::ScrolledWindow->new(undef, undef); $scrolled->set_policy('automatic', 'automatic'); $scrolled->set_shadow_type('etched-in'); $box->vbox->pack_start($scrolled, 1, 1, 0); $buffer = Gtk2::TextBuffer->new(); $buffer->set_text($parsed->{'TEXT'}); $text = Gtk2::TextView->new_with_buffer($buffer); $text->set_editable(0); $text->set_wrap_mode('none'); $text->modify_font($self->{'fontfix'}); $scrolled->add($text); $box->show_all(); return; } # # completeley sick, but needed for doubleclick # sub _show_details_wrapper { my ($self, $mode, $list, $event) = @_; return(0) if($event->type() ne '2button-press'); show_details($self, $mode); return(1); } # # called on rightclick in [key|cert|reqlist] # sub _show_popup_menu { my ($self, $mode, $list, $event) = @_; my $t; if ($event->button() == 3) { if($mode eq 'cert') { $self->{'certmenu'}->popup(undef, undef, undef, undef, 3, 0); } elsif ($mode eq 'req') { $self->{'reqmenu'}->popup(undef, undef, undef, undef, 3, 0); } elsif ($mode eq 'key') { $self->{'keymenu'}->popup(undef, undef, undef, undef, 3, 0); } else { $t = sprintf( _("Invalid mode for _show_popup_menu(): %s"), $mode); GUI::HELPERS::print_error($t); } return(1); } return(0); } # # show request/certificate informations and extensions # sub show_details { my ($self, $mode) = @_; my($name, $status, $parsed, $row, $ind, $label, $table, $tree, $box, $button_ok, $t, @fields, $ca); $ca = $self->{'CA'}->{'actca'}; if($mode eq 'req') { $name = $self->{'reqbrowser'}->selection_dn(); } elsif($mode eq 'cert') { $name = $self->{'certbrowser'}->selection_dn(); } elsif($mode eq 'CA') { $name = 'CA'; } else { GUI::HELPERS::print_error( _("Invalid mode for show_details():")." ".$mode); return; } if((not defined $name) && ($mode eq 'req')) { GUI::HELPERS::print_info(_("Please select a Request first")); return; }elsif((not defined $name) && ($mode eq 'cert')) { GUI::HELPERS::print_info(_("Please select a Certificate first")); return; } if($mode eq 'cert') { $status = $self->{'certbrowser'}->selection_status(); } $name = HELPERS::enc_base64($name) if($name ne 'CA'); if($mode eq 'req') { $parsed = $self->{'REQ'}->parse_req( $self, $name); } elsif($mode eq 'cert' || $mode eq 'CA') { $parsed = $self->{'CERT'}->parse_cert( $self, $name); } defined($parsed) || GUI::HELPERS::print_error(_("Can't read file")); $t = $mode eq 'req'?_("Request Details"):_("Certificate Details"); $button_ok = Gtk2::Button->new_from_stock('gtk-ok'); $button_ok->can_default(1); $button_ok->signal_connect('clicked', sub { $box->destroy() }); $box = GUI::HELPERS::dialog_box($t, $t, $button_ok); $box->set_default_size(700, 400); $button_ok->grab_default(); $mode = 'cert' if($mode eq 'CA'); $tree = $self->create_detail_tree($parsed, $mode); $box->vbox->add($tree); $box->show_all(); $tree->{'tree'}->columns_autosize(); } # # pop-up to verify import # sub show_import_verification { my ($self, $mode, $opts, $parsed) = @_; my($box, $button_ok, $button_cancel, $label, $rows, $tree, $t); $button_ok = Gtk2::Button->new_from_stock('gtk-ok'); $button_ok->can_default(1); if($mode eq "req") { $button_ok->signal_connect('clicked', sub { $self->{'REQ'}->import_req($self, $opts, $parsed, $box) }); } elsif($mode eq "cacert") { $button_ok->signal_connect('clicked', sub { $self->{'CA'}->import_ca($self, $opts, $box) }); } $button_cancel = Gtk2::Button->new_from_stock('gtk-cancel'); $button_cancel->signal_connect('clicked', sub { $box->destroy() }); if($mode eq "req") { $t = _("Import Request"); } elsif($mode eq "cacert") { $t = _("Import CA Certificate"); } $box = GUI::HELPERS::dialog_box( $t, $t, $button_ok, $button_cancel); $box->set_default_size(700, 400); $button_ok->grab_default(); if($mode eq "req") { $t = _("Do you want to import the following Certificate Request?"); } elsif($mode eq "cacert") { $t = _("Do you want to import the following CA Certificate?"); } $label = GUI::HELPERS::create_label($t, 'center', 1, 0); $box->vbox->pack_start($label, 0, 0, 0); $tree = $self->create_detail_tree($parsed, $mode); $box->vbox->pack_start($tree, 1, 1, 0); $box->show_all(); return; } # # create tree with details (cert/req) # sub create_detail_tree { my ($self, $parsed, $mode) = @_; # print STDERR "DEBUG: create_detail_tree called with mode $mode\n"; my ($tree, $tree_scrolled, $t, $root, $store, $piter, $citer, $column, $ind, $nsext); $tree_scrolled = Gtk2::ScrolledWindow->new(undef, undef); $tree_scrolled->set_policy('automatic', 'automatic'); $tree_scrolled->set_shadow_type('etched-in'); $store = Gtk2::TreeStore->new('Glib::String','Glib::String'); $tree = Gtk2::TreeView->new_with_model($store); $tree->get_selection->set_mode('none'); $tree->set_headers_visible(0); $tree_scrolled->{'tree'} = $tree; my @titles = ("", ""); $ind = 0; foreach my $title (@titles) { $column = Gtk2::TreeViewColumn->new_with_attributes( $title, Gtk2::CellRendererText->new(), 'text' => $ind); $tree->append_column($column); $ind++; } $tree_scrolled->add_with_viewport($tree); $t = $mode eq 'req'?_("Request Details"):_("Certificate Details"); $t .= " - $parsed->{'CN'}"; $root = $store->append(undef); $store->set($root, 0 => $t); # Information about Subject DN $t = _("Subject DN").":"; $piter = $store->append($root); $store->set($piter, 0 => $t); for my $l qw(CN EMAIL O OU C ST L) { if(defined($parsed->{$l})) { if($l eq "OU") { foreach my $ou (@{$parsed->{'OU'}}) { $citer = $store->append($piter); $store->set($citer, 0 => $self->{'words'}{$l}, 1 => $ou); } } else { $citer = $store->append($piter); $store->set($citer, 0 => $self->{'words'}{$l}, 1 => $parsed->{$l}); } } } if($mode ne "req") { # Information about Issuer $t = _("Issuer").":"; $piter = $store->append($root); $store->set($piter, 0 => $t); for my $l qw(CN EMAIL O OU C ST L) { if(defined($parsed->{'ISSUERDN'}->{$l})) { if($l eq "OU") { foreach my $ou (@{$parsed->{'ISSUERDN'}->{'OU'}}) { $citer = $store->append($piter); $store->set($citer, 0 => $self->{'words'}{$l}, 1 => $ou); } } else { $citer = $store->append($piter); $store->set($citer, 0 => $self->{'words'}{$l}, 1 => $parsed->{'ISSUERDN'}->{$l}); } } } } if($mode ne "req") { # Information about Validity $t = _("Validity").":"; $piter = $store->append($root); $store->set($piter, 0 => $t); for my $l qw(STATUS NOTBEFORE NOTAFTER) { if(defined($parsed->{$l})) { $citer = $store->append($piter); $store->set($citer, 0 => $self->{'words'}{$l}, 1 => $parsed->{$l}); } } } # Information about Key/Certificate $t = $mode eq 'req'?_("Key/Request Details:"):_("Key/Certificate Details:"); $piter = $store->append($root); $store->set($piter, 0 => $t); for my $l qw(STATUS SERIAL KEYSIZE PK_ALGORITHM SIG_ALGORITHM TYPE) { if(defined($parsed->{$l})) { $citer = $store->append($piter); $store->set($citer, 0 => $self->{'words'}{$l}, 1 => $parsed->{$l}); } } if($mode ne "req") { # Fingerprints $t = _("Fingerprints").":"; $piter = $store->append($root); $store->set($piter, 0 => $t); for my $l qw(FINGERPRINTMD5 FINGERPRINTSHA1) { if(defined($parsed->{$l})) { $citer = $store->append($piter); $store->set($citer, 0 => $self->{'words'}{$l}, 1 => $parsed->{$l}); } } } # Information about Key/Certificate if(keys(%{$parsed->{'EXT'}})) { $t = $mode eq 'req'?_("Requested X.509 Extensions"):_("X.509v3 Extensions"); $piter = $store->append($root); $store->set($piter, 0 => $t); while(my ($key, $val) = each(%{$parsed->{'EXT'}})) { if($key =~ /^netscape/i) { $nsext = 1; next; } # print STDERR "DEBUG: print key: >$key< val: >$val->[0]<\n"; $citer = $store->append($piter); $store->set($citer, 0 => $key, 1 => $val->[0]); if(@{$val} > 1) { for(my $i = 1; $val->[$i]; $i++) { $citer = $store->append($piter); $store->set($citer, 0 => $key, 1 => $val->[$i]); } } } if($nsext) { $t = $mode eq 'req'?_("Requested Netscape Extensions"):_("Netscape Extensions"); $piter = $store->append($root); $store->set($piter, 0 => $t); while(my ($key, $val) = each(%{$parsed->{'EXT'}})) { if($key !~ /^netscape/i) { next; } $citer = $store->append($piter); $store->set($citer, 0 => $key, 1 => $val->[0]); if(@{$val} > 1) { for(my $i = 1; $val->[$i]; $i++) { $t = [$key, $val->[$i]]; $citer = $store->append($piter); $store->set($citer, 0 => $key, 1 => $val->[$i]); } } } } } $tree->expand_to_path(Gtk2::TreePath->new_first()); return($tree_scrolled); } # # get name for open/delete a CA # sub show_select_ca_dialog { my ($self, $action, $opts)= @_; my ($box, $button_ok, $button_cancel, $label, $scrolled, $list, $model, $name, $t, $store, $column, $iter); if($action eq 'open') { $t = _("Open CA"); }elsif($action eq 'delete') { $t = _("Delete CA"); }else { GUI::HELPERS::print_error(_("Invalid action given: ").$action); return; } $button_ok = Gtk2::Button->new_from_stock('gtk-ok'); $button_ok->can_default(1); $button_cancel = Gtk2::Button->new_from_stock('gtk-cancel'); $button_cancel->signal_connect('clicked', sub { $box->destroy() }); $button_ok->signal_connect('clicked', sub { $iter = $list->get_selection->get_selected(); if(defined($iter)) { $name = $store->get($iter); if($action eq 'open') { $opts->{'name'} = $name; $self->{'CA'}->open_ca($self, $opts, $box); }elsif($action eq 'delete') { $self->{'CA'}->delete_ca($self, $name, $box); }else { GUI::HELPERS::print_error( _("Invalid action for show_select_ca_dialog(): ").$action); } } } ); $box = GUI::HELPERS::dialog_box($t, $t, $button_ok, $button_cancel); $button_ok->grab_default(); $scrolled = Gtk2::ScrolledWindow->new(undef, undef); $scrolled->set_policy('automatic', 'automatic' ); $scrolled->set_shadow_type('etched-in'); $box->vbox->add($scrolled); $store = Gtk2::ListStore->new('Glib::String'); $list = Gtk2::TreeView->new_with_model ($store); $list->get_selection->set_mode('single'); $scrolled->add_with_viewport($list); $column = Gtk2::TreeViewColumn->new_with_attributes( _("Available CAs"), Gtk2::CellRendererText->new(), 'text' => 0); $list->append_column($column); foreach(@{$self->{'CA'}->{'calist'}}) { next if (not defined $_ ); $iter = $store->append(); $store->set($iter, 0, $_); } # activate doubleclick in the list $list->signal_connect('button_press_event', sub { if($_[1]->type() eq '2button-press') { $iter = $list->get_selection->get_selected(); if($iter) { $name = $store->get($iter); if($action eq 'open') { $opts->{'name'} = $name; $self->{'CA'}->open_ca($self, $opts, $box); }elsif($action eq 'delete') { $self->{'CA'}->delete_ca($self, $name, $box); }else { GUI::HELPERS::print_error( _("Invalid action for show_select_ca_dialog(): ").$action); } } return(1); } return(0); } ); $button_ok->grab_default(); $box->show_all(); } # # get data for creating a new request # sub show_req_dialog { my ($self, $opts) = @_; my ($box, $button_ok, $button_cancel, $reqtable, $radiobox, $key1, $key2, $key3, $key4, $key5, $entry, $label); $button_ok = Gtk2::Button->new_from_stock('gtk-ok'); $button_ok->can_default(1); $button_ok->signal_connect('clicked', sub { $self->{'REQ'}->get_req_create($self, $opts, $box) }); $button_cancel = Gtk2::Button->new_from_stock('gtk-cancel'); $button_cancel->signal_connect('clicked', sub { $box->destroy() }); $box = GUI::HELPERS::dialog_box( _("Create Request"), _("Create a new Certificate Request"), $button_ok, $button_cancel); # table for request data my $cc=0; my $ous = 1; if(defined($opts->{'OU'})) { $ous = @{$opts->{'OU'}} - 1; } $reqtable = Gtk2::Table->new(1, 13 + $ous, 0); $reqtable->set_col_spacing(0, 7); $box->vbox->add($reqtable); $entry = GUI::HELPERS::entry_to_table( _("Common Name (eg, your Name,"), \$opts->{'CN'}, $reqtable, 0, 1); $entry->grab_focus(); $label = GUI::HELPERS::create_label( _("your eMail Address"), 'right', 0, 0); $reqtable->attach_defaults($label, 0, 1, 2, 3); $label = GUI::HELPERS::create_label( _("or the Servers Name)"), 'right', 0, 0); $reqtable->attach_defaults($label, 0, 1, 3, 4); $entry = GUI::HELPERS::entry_to_table( _("eMail Address").":", \$opts->{'EMAIL'}, $reqtable, 4, 1); $entry = GUI::HELPERS::entry_to_table( _("Password (protect your private Key):"), \$opts->{'passwd'}, $reqtable, 5, 0); $entry = GUI::HELPERS::entry_to_table( _("Password (confirmation):"), \$opts->{'passwd2'}, $reqtable, 6, 0); $entry = GUI::HELPERS::entry_to_table( _("Country Name (2 letter code):"), \$opts->{'C'}, $reqtable, 7, 1); $entry = GUI::HELPERS::entry_to_table( _("State or Province Name:"), \$opts->{'ST'}, $reqtable, 8, 1); $entry = GUI::HELPERS::entry_to_table( _("Locality Name (eg. city):"), \$opts->{'L'}, $reqtable, 9, 1); $entry = GUI::HELPERS::entry_to_table( _("Organization Name (eg. company):"), \$opts->{'O'}, $reqtable, 10, 1); if(defined($opts->{'OU'})) { foreach my $ou (@{$opts->{'OU'}}) { $entry = GUI::HELPERS::entry_to_table( _("Organizational Unit Name (eg. section):"), \$ou, $reqtable, 11 + $cc++, 1); } } else { $entry = GUI::HELPERS::entry_to_table( _("Organizational Unit Name (eg. section):"), \$opts->{'OU'}, $reqtable, 11, 1); } $label = GUI::HELPERS::create_label( _("Keylength").":", 'left', 0, 0); $reqtable->attach_defaults($label, 0, 1, 13, 14); $radiobox = Gtk2::HBox->new(0, 0); _fill_radiobox($radiobox, \$opts->{'bits'}, %bit_lengths); $reqtable->attach_defaults($radiobox, 1, 2, 13, 14); $label = GUI::HELPERS::create_label( _("Digest").":", 'left', 0, 0); $reqtable->attach_defaults($label, 0, 1, 15, 16); $radiobox = Gtk2::HBox->new(0, 0); _fill_radiobox($radiobox, \$opts->{'digest'}, %md_algorithms); $reqtable->attach_defaults($radiobox, 1, 2, 15, 16); $label = GUI::HELPERS::create_label(_("Algorithm").":", 'left', 0, 0); $reqtable->attach_defaults($label, 0, 1, 16, 17); $radiobox = Gtk2::HBox->new(0, 0); _fill_radiobox($radiobox, \$opts->{'algo'}, 'rsa' => 'RSA', 'dsa' => 'DSA'); $reqtable->attach_defaults($radiobox, 1, 2, 16, 17); $box->show_all(); return; } # # get data for revoking a certificate # sub show_cert_revoke_dialog { my ($self, $opts) = @_; my ($box, $button_ok, $button_cancel, $table, $entry, $t, $label, $combo, @combostrings); $button_ok = Gtk2::Button->new_from_stock('gtk-ok'); $button_ok->signal_connect('clicked', sub { $self->{'CERT'}->get_revoke_cert($self, $opts, $box) }); $button_cancel = Gtk2::Button->new_from_stock('gtk-cancel'); $button_cancel->signal_connect('clicked', sub { $box->destroy() }); $box = GUI::HELPERS::dialog_box( _("Revoke Certificate"), _("Revoke Certificate"), $button_ok, $button_cancel); # small table for data $table = Gtk2::Table->new(1, 2, 0); $table->set_col_spacing(0, 10); $box->vbox->add($table); $entry = GUI::HELPERS::entry_to_table( _("CA Password:"), \$opts->{'passwd'}, $table, 0, 0); $entry->grab_focus(); if($self->{'OpenSSL'}->{'version'} !~ /^0\.9\.[0-6][a-z]?$/) { # OpenSSL < 0.9.7 was not able to handle revocation reasons $label = GUI::HELPERS::create_label( _("Revocation Reason:"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, 1, 2); $combo = Gtk2::Combo->new(); @combostrings = qw( unspecified keyCompromise CACompromise affiliationChanged superseded cessationOfOperation certificateHold); $combo->set_popdown_strings(@combostrings); $combo->set_use_arrows(1); $combo->set_value_in_list(1, 0); $combo->entry->signal_connect('changed' => sub{GUI::CALLBACK::entry_to_var( $combo, $combo->entry, \$opts->{'reason'}, undef, undef)}); $table->attach_defaults($combo, 1, 2, 1, 2); } $box->show_all(); return; } # # get data for exporting a crl # sub show_crl_export_dialog { my ($self, $opts) = @_; my ($box, $button_ok, $button_cancel, $button, $label, $format1, $format2, $format3, $table, $entry, $fileentry, $hbox); $button_ok = Gtk2::Button->new_from_stock('gtk-save'); $button_ok->signal_connect('clicked' => sub { $self->{'CA'}->export_crl($self, $opts, $box) }); $button_cancel = Gtk2::Button->new_from_stock('gtk-cancel'); $button_cancel->signal_connect('clicked', sub { $box->destroy() }); $box = GUI::HELPERS::dialog_box( _("Export CRL"), _("Export Revocation List to File"), $button_ok, $button_cancel); # small table for file selection $table = Gtk2::Table->new(3, 3, 0); $table->set_col_spacing(0, 10); $box->vbox->add($table); $label = GUI::HELPERS::create_label(_("File:"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, 0, 1); $fileentry = Gtk2::Entry->new(); $table->attach_defaults($fileentry, 1, 2, 0, 1); $fileentry->set_text($opts->{'outfile'}) if(defined($opts->{'outfile'})); $fileentry->signal_connect( 'changed' => sub{GUI::CALLBACK::entry_to_var( $fileentry, $fileentry, \$opts->{'outfile'})}); $fileentry->grab_focus(); $button = Gtk2::Button->new(_("Browse...")); $button->signal_connect('clicked' => sub{GUI::HELPERS::browse_file( _("Export CA Certificate"), $fileentry, 'save')}); $table->attach_defaults($button, 2, 3, 0, 1); $entry = GUI::HELPERS::entry_to_table(_("CA Password:"), \$opts->{'passwd'}, $table, 1, 0); $entry->grab_focus(); $entry = GUI::HELPERS::entry_to_table(_("Valid for (Days):"), \$opts->{'days'}, $table, 2, 1); $label = GUI::HELPERS::create_label( _("Export Format:"), 'left', 0, 0); $box->vbox->add($label); $hbox = Gtk2::HBox->new(0, 0); $box->vbox->add($hbox); $format1 = Gtk2::RadioButton->new(undef, _("PEM")); $format1->set_active(1) if(defined($opts->{'format'}) && $opts->{'format'} eq 'PEM'); $format1->signal_connect('toggled' => sub{GUI::CALLBACK::toggle_to_var($format1, \$opts->{'format'}, 'PEM', \$opts->{'outfile'}, \$opts->{'format'}, $fileentry)}); $hbox->add($format1); $format2 = Gtk2::RadioButton->new($format1, _("DER")); $format2->set_active(1) if(defined($opts->{'format'}) && $opts->{'format'} eq 'DER'); $format2->signal_connect('toggled' => sub{GUI::CALLBACK::toggle_to_var($format2, \$opts->{'format'}, 'DER', \$opts->{'outfile'}, \$opts->{'format'}, $fileentry)}); $hbox->add($format2); $format3 = Gtk2::RadioButton->new($format1, _("TXT")); $format3->set_active(1) if(defined($opts->{'format'}) && $opts->{'format'} eq 'TXT'); $format3->signal_connect('toggled' => sub{ GUI::CALLBACK::toggle_to_var($format3, \$opts->{'format'}, 'TXT', \$opts->{'outfile'}, \$opts->{'format'}, $fileentry)}); $hbox->add($format3); $box->show_all(); return; } # # get data for exporting a ca certificate chain # sub show_ca_chain_export_dialog { my ($self, $opts) = @_; my ($box, $button_ok, $button_cancel, $button, $label, $format1, $format2, $format3, $table, $fileentry, $hbox); $button_ok = Gtk2::Button->new_from_stock('gtk-save'); $button_ok->signal_connect('clicked', sub { $self->{'CA'}->export_ca_chain($self, $opts, $box) }); $button_cancel = Gtk2::Button->new_from_stock('gtk-cancel'); $button_cancel->signal_connect('clicked', sub { $box->destroy() }); $box = GUI::HELPERS::dialog_box( _("Export CA Certificate Chain"), _("Export CA Certificate Chain to File"), $button_ok, $button_cancel); # small table for file selection $table = Gtk2::Table->new(1, 3, 0); $box->vbox->add($table); $label = GUI::HELPERS::create_label(_("File:"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, 0, 1); $fileentry = Gtk2::Entry->new(); $table->attach_defaults($fileentry, 1, 2, 0, 1); $fileentry->set_text($opts->{'outfile'}) if(defined($opts->{'outfile'})); $fileentry->signal_connect( 'changed' => sub { GUI::CALLBACK::entry_to_var( $fileentry, $fileentry, \$opts->{'outfile'}) }); $fileentry->grab_focus(); $button = Gtk2::Button->new(_("Browse...")); $button->signal_connect('clicked' => sub{GUI::HELPERS::browse_file( _("Export CA Certificate Chain"), $fileentry, 'save')}); $table->attach_defaults($button, 2, 3, 0, 1); $box->show_all(); return; } # # get data for exporting a ca certificate # sub show_ca_export_dialog { my ($self, $opts) = @_; my ($box, $button_ok, $button_cancel, $label, $format1, $format2, $format3, $table, $entry, $fileentry, $hbox, $button); $button_ok = Gtk2::Button->new_from_stock('gtk-save'); $button_ok->signal_connect('clicked', sub { $self->{'CA'}->export_ca_cert($self, $opts, $box) }); $button_cancel = Gtk2::Button->new_from_stock('gtk-cancel'); $button_cancel->signal_connect('clicked', sub { $box->destroy() }); $box = GUI::HELPERS::dialog_box( _("Export CA Certificate"), _("Export CA Certificate to File"), $button_ok, $button_cancel); # small table for file selection $table = Gtk2::Table->new(1, 3, 0); $table->set_col_spacing(0, 10); $box->vbox->add($table); $label = GUI::HELPERS::create_label(_("File:"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, 0, 1); $fileentry = Gtk2::Entry->new(); $table->attach_defaults($fileentry, 1, 2, 0, 1); $fileentry->set_text($opts->{'outfile'}) if(defined($opts->{'outfile'})); $fileentry->signal_connect('changed' => sub{GUI::CALLBACK::entry_to_var( $fileentry, $fileentry, \$opts->{'outfile'})}); $fileentry->grab_focus(); $button = Gtk2::Button->new(_("Browse...")); $button->signal_connect('clicked' => sub{GUI::HELPERS::browse_file( _("Export CA Certificate"), $fileentry, 'save')}); $table->attach_defaults($button, 2, 3, 0, 1); $label = GUI::HELPERS::create_label( _("Export Format:"), 'left', 0, 0); $box->vbox->add($label); $hbox = Gtk2::HBox->new(0, 0); $box->vbox->add($hbox); $format1 = Gtk2::RadioButton->new(undef, _("PEM")); $format1->set_active(1) if(defined($opts->{'format'}) && $opts->{'format'} eq 'PEM'); $format1->signal_connect_after('toggled' => sub{GUI::CALLBACK::toggle_to_var($format1, \$opts->{'format'}, 'PEM', \$opts->{'outfile'}, \$opts->{'format'}, $fileentry)}); $hbox->add($format1); $format2 = Gtk2::RadioButton->new($format1, _("DER")); $format2->set_active(1) if(defined($opts->{'format'}) && $opts->{'format'} eq 'DER'); $format2->signal_connect_after('toggled' => sub{GUI::CALLBACK::toggle_to_var($format2, \$opts->{'format'}, 'DER', \$opts->{'outfile'}, \$opts->{'format'}, $fileentry)}); $hbox->add($format2); $format3 = Gtk2::RadioButton->new($format1, _("TXT")); $format3->set_active(1) if(defined($opts->{'format'}) && $opts->{'format'} eq 'TXT'); $format3->signal_connect_after('toggled' => sub{GUI::CALLBACK::toggle_to_var($format3, \$opts->{'format'}, 'TXT', \$opts->{'outfile'}, \$opts->{'format'}, $fileentry)}); $hbox->add($format3); $box->show_all(); return; } # # get password for exporting keys # sub show_key_nopasswd_dialog { my ($self, $opts) = @_; my ($box, $button_ok, $button_cancel, $label, $table, $entry); $button_ok = Gtk2::Button->new_from_stock('gtk-ok'); $button_ok->signal_connect('clicked', sub { $self->{'KEY'}->get_export_key($self, $opts, $box) }); $button_cancel = Gtk2::Button->new_from_stock('gtk-cancel'); $button_cancel->signal_connect('clicked', sub { $box->destroy() }); $box = GUI::HELPERS::dialog_box( _("Export Key without Passphrase"), _("Export Key without Passphrase"), $button_ok, $button_cancel); $label = GUI::HELPERS::create_label( _("I hope you know what you\'re doing?"), 'center', 1, 0); $box->vbox->add($label); $label = GUI::HELPERS::create_label( _("The Key Passphrase is needed for decryption of the Key"), 'center', 1, 0); $box->vbox->add($label); # small table for data $table = Gtk2::Table->new(1, 2, 0); $table->set_col_spacing(0, 10); $box->vbox->add($table); $entry = GUI::HELPERS::entry_to_table(_("Password:"), \$opts->{'passwd'}, $table, 0, 0); $entry->grab_focus(); $box->show_all(); return; } # # get filename for importing a request # sub show_req_import_dialog { my $self = shift; my $opts = {}; my($box, $button_ok, $button_cancel, $button, $entry, $table, $label); $button_ok = Gtk2::Button->new_from_stock('gtk-ok'); $button_ok->signal_connect('clicked', sub { $self->{'REQ'}->get_import_req($self, $opts, $box) }); $button_cancel = Gtk2::Button->new_from_stock('gtk-cancel'); $button_cancel->signal_connect('clicked', sub { $box->destroy() }); $box = GUI::HELPERS::dialog_box( _("Import Request"), _("Import Request from File"), $button_ok, $button_cancel); # small table for data $table = Gtk2::Table->new(2, 3, 0); $table->set_col_spacing(0, 10); $box->vbox->add($table); $label = GUI::HELPERS::create_label(_("File:"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, 0, 1); $entry = Gtk2::Entry->new(); $table->attach_defaults($entry, 1, 2, 0, 1); $entry->signal_connect( 'changed' => sub{ GUI::CALLBACK::entry_to_var($entry, $entry, \$opts->{'infile'})}); $entry->grab_focus(); $button = Gtk2::Button->new(_("Browse...")); $button->signal_connect('clicked' => sub{GUI::HELPERS::browse_file( _("Import Request from File"), $entry, 'open')}); $table->attach_defaults($button, 2, 3, 0, 1); $box->show_all(); return; } # # get data for exporting a certificate # sub show_export_dialog { my ($self, $opts, $mode) = @_; my ($box, $button_ok, $button_cancel, $button, $label, $table, $entry, $fileentry, $format1, $format2, $format3, $format4, $format5, $format6, $passbox, $pass1, $pass2, $title, $text, $t, $incbox, $inc1, $inc2, $fpbox, $incfp1, $incfp2); if($mode eq 'cert') { $title = _("Export Certificate"); } elsif($mode eq 'key') { $title = _("Export Key"); } else { GUI::HELPERS::print_error( _("Invalid mode for show_export_dialog(): ").$mode); return; } $button_ok = Gtk2::Button->new_from_stock('gtk-save'); $button_cancel = Gtk2::Button->new_from_stock('gtk-cancel'); if($mode eq 'cert') { $button_ok->signal_connect('clicked', sub { $self->{'CERT'}->get_export_cert($self, $opts, $box) }); } else { $button_ok->signal_connect('clicked', sub { $self->{'KEY'}->get_export_key($self, $opts, $box) }); } $button_cancel->signal_connect('clicked', sub { $box->destroy() }); if($mode eq 'cert') { $text = _("Export Certificate to File"); } else { $text = _("Export Key to File"); } $box = GUI::HELPERS::dialog_box($title, $text, $button_ok, $button_cancel); # small table for file selection $table = Gtk2::Table->new(1, 3, 0); $table->set_col_spacing(0, 10); $box->vbox->add($table); $label = GUI::HELPERS::create_label(_("File:"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, 0, 1); if($mode eq 'cert') { $t = _("Export Certificate"); }else { $t = _("Export Key"); } $fileentry = Gtk2::Entry->new(); $table->attach_defaults($fileentry, 1, 2, 0, 1); $fileentry->set_text($opts->{'outfile'}) if(defined($opts->{'outfile'})); $fileentry->signal_connect( 'changed', sub{ GUI::CALLBACK::entry_to_var( $fileentry, $fileentry, \$opts->{'outfile'})}); $fileentry->grab_focus(); $button = Gtk2::Button->new(_("Browse...")); $button->signal_connect('clicked' => sub{GUI::HELPERS::browse_file( $t, $fileentry, 'save')}); $table->attach_defaults($button, 2, 3, 0, 1); $label = GUI::HELPERS::create_label( _("Export Format:"), 'center', 0, 0); $box->vbox->add($label); if($mode eq 'cert') { $t = _("PEM (Certificate)"); }else { $t = _("PEM (Key)"); } $format1 = Gtk2::RadioButton->new(undef, $t); $format1->set_active(1) if(defined($opts->{'format'}) && $opts->{'format'} eq 'PEM'); $box->vbox->add($format1); if($mode eq 'cert') { $t = _("DER (Certificate)"); }else { $t = _("DER (Key without Passphrase)"); } $format2 = Gtk2::RadioButton->new($format1, $t); $format2->set_active(1) if(defined($opts->{'format'}) && $opts->{'format'} eq 'DER'); $box->vbox->add($format2); $t = _("PKCS#12 (Certificate & Key)"); $format3 = Gtk2::RadioButton->new($format1, $t); $format3->set_active(1) if(defined($opts->{'format'}) && $opts->{'format'} eq 'P12'); $box->vbox->add($format3); $t = _("Zip (Certificate & Key)"); $format4 = Gtk2::RadioButton->new($format1, $t); $format4->set_active(1) if(defined($opts->{'format'}) && $opts->{'format'} eq 'ZIP'); $box->vbox->add($format4); if(not -x $self->{'init'}->{'zipbin'}) { $format4->set_sensitive(0); } $t = _("Tar (Certificate & Key)"); $format5 = Gtk2::RadioButton->new($format1, $t); $format5->set_active(1) if(defined($opts->{'format'}) && $opts->{'format'} eq 'TAR'); $box->vbox->add($format5); if(not -x $self->{'init'}->{'tarbin'}) { $format5->set_sensitive(0); } if($mode eq 'cert') { $format6 = Gtk2::RadioButton->new( $format1, _("TXT (Certificate)")); $format6->set_active(1) if(defined($opts->{'format'}) && $opts->{'format'} eq 'TXT'); $box->vbox->add($format6); } else { # no password for PEM key $label = GUI::HELPERS::create_label( _("Without Passphrase (PEM/PKCS#12)"), 'left', 0, 0); $box->vbox->add($label); $passbox = Gtk2::HBox->new(0, 0); $box->vbox->add($passbox); $pass1 = Gtk2::RadioButton->new(undef, _("Yes")); $pass1->set_active(1) if(defined($opts->{'nopass'}) && $opts->{'nopass'} == 1); $passbox->add($pass1); $pass2 = Gtk2::RadioButton->new($pass1, _("No")); $pass2->set_active(1) if(defined($opts->{'nopass'}) && $opts->{'nopass'} == 0); $passbox->add($pass2); } # add key/certificate if($mode eq 'cert') { $label = GUI::HELPERS::create_label( _("Include Key (PEM)"), 'left', 0, 0); $box->vbox->add($label); } else { $label = GUI::HELPERS::create_label( _("Include Certificate (PEM)"), 'left', 0, 0); $box->vbox->add($label); } $incbox = Gtk2::HBox->new(0, 0); $box->vbox->add($incbox); $inc1 = Gtk2::RadioButton->new(undef, _("Yes")); $inc1->set_active(1) if(defined($opts->{'include'}) && $opts->{'include'} == 1); $incbox->add($inc1); $inc2 = Gtk2::RadioButton->new($inc1, _("No")); $inc2->set_active(1) if(defined($opts->{'include'}) && $opts->{'include'} == 0); $incbox->add($inc2); # add fingerprint if($mode eq 'cert') { $label = GUI::HELPERS::create_label( _("Include Fingerprint (PEM)"), 'left', 0, 0); $box->vbox->add($label); $fpbox = Gtk2::HBox->new(0, 0); $box->vbox->add($fpbox); $incfp1 = Gtk2::RadioButton->new(undef, _("Yes")); $incfp1->set_active(1) if(defined($opts->{'incfp'}) && $opts->{'incfp'} == 1); $fpbox->add($incfp1); $incfp2 = Gtk2::RadioButton->new($incfp1, _("No")); $incfp2->set_active(1) if(defined($opts->{'incfp'}) && $opts->{'incfp'} == 0); $fpbox->add($incfp2); } if($mode eq 'cert') { $format1->signal_connect('toggled' => sub{ GUI::CALLBACK::toggle_to_var($format1, \$opts->{'format'}, 'PEM', \$opts->{'outfile'}, \$opts->{'format'}, $fileentry)}); $format2->signal_connect('toggled' => sub{ &GUI::CALLBACK::toggle_to_var($format2, \$opts->{'format'}, 'DER', \$opts->{'outfile'}, \$opts->{'format'}, $fileentry)}); $format3->signal_connect('toggled' => sub{ GUI::CALLBACK::toggle_to_var($format3, \$opts->{'format'}, 'P12', \$opts->{'outfile'}, \$opts->{'format'}, $fileentry)}); $format4->signal_connect('toggled' => sub{ GUI::CALLBACK::toggle_to_var($format4, \$opts->{'format'}, 'ZIP', \$opts->{'outfile'}, \$opts->{'format'}, $fileentry)}); $format5->signal_connect('toggled' => sub{ GUI::CALLBACK::toggle_to_var($format5, \$opts->{'format'}, 'TAR', \$opts->{'outfile'}, \$opts->{'format'}, $fileentry)}); $format6->signal_connect('toggled' => sub{ GUI::CALLBACK::toggle_to_var($format6, \$opts->{'format'}, 'TXT', \$opts->{'outfile'}, \$opts->{'format'}, $fileentry)}); $inc1->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var($incfp1, \$opts->{'include'}, 1)}); $inc2->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var($incfp2, \$opts->{'include'}, 0)}); $incfp1->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var($incfp1, \$opts->{'incfp'}, 1)}); $incfp2->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var($incfp2, \$opts->{'incfp'}, 0)}); }else { $format1->signal_connect('toggled' => sub{ GUI::CALLBACK::toggle_to_var($format1, \$opts->{'format'}, 'PEM', \$opts->{'outfile'}, \$opts->{'format'}, $fileentry, $pass1, $pass2)}); $format2->signal_connect('toggled' => sub{ &GUI::CALLBACK::toggle_to_var($format2, \$opts->{'format'}, 'DER', \$opts->{'outfile'}, \$opts->{'format'}, $fileentry, $pass1, $pass2)}); $format3->signal_connect('toggled' => sub{ GUI::CALLBACK::toggle_to_var($format3, \$opts->{'format'}, 'P12', \$opts->{'outfile'}, \$opts->{'format'}, $fileentry, $pass1, $pass2)}); $format4->signal_connect('toggled' => sub{ GUI::CALLBACK::toggle_to_var($format4, \$opts->{'format'}, 'ZIP', \$opts->{'outfile'}, \$opts->{'format'}, $fileentry, $pass1, $pass2)}); $format5->signal_connect('toggled' => sub{ GUI::CALLBACK::toggle_to_var($format5, \$opts->{'format'}, 'TAR', \$opts->{'outfile'}, \$opts->{'format'}, $fileentry, $pass1, $pass2)}); $pass1->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var($pass1, \$opts->{'nopass'}, 1)}); $pass2->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var($pass2, \$opts->{'nopass'}, 0)}); $inc1->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var($inc1, \$opts->{'include'}, 1)}); $inc2->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var($inc2, \$opts->{'include'}, 0)}); } $box->show_all(); return; } # # get export passwd for pkcs#12 # sub show_p12_export_dialog { my ($self, $opts, $mode) = @_; my ($box, $label, $table, $entry, $button_ok, $button_cancel, $radiobox, $includeca1, $includeca2, $passbox, $pass1, $pass2); $button_ok = Gtk2::Button->new_from_stock('gtk-ok'); if($mode eq 'key') { $button_ok->signal_connect('clicked', sub { $self->{'KEY'}->get_export_key($self, $opts, $box) }); } elsif($mode eq 'cert') { $button_ok->signal_connect('clicked', sub { $self->{'CERT'}->get_export_cert($self, $opts, $box) }); } $button_cancel = Gtk2::Button->new_from_stock('gtk-cancel'); $button_cancel->signal_connect('clicked', sub { $box->destroy() }); $box = GUI::HELPERS::dialog_box( _("Export to PKCS#12"), _("Export to PKCS#12"), $button_ok, $button_cancel); # small table for storage name $table = Gtk2::Table->new(2, 2, 0); $box->vbox->add($table); $entry = GUI::HELPERS::entry_to_table(_("Key Password:"), \$opts->{'passwd'}, $table, 0, 0); $entry->grab_focus(); $entry = GUI::HELPERS::entry_to_table(_("Export Password:"), \$opts->{'p12passwd'}, $table, 1, 0); $entry = GUI::HELPERS::entry_to_table(_("Friendly Name:"), \$opts->{'friendlyname'}, $table, 2, 1); $label = GUI::HELPERS::create_label( _("Without Passphrase"), 'left', 0, 0); $box->vbox->add($label); $passbox = Gtk2::HBox->new(0, 0); $box->vbox->add($passbox); $pass1 = Gtk2::RadioButton->new(undef, _("Yes")); $pass1->signal_connect_after('toggled' => sub { GUI::CALLBACK::toggle_to_var( $pass1, \$opts->{'nopass'}, 1) }); $passbox->add($pass1); $pass2 = Gtk2::RadioButton->new($pass1, _("No")); $pass2->signal_connect_after('toggled' => sub { GUI::CALLBACK::toggle_to_var( $pass2, \$opts->{'nopass'}, 0) }); $passbox->add($pass2); if((defined($opts->{'nopass'})) && ($opts->{'nopass'} == 1)) { $pass1->set_active(1); } else { $pass2->set_active(1); } $label = GUI::HELPERS::create_label( _("Add CA Certificate to PKCS#12 structure"), 'left', 0, 0); $box->vbox->add($label); $radiobox = Gtk2::HBox->new(0, 0); $box->vbox->add($radiobox); $includeca1 = Gtk2::RadioButton->new(undef, _("Yes")); $includeca1->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var( $includeca1, \$opts->{'includeca'}, 1) }); $radiobox->add($includeca1); $includeca2 = Gtk2::RadioButton->new($includeca1, _("No")); $includeca2->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var( $includeca2, \$opts->{'includeca'}, 0) }); $radiobox->add($includeca2); if(defined($opts->{'includeca'}) && $opts->{'includeca'} == 1) { $includeca1->set_active(1); } else { $includeca2->set_active(1); } $box->show_all(); return; } # # get data for signing a request # sub show_req_sign_dialog { my ($self, $opts) = @_; my($box, $button_ok, $button_cancel, $entry, $table, $t, $rows, $key1, $key2, $radiobox, $label); $rows = 0; $button_ok = Gtk2::Button->new_from_stock('gtk-ok'); $button_ok->signal_connect('clicked', sub { $self->{'REQ'}->get_sign_req($self, $opts, $box) }); $button_cancel = Gtk2::Button->new_from_stock('gtk-cancel'); $button_cancel->signal_connect('clicked', sub { $box->destroy() }); $box = GUI::HELPERS::dialog_box( _("Sign Request"), _("Sign Request/Create Certificate"), $button_ok, $button_cancel); # small table for data $table = Gtk2::Table->new(2, 2, 0); $table->set_col_spacing(0, 10); $box->vbox->add($table); $entry = GUI::HELPERS::entry_to_table(_("CA Password:"), \$opts->{'passwd'}, $table, $rows, 0); $rows++; $entry->grab_focus(); $entry = GUI::HELPERS::entry_to_table(_("Valid for (Days):"), \$opts->{'days'}, $table, $rows, 1); $rows++; # print STDERR "DEBUG: got type: $opts->{'type'}\n"; if($opts->{'type'} eq 'server') { if(defined($self->{'TCONFIG'}->{'server_cert'}->{'subjectAltName'}) && $self->{'TCONFIG'}->{'server_cert'}->{'subjectAltName'} eq 'user') { if($self->{'TCONFIG'}->{'server_cert'}->{'subjectAltNameType'} eq 'ip'){ $t = _("Subject alternative name (IP Address):"); }elsif($self->{TCONFIG}->{'server_cert'}->{'subjectAltNameType'} eq 'dns'){ $t = _("Subject alternative name (DNS Name):"); }elsif($self->{TCONFIG}->{'server_cert'}->{'subjectAltNameType'} eq 'raw'){ $t = _("Subject alternative name (raw):"); } $entry = GUI::HELPERS::entry_to_table($t, \$opts->{'subjectAltName'}, $table, $rows, 1); $rows++; } if(defined($self->{'TCONFIG'}->{'server_cert'}->{'extendedKeyUsage'}) && $self->{'TCONFIG'}->{'server_cert'}->{'extendedKeyUsage'} eq 'user') { $t = _("Extended Key Usage:"); $entry = GUI::HELPERS::entry_to_table($t, \$opts->{'extendedKeyUsage'}, $table, $rows, 1); $rows++; } if(defined($self->{'TCONFIG'}->{'server_cert'}->{'nsSslServerName'}) && $self->{'TCONFIG'}->{'server_cert'}->{'nsSslServerName'} eq 'user') { $t = _("Netscape SSL Server Name:"); $entry = GUI::HELPERS::entry_to_table($t, \$opts->{'nsSslServerName'}, $table, $rows, 1); $rows++; } if(defined($self->{'TCONFIG'}->{'server_cert'}->{'nsRevocationUrl'}) && $self->{'TCONFIG'}->{'server_cert'}->{'nsRevocationUrl'} eq 'user') { $t = _("Netscape Revocation URL:"); $entry = GUI::HELPERS::entry_to_table($t, \$opts->{'nsRevocationUrl'}, $table, $rows, 1); $rows++; } if(defined($self->{'TCONFIG'}->{'server_cert'}->{'nsRenewalUrl'}) && $self->{'TCONFIG'}->{'server_cert'}->{'nsRenewalUrl'} eq 'user') { $t = _("Netscape Renewal URL:"); $entry = GUI::HELPERS::entry_to_table($t, \$opts->{'nsRenewalUrl'}, $table, $rows, 1); $rows++; } }elsif($opts->{'type'} eq 'client') { if(defined($self->{'TCONFIG'}->{'client_cert'}->{'subjectAltName'}) && $self->{'TCONFIG'}->{'client_cert'}->{'subjectAltName'} eq 'user') { if($self->{'TCONFIG'}->{'client_cert'}->{'subjectAltNameType'} eq 'ip'){ $t = _("Subject alternative name (IP Address):"); }elsif($self->{TCONFIG}->{'client_cert'}->{'subjectAltNameType'} eq 'dns'){ $t = _("Subject alternative name (DNS Name):"); }elsif($self->{TCONFIG}->{'client_cert'}->{'subjectAltNameType'} eq 'mail'){ $t = _("Subject alternative name (eMail Address):"); }elsif($self->{TCONFIG}->{'client_cert'}->{'subjectAltNameType'} eq 'raw'){ $t = _("Subject alternative name (raw):"); } $entry = GUI::HELPERS::entry_to_table($t, \$opts->{'subjectAltName'}, $table, $rows, 1); $rows++; } if(defined($self->{'TCONFIG'}->{'client_cert'}->{'extendedKeyUsage'}) && $self->{'TCONFIG'}->{'client_cert'}->{'extendedKeyUsage'} eq 'user') { $t = _("Extended Key Usage:"); $entry = GUI::HELPERS::entry_to_table($t, \$opts->{'extendedKeyUsage'}, $table, $rows, 1); $rows++; } if(defined($self->{'TCONFIG'}->{'client_cert'}->{'nsRevocationUrl'}) && $self->{'TCONFIG'}->{'client_cert'}->{'nsRevocationUrl'} eq 'user') { $t = _("Netscape Revocation URL:"); $entry = GUI::HELPERS::entry_to_table($t, \$opts->{'nsRevocationUrl'}, $table, $rows, 1); $rows++; } if(defined($self->{'TCONFIG'}->{'client_cert'}->{'nsRenewalUrl'}) && $self->{'TCONFIG'}->{'client_cert'}->{'nsRenewalUrl'} eq 'user') { $t = _("Netscape Renewal URL:"); $entry = GUI::HELPERS::entry_to_table($t, \$opts->{'nsRenewalUrl'}, $table, $rows, 1); $rows++; } } # OpenSSL < 0.9.7 was not able to dynamically handle mailadresses in DNs if($self->{'OpenSSL'}->{'version'} !~ /^0\.9\.[0-6][a-z]?$/) { $radiobox = Gtk2::HBox->new(0, 0); $key1 = Gtk2::RadioButton->new(undef, _("Yes")); $key1->set_active(1); $key1->signal_connect('toggled' => sub{GUI::CALLBACK::toggle_to_var($key1, \$opts->{'noemaildn'}, 0)}); $radiobox->add($key1); $key2 = Gtk2::RadioButton->new($key1, _("No")); $key2->signal_connect('toggled' => sub{GUI::CALLBACK::toggle_to_var($key2, \$opts->{'noemaildn'}, 1)}); $radiobox->add($key2); $label = GUI::HELPERS::create_label( _("Add eMail Address to Subject DN:"), 'left', 0, 0); $table->attach_defaults($label, 0, 1, $rows, $rows+1); $table->attach_defaults($radiobox, 1, 2, $rows, $rows+1); } $box->show_all(); return; } # # get data for creating a new CA # sub show_ca_dialog { my ($self, $opts, $mode) = @_; my ($box, $button_ok, $button_cancel, $label, $table, $entry, $catable, $pwtable, $radiobox, $key1, $key2, $key3, $key4, $key5); $button_ok = Gtk2::Button->new_from_stock('gtk-ok'); $button_ok->can_default(1); $button_ok->signal_connect('clicked', sub { $self->{'CA'}->get_ca_create($self, $opts, $box, $mode) }); $button_cancel = Gtk2::Button->new_from_stock('gtk-cancel'); $button_cancel->signal_connect('clicked', sub { $box->destroy() }); if(defined($mode) && $mode eq "sub") { $box = GUI::HELPERS::dialog_box( _("Create CA"), _("Create a new Sub CA"), $button_ok, $button_cancel); } else { $box = GUI::HELPERS::dialog_box( _("Create CA"), _("Create a new CA"), $button_ok, $button_cancel); } $button_ok->grab_default(); if(defined($mode) && $mode eq "sub") { # small table for ca-password $pwtable = Gtk2::Table->new(1, 2, 0); $pwtable->set_col_spacing(0, 10); $box->vbox->add($pwtable); $entry = GUI::HELPERS::entry_to_table( _("CA Password (for creating the new CA):"), \$opts->{'parentpw'}, $pwtable, 0, 0); $entry->grab_focus(); } # small table for storage name $table = Gtk2::Table->new(1, 2, 0); $table->set_col_spacing(0, 10); $box->vbox->add($table); $entry = GUI::HELPERS::entry_to_table( _("Name (for local storage):"), \$opts->{'name'}, $table, 0, 1); if(not defined($mode)) { $entry->grab_focus(); } $label = GUI::HELPERS::create_label( _("Data for CA Certificate"), 'left', 0, 0); $box->vbox->add($label); # table for ca data $catable = Gtk2::Table->new(1, 13, 0); $catable->set_col_spacing(0, 10); $box->vbox->add($catable); $entry = GUI::HELPERS::entry_to_table( _("Common Name (for the CA):"), \$opts->{'CN'}, $catable, 0, 1); $entry = GUI::HELPERS::entry_to_table( _("Country Name (2 letter code):"), \$opts->{'C'}, $catable, 1, 1); $entry = GUI::HELPERS::entry_to_table( _("Password (needed for signing):"), \$opts->{'passwd'}, $catable, 2, 0); $entry = GUI::HELPERS::entry_to_table( _("Password (confirmation):"), \$opts->{'passwd2'}, $catable, 3, 0); $entry = GUI::HELPERS::entry_to_table( _("State or Province Name:"), \$opts->{'ST'}, $catable, 4, 1); $entry = GUI::HELPERS::entry_to_table( _("Locality Name (eg. city):"), \$opts->{'L'}, $catable, 5, 1); $entry = GUI::HELPERS::entry_to_table( _("Organization Name (eg. company):"), \$opts->{'O'}, $catable, 6, 1); $entry = GUI::HELPERS::entry_to_table( _("Organizational Unit Name (eg. section):"), \$opts->{'OU'}->[0], $catable, 7, 1); $entry = GUI::HELPERS::entry_to_table( _("eMail Address").":", \$opts->{'EMAIL'}, $catable, 8, 1); $entry = GUI::HELPERS::entry_to_table( _("Valid for (Days):"), \$opts->{'days'}, $catable, 9, 1); $label = GUI::HELPERS::create_label( _("Keylength").":", 'left', 0, 0); $catable->attach_defaults($label, 0, 1, 10, 11); $radiobox = Gtk2::HBox->new(0, 0); $key1 = Gtk2::RadioButton->new(undef, '1024'); $key1->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var($key1, \$opts->{'bits'}, 1024)}); $radiobox->add($key1); $key2 = Gtk2::RadioButton->new($key1, '2048'); $key2->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var($key2, \$opts->{'bits'}, 2048)}); $radiobox->add($key2); $key3 = Gtk2::RadioButton->new($key1, '4096'); $key3->signal_connect('toggled' => sub { GUI::CALLBACK::toggle_to_var($key3, \$opts->{'bits'}, 4096)}); $radiobox->add($key3); # set default if(defined($opts->{'bits'}) && $opts->{'bits'} == 1024) { $key1->set_active(1); } elsif (defined($opts->{'bits'}) && $opts->{'bits'} == 2048) { $key2->set_active(1); } elsif (defined($opts->{'bits'}) && $opts->{'bits'} == 4096) { $key3->set_active(1); } $catable->attach_defaults($radiobox, 1, 2, 10, 11); $label = GUI::HELPERS::create_label(_("Digest").":", 'left', 0, 0); $catable->attach_defaults($label, 0, 1, 15, 16); $radiobox = Gtk2::HBox->new(0, 0); &_fill_radiobox($radiobox, \$opts->{'digest'}, %md_algorithms); $catable->attach_defaults($radiobox, 1, 2, 15, 16); $box->show_all(); return; } # # get data for importing a new CA # sub show_ca_import_dialog { my ($self, $opts) = @_; my ($box, $button, $button_ok, $button_cancel, $label, $table, $filetable, $pwtable, $entry, $certentry, $keyentry, $direntry, $indexentry); $button_ok = Gtk2::Button->new_from_stock('gtk-ok'); $button_ok->can_default(1); $button_ok->signal_connect('clicked', sub { $self->{'CA'}->get_ca_import($self, $opts, $box) }); $button_cancel = Gtk2::Button->new_from_stock('gtk-cancel'); $button_cancel->signal_connect('clicked', sub { $box->destroy() }); $box = GUI::HELPERS::dialog_box( _("Import CA"), _("Import an existing CA into TinyCA"), $button_ok, $button_cancel); $button_ok->grab_default(); # small table for old ca-password $pwtable = Gtk2::Table->new(1, 2, 0); $pwtable->set_col_spacing(0, 10); $box->vbox->add($pwtable); $entry = GUI::HELPERS::entry_to_table( _("Password of the private CA key (Needed for import):"), \$opts->{'passwd'}, $pwtable, 0, 0); $entry->grab_focus(); # small table for storage name and new passwords $table = Gtk2::Table->new(1, 2, 0); $table->set_col_spacing(0, 10); $box->vbox->add($table); $entry = GUI::HELPERS::entry_to_table( _("Name (for local storage):"), \$opts->{'name'}, $table, 0, 1); $entry = GUI::HELPERS::entry_to_table( _("New password for the CA:"), \$opts->{'newpasswd'}, $table, 1, 0); $entry = GUI::HELPERS::entry_to_table( _("Confirm password:"), \$opts->{'newpasswd2'}, $table, 2, 0); # table for file selection dialogs $label = GUI::HELPERS::create_label( _("Files/Directories to import"), 'center', 0, 1); $box->vbox->add($label); $filetable = Gtk2::Table->new(1, 3, 0); $box->vbox->add($filetable); # CA certificate $label = GUI::HELPERS::create_label( _("CA Certificate (PEM/DER):"), 'left', 0, 0); $filetable->attach_defaults($label, 0, 1, 0, 1); $certentry = Gtk2::Entry->new(); $filetable->attach_defaults($certentry, 1, 2, 0, 1); $certentry->set_text($opts->{'cacertfile'}) if(defined($opts->{'cacertfile'})); $certentry->signal_connect( 'changed' => sub { GUI::CALLBACK::entry_to_var( $certentry, $certentry, \$opts->{'cacertfile'}) }); $button = Gtk2::Button->new(_("Browse...")); $button->signal_connect('clicked' => sub{ GUI::HELPERS::browse_file( _("Import CA Certificate"), $certentry, 'open') }); $filetable->attach_defaults($button, 2, 3, 0, 1); # CA private key $label = GUI::HELPERS::create_label( _("CA private key (PEM/DER):"), 'left', 0, 0); $filetable->attach_defaults($label, 0, 1, 1, 2); $keyentry = Gtk2::Entry->new(); $filetable->attach_defaults($keyentry, 1, 2, 1, 2); $keyentry->set_text($opts->{'cakeyfile'}) if(defined($opts->{'cakeyfile'})); $keyentry->signal_connect( 'changed' => sub { GUI::CALLBACK::entry_to_var( $keyentry, $keyentry, \$opts->{'cakeyfile'}) }); $button = Gtk2::Button->new(_("Browse...")); $button->signal_connect('clicked' => sub{ GUI::HELPERS::browse_file( _("Import CA private Key"), $keyentry, 'open') }); $filetable->attach_defaults($button, 2, 3, 1, 2); # Index file $label = GUI::HELPERS::create_label( _("OpenSSL Index File (index.txt):"), 'left', 0, 0); $filetable->attach_defaults($label, 0, 1, 2, 3); $indexentry = Gtk2::Entry->new(); $filetable->attach_defaults($indexentry, 1, 2, 2, 3); $indexentry->set_text($opts->{'indexfile'}) if(defined($opts->{'indexfile'})); $indexentry->signal_connect( 'changed' => sub { GUI::CALLBACK::entry_to_var( $indexentry, $indexentry, \$opts->{'indexfile'}) }); $button = Gtk2::Button->new(_("Browse...")); $button->signal_connect('clicked' => sub{ GUI::HELPERS::browse_file( _("Import Index File"), $indexentry, 'open') }); $filetable->attach_defaults($button, 2, 3, 2, 3); # certificate directory $label = GUI::HELPERS::create_label( _("Directory containing certificates (PEM/DER):"), 'left', 0, 0); $filetable->attach_defaults($label, 0, 1, 3, 4); $direntry = Gtk2::Entry->new(); $filetable->attach_defaults($direntry, 1, 2, 3, 4); $direntry->set_text($opts->{'certdir'}) if(defined($opts->{'certdir'})); $direntry->signal_connect( 'changed' => sub { GUI::CALLBACK::entry_to_var( $direntry, $direntry, \$opts->{'certdir'}) }); $button = Gtk2::Button->new(_("Browse...")); $button->signal_connect('clicked' => sub{ GUI::HELPERS::browse_file( _("Import Certificates from directory"), $direntry, 'open') }); $filetable->attach_defaults($button, 2, 3, 3, 4); $box->show_all(); return; } # # subroutines for pop-up boxes # sub show_help { my $self = shift; GUI::HELPERS::print_info(_("You are kidding, are you??")); return; } # # About dialog # sub about { my $self = shift; my $main = shift; my ($aboutdialog, $href, $label); $aboutdialog = Gtk2::AboutDialog->new(); $aboutdialog->set_name("TinyCA2"); $aboutdialog->set_version($main->{'version'}); $aboutdialog->set_copyright("2002-2006 Stephan Martin"); $aboutdialog->set_license("GNU Public License (GPL)"); $aboutdialog->set_website("http://tinyca.sm-zone.net/"); $aboutdialog->set_authors("Stephan Martin "); $aboutdialog->set_translator_credits( _("Czech: Robert Wolf ")."\n". _("Swedish: Daniel Nylander ")."\n". _("Spanish: Ramon Pons Vivanco ")."\n". _("French: Thibault Le Meur ")); $aboutdialog->show_all(); return; } # # get confirmation for deleting a request # sub show_del_confirm { my ($self, $file, $type) = @_; my($t, $button_ok, $button_cancel, $box); if($type eq 'req') { $t = _("Do you really want to delete the selected Request?"); }elsif($type eq 'key') { $t = _("Do you really want to delete the selected Key?"); }elsif($type eq 'cert') { $t = _("Do you really want to delete the selected Certificate?"); }else{ GUI::HELPERS::print_error("Invalid type in show_del_confirm(): ".$type); } $button_ok = Gtk2::Button->new_from_stock('gtk-ok'); if($type eq 'req') { $button_ok->signal_connect('clicked', sub { $self->{'REQ'}->del_req($self, $file); $box->destroy() }); }elsif($type eq 'key') { $button_ok->signal_connect('clicked', sub { $self->{'KEY'}->del_key($self, $file); $box->destroy() }); }elsif($type eq 'cert') { $button_ok->signal_connect('clicked', sub { $self->{'CERT'}->del_cert($self, $file); $box->destroy() }); } $button_cancel = Gtk2::Button->new_from_stock('gtk-cancel'); $button_cancel->signal_connect('clicked', sub { $box->destroy(); return }); $box = Gtk2::MessageDialog->new( undef, [qw/destroy-with-parent modal/], 'question', 'none', $t); $box->add_action_widget($button_ok, 0); $box->add_action_widget($button_cancel, 1); $box->show_all(); } # # show warning - overwrite key # sub show_req_overwrite_warning { my ($self, $opts) = @_; my ($box, $actionarea, $button_ok, $button_cancel, $label); $button_ok = Gtk2::Button->new_from_stock('gtk-ok'); $button_ok->signal_connect('clicked' => sub { $self->{'REQ'}->create_req($self, $opts); $box->destroy() }); $button_cancel = Gtk2::Button->new_from_stock('gtk-cancel'); $button_cancel->can_default(1); $button_cancel->signal_connect('clicked', sub { $box->destroy() }); $box = GUI::HELPERS::dialog_box( _("Overwrite Request/Key"), _("Overwrite Request/Key"), $button_ok, $button_cancel); $button_cancel->grab_default(); $label = GUI::HELPERS::create_label( _("The Key or the Request is already existing!"), 'center', 1, 0); $box->vbox->add($label); $label = GUI::HELPERS::create_label( _("You won't be able to sign this Request"), 'center', 1, 0); $box->vbox->add($label); $label = GUI::HELPERS::create_label( _("if the corresponding certificate is still valid"), 'center', 1, 0); $box->vbox->add($label); $box->show_all(); return; } # # show warning - certificate expiration date # sub show_req_date_warning { my ($self, $opts) = @_; my ($box, $button_ok, $button_cancel, $t); $t = _("The Certificate will be longer valid than your CA!"); $t .= "\n"; $t .= _("This may cause problems with some software!!"); $button_ok = Gtk2::Button->new_from_stock('gtk-ok'); $button_ok->signal_connect('clicked', sub { $opts->{'ignoredate'} = 'true'; $self->{'REQ'}->get_sign_req($self, $opts, $box); }); $button_cancel = Gtk2::Button->new_from_stock('gtk-cancel'); $button_cancel->signal_connect('clicked', sub { $self->show_req_sign_dialog($opts); $box->destroy(); }); $button_cancel->can_default(1); $box = GUI::HELPERS::dialog_box( _("Expirationdate Warning"), $t, $button_ok, $button_cancel); $button_cancel->grab_default(); $box->show_all(); } # # show CA history # sub show_history { my $self = shift; my ($box, $button_ok, @index, $list, $list_scrolled, $store, @titles, $column, $t, $iter, $dn, $state, $expdate, $revdate, $renderer); @index = $self->{'OpenSSL'}->read_index($self->{'CA'}->{'cadir'}."/index.txt"); $list_scrolled = Gtk2::ScrolledWindow->new(undef, undef); $list_scrolled->set_policy('automatic', 'automatic'); $list_scrolled->set_shadow_type('etched-in'); $store = Gtk2::ListStore->new( 'Glib::String', # common name 'Glib::String', # status 'Glib::String', # serial 'Glib::String', # expiration 'Glib::String', # revocation 'Glib::String' # reason ); $list = Gtk2::TreeView->new_with_model($store); $list->get_selection->set_mode('none'); @titles = ( _("Serial"), _("Common Name"), _("Status"), _("Expiration Date"), _("Revocation Date"), _("Revocation Reason") ); for (my $i = 0; $titles[$i]; $i++) { $renderer = Gtk2::CellRendererText->new(); $column = Gtk2::TreeViewColumn->new_with_attributes( $titles[$i], $renderer, 'text' => $i); $column->set_sort_column_id($i); $column->set_resizable(1); if ($i == 2) { $column->set_cell_data_func ($renderer, sub { my ($column, $cell, $model, $iter) = @_; my $text = $model->get($iter, 2); my $color = $text eq _("VALID")?'green':'red'; $cell->set (text => $text, foreground => $color); }); } $list->append_column($column); } foreach my $tmp (@index) { $iter = $store->append(); $dn = HELPERS::parse_dn($tmp->{'DN'}); if($tmp->{'STATUS'} eq 'V') { $state = _("VALID"); } elsif($tmp->{'STATUS'} eq 'E') { $state = _("EXPIRED"); } elsif($tmp->{'STATUS'} eq 'R') { $state = _("REVOKED"); } $expdate = strftime("%F", localtime($tmp->{'EXPDATE'})); if(defined($tmp->{'REVDATE'})) { $revdate = strftime("%F", localtime($tmp->{'REVDATE'})); } $store->set($iter, 0 => $tmp->{'SERIAL'}, 1 => $dn->{'CN'}, 2 => $state, 3 => $expdate, 4 => $revdate, 5 => $tmp->{'REVREASON'} ); } $list_scrolled->add_with_viewport($list); $t = _("CA History"); $button_ok = Gtk2::Button->new_from_stock('gtk-ok'); $button_ok->can_default(1); $button_ok->signal_connect('clicked', sub { $box->destroy() }); $box = GUI::HELPERS::dialog_box($t, $t, $button_ok); $box->set_default_size(700, 400); $button_ok->grab_default(); $box->vbox->add($list_scrolled); $box->show_all(); } # # get confirmation for overwriting certificate # sub show_cert_overwrite_confirm { my ($self, $opts) = @_; my($box, $button_ok, $button_cancel, $label); $button_ok = Gtk2::Button->new_from_stock('gtk-ok'); $button_ok->signal_connect('clicked', sub { $opts->{'overwrite'} = 'true'; $self->{'REQ'}->get_sign_req($self, $opts, $box) }); $button_cancel = Gtk2::Button->new_from_stock('gtk-cancel'); $button_cancel->can_default(1); $button_cancel->signal_connect('clicked', sub { $box->destroy() }); $box = GUI::HELPERS::dialog_box( _("Overwrite Certificate"), _("Overwrite Certificate"), $button_ok, $button_cancel); $button_cancel->grab_default(); $label = GUI::HELPERS::create_label( _("There seems to be a certificate with the same Subject already."), 'center', 1, 0); $box->vbox->add($label); $label = GUI::HELPERS::create_label( _("Creating a new one (overwrite) will fail if it\'s not revoked or expired!"), 'center', 1, 0); $box->vbox->add($label); $label = GUI::HELPERS::create_label( _("Really try to overwrite the Certificate?"), 'center', 1, 0); $box->vbox->add($label); $box->show_all(); return; } # # ask if the CA shall be converted # sub show_ca_convert_dialog { my ($self, $opts) = @_; my($box, $label, $button_ok, $button_cancel, $t); $button_ok = Gtk2::Button->new_from_stock('gtk-ok'); $button_ok->signal_connect('clicked', sub { $opts->{'doconv'} = 1; $self->{'CA'}->open_ca($self, $opts, $box) } ); $button_ok->can_default(1); $button_cancel = Gtk2::Button->new_from_stock('gtk-cancel'); $button_cancel->signal_connect('clicked', sub { $opts->{'noconv'} = 1; $self->{'CA'}->open_ca($self, $opts, $box) } ); $box = GUI::HELPERS::dialog_box( _("Convert CA"), _("Convert CA"), $button_ok, $button_cancel); $button_ok->grab_default(); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $box->vbox->pack_start($label, 0, 0, 0); $t = _("This CA seems to be created with openssl 0.9.6x. And it seems like you have switched to openssl 0.9.7x."); $label = GUI::HELPERS::create_label($t, 'center', 1, 0); $box->vbox->add($label); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $box->vbox->pack_start($label, 0, 0, 0); $t = _("You won't be able to revoke the existing certificates without converting the index file of this CA to the new format."); $label = GUI::HELPERS::create_label($t, 'center', 1, 0); $box->vbox->add($label); $label = GUI::HELPERS::create_label(' ', 'center', 0, 0); $box->vbox->pack_start($label, 0, 0, 0); $t = _("Attention: it will not be easy to switch back, this has to be done manually"); $label = GUI::HELPERS::create_label($t, 'center', 1, 0); $box->vbox->add($label); $box->show_all(); return; } # # create popup menu for keys # sub _create_key_menu { my $self = shift; my ($item, $image); $self->{'keymenu'} = Gtk2::Menu->new(); $item = Gtk2::ImageMenuItem->new( _("Export Key")); $item->signal_connect(activate => sub { $self->{'KEY'}->get_export_key($self) }); $image = Gtk2::Image->new_from_stock('gtk-save', 'menu'); $item->set_image($image); $self->{'keymenu'}->insert($item, -1); $item = Gtk2::ImageMenuItem->new( _("Delete Key")); $item->signal_connect(activate => sub { $self->{'KEY'}->get_del_key($self) }); $image = Gtk2::Image->new_from_stock('gtk-delete', 'menu'); $item->set_image($image); $self->{'keymenu'}->insert($item, -1); $self->{'keymenu'}->show_all(); return; } # # create popup menus for certificates # sub _create_cert_menu { my $self = shift; my ($item, $image); $self->{'certmenu'} = Gtk2::Menu->new(); $item = Gtk2::ImageMenuItem->new( _("Certificate Details")); $item->signal_connect(activate => sub { $self->show_details('cert') }); $image = Gtk2::Image->new_from_stock('gtk-new', 'menu'); $item->set_image($image); $self->{'certmenu'}->insert($item, -1); $item = Gtk2::ImageMenuItem->new( _("View Certificate")); $item->signal_connect(activate => sub { $self->show_text('cert') }); $image = Gtk2::Image->new_from_stock('gtk-find', 'menu'); $item->set_image($image); $self->{'certmenu'}->insert($item, -1); $item = Gtk2::ImageMenuItem->new( _("Export Certificate")); $item->signal_connect(activate => sub { $self->{'CERT'}->get_export_cert($self) }); $image = Gtk2::Image->new_from_stock('gtk-save', 'menu'); $item->set_image($image); $self->{'certmenu'}->insert($item, -1); $item = Gtk2::ImageMenuItem->new( _("Revoke Certificate")); $item->signal_connect(activate => sub { $self->{'CERT'}->get_revoke_cert($self) }); $image = Gtk2::Image->new_from_stock('gtk-stop', 'menu'); $item->set_image($image); $self->{'certmenu'}->insert($item, -1); $item = Gtk2::ImageMenuItem->new( _("Renew Certificate")); $item->signal_connect(activate => sub { $self->{'renewcertmenu'}->popup( undef, undef, undef, undef, 1, 0) }); $image = Gtk2::Image->new_from_stock('gtk-refresh', 'menu'); $item->set_image($image); $self->{'certmenu'}->insert($item, -1); $item = Gtk2::ImageMenuItem->new( _("Delete Certificate")); $item->signal_connect(activate => sub { $self->{'CERT'}->get_del_cert($self) }); $image = Gtk2::Image->new_from_stock('gtk-delete', 'menu'); $item->set_image($image); $self->{'certmenu'}->insert($item, -1); $self->{'certmenu'}->show_all(); return; } # # create popup menus for creating certificates # sub _create_create_cert_menu { my $self = shift; my ($item); $self->{'newcertmenu'} = Gtk2::Menu->new(); $item = Gtk2::MenuItem->new( _("Create Key and Certificate (Server)")); $item->signal_connect(activate => sub { $self->{'REQ'}->get_req_create($self, "signserver") }); $self->{'newcertmenu'}->insert($item, 0); $item = Gtk2::MenuItem->new( _("Create Key and Certificate (Client)")); $item->signal_connect(activate => sub { $self->{'REQ'}->get_req_create($self, "signclient") }); $self->{'newcertmenu'}->insert($item, 1); $self->{'newcertmenu'}->show_all(); return; } # # create popup menus for sign request button # sub _create_renew_cert_menu { my $self = shift; my ($item, $opts); $self->{'renewcertmenu'} = Gtk2::Menu->new(); $item = Gtk2::MenuItem->new( _("Renew Certificate (Server)")); $item->signal_connect(activate => sub { $opts->{'type'} = 'server'; $self->{'CERT'}->get_renew_cert($self, $opts) }); $self->{'renewcertmenu'}->insert($item, 0); $item = Gtk2::MenuItem->new( _("Renew Certificate (Client)")); $item->signal_connect(activate => sub { $opts->{'type'} = 'client'; $self->{'CERT'}->get_renew_cert($self, $opts) }); $self->{'renewcertmenu'}->insert($item, 1); $self->{'renewcertmenu'}->show_all(); return; } # # create popup menus for sign request button # sub _create_sign_req_menu { my $self = shift; my ($item, $opts); $self->{'reqsignmenu'} = Gtk2::Menu->new(); $item = Gtk2::MenuItem->new( _("Sign Request (Server)")); $item->signal_connect(activate => sub { $opts->{'type'} = 'server'; $self->{'REQ'}->get_sign_req($self, $opts) }); $self->{'reqsignmenu'}->insert($item, 0); $item = Gtk2::MenuItem->new( _("Sign Request (Client)")); $item->signal_connect(activate => sub { $opts->{'type'} = 'client'; $self->{'REQ'}->get_sign_req($self, $opts) }); $self->{'reqsignmenu'}->insert($item, 1); $self->{'reqsignmenu'}->show_all(); return; } # # create popup menus for requests # sub _create_req_menu { my $self = shift; my ($item, $opts, $image); $self->{'reqmenu'} = Gtk2::Menu->new(); $item = Gtk2::ImageMenuItem->new( _("Request Details")); $item->signal_connect(activate => sub { $self->show_details('req') }); $image = Gtk2::Image->new_from_stock('gtk-find', 'menu'); $item->set_image($image); $self->{'reqmenu'}->insert($item, -1); $item = Gtk2::ImageMenuItem->new( _("View Request")); $item->signal_connect(activate => sub { $self->show_text('req') }); $image = Gtk2::Image->new_from_stock('gtk-find', 'menu'); $item->set_image($image); $self->{'reqmenu'}->insert($item, -1); $item = Gtk2::ImageMenuItem->new( _("New Request")); $item->signal_connect(activate => sub { $self->{'REQ'}->get_req_create($self) }); $image = Gtk2::Image->new_from_stock('gtk-new', 'menu'); $item->set_image($image); $self->{'reqmenu'}->insert($item, -1); $item = Gtk2::ImageMenuItem->new( _("Import Request")); $item->signal_connect(activate => sub { $self->{'REQ'}->get_import_req($self) }); $image = Gtk2::Image->new_from_stock('gtk-revert-to-saved', 'menu'); $item->set_image($image); $self->{'reqmenu'}->insert($item, -1); $item = Gtk2::ImageMenuItem->new( _("Sign Request")); $item->signal_connect(activate => sub { $self->{'reqsignmenu'}->popup( undef, undef, undef, undef, 1, 0) }); $image = Gtk2::Image->new_from_stock('gtk-properties', 'menu'); $item->set_image($image); $self->{'reqmenu'}->insert($item, -1); $item = Gtk2::ImageMenuItem->new( _("Delete Request")); $item->signal_connect(activate => sub { $self->{'REQ'}->get_del_req($self) }); $image = Gtk2::Image->new_from_stock('gtk-delete', 'menu'); $item->set_image($image); $self->{'reqmenu'}->insert($item, -1); $self->{'reqmenu'}->show_all(); return; } sub _fill_radiobox { my($radiobox, $var, %values) = @_; my($previous_key, $value); $previous_key = undef; for $value (keys %values) { my $display_name = $values{$value}; my $key = Gtk2::RadioButton->new($previous_key, $display_name); $key->set_active(1) if(defined($$var) && $$var eq $value); $key->signal_connect('toggled' => sub{GUI::CALLBACK::toggle_to_var($key, $var, $value)}); $radiobox->add($key); $previous_key = $key; } } 1 tinyca2-0.7.5/lib/KEY.pm0000644000175000017500000003257710461475420016321 0ustar schollerscholler00000000000000# Copyright (c) Stephan Martin # # $Id: KEY.pm,v 1.8 2006/06/28 21:50:41 sm Exp $ # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. use strict; package KEY; use POSIX; sub new { my $self = {}; my $that = shift; my $class = ref($that) || $that; bless($self, $class); } # # get name of keyfile to delete # sub get_del_key { my ($self, $main) = @_; my($keyname, $key, $keyfile, $row, $ind, $ca, $type); $ca = $main->{'keybrowser'}->selection_caname(); $key = $main->{'keybrowser'}->selection_dn(); if(not defined $key) { GUI::HELPERS::print_info(_("Please select a Key first")); return; } $keyname = HELPERS::enc_base64($key); $keyfile = $main->{'cadir'}."/keys/".$keyname.".pem"; if(not -s $keyfile) { GUI::HELPERS::print_warning(_("Key file not found:".$keyfile)); return; } $main->show_del_confirm($keyfile, 'key'); return; } # # now really delete the key # sub del_key { my ($self, $main, $file) = @_; unlink($file); my $cadir = $main->{'keybrowser'}->selection_cadir(); $main->{'keybrowser'}->update($cadir."/keys", $cadir."/crl/crl.pem", $cadir."/index.txt", 0); return; } # # read keys in directory into list # sub read_keylist { my ($self, $main) = @_; my ($f, $modt, $tmp, $ca, $keydir, $keylist); $ca = $main->{'CA'}->{'actca'}; $keydir = $main->{'cadir'}."/keys"; $keylist = []; $modt = (stat($keydir))[9]; if(defined($self->{'lastread'}) && $self->{'lastread'} >= $modt) { return(0); } opendir(DIR, $keydir) || do { GUI::HELPERS::print_warning(_("Can't open key directory")); return(0); }; while($f = readdir(DIR)) { next if $f =~ /^\./; $f =~ s/\.pem//; $tmp = HELPERS::dec_base64($f); next if not defined($tmp); next if $tmp eq ""; $tmp = _check_key($main, $keydir."/".$f.".pem", $tmp); push(@{$keylist}, $tmp); } @{$keylist} = sort(@{$keylist}); closedir(DIR); $self->{'keylist'} = $keylist; $self->{'lastread'} = time(); return(1); # got new list } # # get the information to export the key # sub get_export_key { my ($self, $main, $opts, $box) = @_; $box->destroy() if(defined($box)); my($ca, $ind, $row, $t, $out, $cn, $email, $ret, $ext, $cadir); if(not defined($opts)) { $cn = $main->{'keybrowser'}->selection_cn(); if(not defined $cn) { GUI::HELPERS::print_info(_("Please select a Key first")); return; } $ca = $main->{'keybrowser'}->selection_caname(); $cadir = $main->{'keybrowser'}->selection_cadir(); $email = $main->{'keybrowser'}->selection_email(); $opts->{'type'} = $main->{'keybrowser'}->selection_type(); $opts->{'key'} = $main->{'keybrowser'}->selection_dn(); $opts->{'keyname'} = HELPERS::enc_base64($opts->{'key'}); $opts->{'keyfile'} = $cadir."/keys/".$opts->{'keyname'}.".pem"; $opts->{'certfile'} = $cadir."/certs/".$opts->{'keyname'}.".pem"; # set some defaults $opts->{'nopass'} = 0; $opts->{'include'} = 0; $opts->{'format'} = 'PEM'; $opts->{'friendlyname'} = ''; if((defined($email)) && $email ne '' && $email ne ' ') { $opts->{'outfile'} = "$main->{'exportdir'}/$email-key.pem"; }elsif((defined($cn)) && $cn ne '' && $cn ne ' ') { $opts->{'outfile'} = "$main->{'exportdir'}/$cn-key.pem"; }else{ $opts->{'outfile'} = "$main->{'exportdir'}/key.pem"; } $main->show_export_dialog($opts, 'key'); return; } if((not defined($opts->{'outfile'})) || ($opts->{'outfile'} eq '')) { $main->show_export_dialog($opts, 'key'); GUI::HELPERS::print_warning(_("Please give at least the output file")); return; } if(($opts->{'nopass'} || $opts->{'format'} eq 'DER') && ((not defined($opts->{'passwd'})) || ($opts->{'passwd'} eq ''))) { $main->show_key_nopasswd_dialog($opts); return; } if(($opts->{'format'} eq 'PEM') || ($opts->{'format'} eq 'DER')) { unless(($opts->{'format'} eq 'PEM') && not $opts->{'nopass'}) { ($out, $ext) = $main->{'OpenSSL'}->convkey( 'type' => $opts->{'type'}, 'inform' => 'PEM', 'outform' => $opts->{'format'}, 'nopass' => $opts->{'nopass'}, 'pass' => $opts->{'passwd'}, 'keyfile' => $opts->{'keyfile'} ); if(defined($out) && $out eq 1) { $t = _("Wrong password given\nDecrypting of the Key failed\nExport is not possible"); GUI::HELPERS::print_warning($t, $ext); return; } elsif((not defined($out)) || (length($out) < 3)) { GUI::HELPERS::print_warning( _("Converting failed, Export not possible"), $ext); return; } } if(($opts->{'format'} eq 'PEM') && not $opts->{'nopass'}) { open(IN, "<$opts->{'keyfile'}") || do { $t = sprintf(_("Can't open Key file: %s: %s"), $opts->{'keyfile'}, $!); GUI::HELPERS::print_warning($t); return; }; $out .= $_ while(); close(IN); } if($opts->{'include'}) { open(IN, "<$opts->{'certfile'}") || do { $t = sprintf(_("Can't open Certificate file: %s: %s"), $opts->{'certfile'}, $!); GUI::HELPERS::print_warning($t); return; }; $out .= "\n"; $out .= $_ while(); close(IN); } open(OUT, ">$opts->{'outfile'}") || do { $t = sprintf(_("Can't open output file: %s: %s"), $opts->{'outfile'}, $!); GUI::HELPERS::print_warning($t); return; }; print OUT $out; close(OUT); $main->{'exportdir'} = HELPERS::write_export_dir($main, $opts->{'outfile'}); $t = sprintf(_("Key succesfully exported to %s"), $opts->{'outfile'}); GUI::HELPERS::print_info($t); return; } elsif ($opts->{'format'} eq 'P12') { $opts->{'certfile'} = $main->{'cadir'}."/certs/".$opts->{'keyname'}.".pem"; $opts->{'cafile'} = $main->{'cadir'}."/cacert.pem"; if (-f $main->{'cadir'}."/cachain.pem") { $opts->{'cafile'} = $main->{'cadir'}."/cachain.pem"; } if(not -s $opts->{'certfile'}) { $t = _("Certificate is necessary for export as PKCS#12"); $t .= "\n"; $t .= _("Export is not possible!"); GUI::HELPERS::print_warning($t); return; } if((not defined($opts->{'p12passwd'})) && (not $opts->{'nopass'})) { $opts->{'includeca'} = 1; $main->show_p12_export_dialog($opts, 'key'); return; } unlink($opts->{'outfile'}); ($ret, $ext) = $main->{'OpenSSL'}->genp12( type => $opts->{'type'}, certfile => $opts->{'certfile'}, keyfile => $opts->{'keyfile'}, cafile => $opts->{'cafile'}, outfile => $opts->{'outfile'}, passwd => $opts->{'passwd'}, p12passwd => $opts->{'p12passwd'}, includeca => $opts->{'includeca'}, nopass => $opts->{'nopass'}, friendly => $opts->{'friendlyname'} ); if($ret eq 1) { $t = "Wrong password given\nDecrypting Key failed\nGenerating PKCS#12 failed"; GUI::HELPERS::print_warning($t, $ext); return; } elsif($ret || (not -s $opts->{'outfile'})) { $t = _("Generating PKCS#12 failed"); return; } $main->{'exportdir'} = HELPERS::write_export_dir($main, $opts->{'outfile'}); $t = sprintf(_("Certificate and Key successfully exported to %s"), $opts->{'outfile'}); GUI::HELPERS::print_info($t, $ext); return; } elsif (($opts->{'format'} eq "ZIP") || ($opts->{'format'} eq "TAR")) { $opts->{'certfile'} = $main->{'cadir'}."/certs/".$opts->{'keyname'}.".pem"; if(not -s $opts->{'certfile'}) { $t = sprintf( _("Certificate is necessary for export as %s file"), $opts->{'format'}); $t .= "\n"; $t .= _("Export is not possible!"); GUI::HELPERS::print_warning($t); return; } $opts->{'parsed'} = $main->{'CERT'}->parse_cert($main, $opts->{'keyname'}); my $tmpcert = "$main->{'tmpdir'}/cert.pem"; my $tmpkey = "$main->{'tmpdir'}/key.pem"; my $tmpcacert = "$main->{'tmpdir'}/cacert.pem"; open(OUT, ">$tmpcert") || do { GUI::HELPERS::print_warning(_("Can't create temporary file")); return; }; print OUT $opts->{'parsed'}->{'PEM'}; close OUT; # store key in temporary location { open(IN, "<$opts->{'keyfile'}") || do { GUI::HELPERS::print_warning(_("Can't read Key file")); return; }; my @key = ; close IN; open(OUT, ">$tmpkey") || do { GUI::HELPERS::print_warning(_("Can't create temporary file")); return; }; print OUT @key; close OUT; } # store cacert in temporary location { $opts->{'cafile'} = $main->{'cadir'}."/cacert.pem"; open(IN, "<$opts->{'cafile'}") || do { GUI::HELPERS::print_warning(_("Can't read CA certificate")); return; }; my @cacert = ; close IN; open(OUT, ">$tmpcacert") || do { GUI::HELPERS::print_warning(_("Can't create temporary file")); return; }; print OUT @cacert; close OUT; } unlink($opts->{'outfile'}); if($opts->{'format'} eq 'ZIP') { system($main->{'init'}->{'zipbin'}, '-j', $opts->{'outfile'}, $tmpcacert, $tmpkey, $tmpcert); my $ret = $? >> 8; } elsif ($opts->{'format'} eq 'TAR') { system($main->{'init'}->{'tarbin'}, 'cfv', $opts->{'outfile'}, $tmpcacert, $tmpkey, $tmpcert); my $ret = $? >> 8; } if(not -s $opts->{'outfile'} || $ret) { GUI::HELPERS::print_warning( sprintf(_("Generating %s file failed"), $opts->{'format'})); } else { $main->{'exportdir'} = HELPERS::write_export_dir($main, $opts->{'outfile'}); $t = sprintf( _("Certificate and Key successfully exported to %s"), $opts->{'outfile'}); GUI::HELPERS::print_info($t); } unlink($tmpcacert); unlink($tmpcert); unlink($tmpkey); return; } else { $t = sprintf(_("Invalid format for export requested: %s"), $opts->{'format'}); GUI::HELPERS::print_warning($t); return; } GUI::HELPERS::print_warning(_("Something Failed ??")); return; } # check if its a dsa or rsa key sub _check_key { my ($main, $file, $name) = @_; my ($t, $type); open(KEY, "<$file") || do { $t = sprintf(_("Can't open Key file: %s: %s"), $file, $!); GUI::HELPERS::print_warning($t); return; }; while() { if(/RSA PRIVATE KEY/i) { $type = "RSA"; last; } elsif(/DSA PRIVATE KEY/i) { $type = "DSA"; last; } else { $type = "UNKNOWN"; } } close(KEY); if(defined($type) && $type ne "") { $name .= "%".$type; } return($name); } sub key_change_passwd { my ($self, $main, $file, $oldpass, $newpass) = @_; my $opts = {}; my ($t, $ret, $ext); my $inform = "DER"; my $outform = "PEM"; my($type); # ckeck file format open(KEY, "<$file") || do { $t = sprintf(_("Can't open Key file:\n%s"), $file); GUI::HELPERS::print_warning($t); return(1); }; while() { if(/BEGIN RSA PRIVATE KEY/) { $inform = "PEM"; $type = "RSA"; last; } elsif(/BEGIN RSA PRIVATE KEY/){ $inform = "PEM"; $type = "DSA"; last; } else { $type = "UNKNOWN"; } } GUI::HELPERS::set_cursor($main, 1); ($ret, $ext) = $main->{'OpenSSL'}->convkey( 'type' => $type, 'inform' => $inform, 'outform' => $outform, 'nopass' => 0, 'pass' => $newpass, 'oldpass' => $oldpass, 'keyfile' => $file ); GUI::HELPERS::set_cursor($main, 0); if($ret eq 1) { $t = _("Generating key failed"); if($ext =~ /unable to load Private Key/) { $t .= _("The password for your old CA Key is wrong"); } GUI::HELPERS::print_warning(($t), $ext); return($ret); } return($ret); } 1 tinyca2-0.7.5/lib/CA.pm0000644000175000017500000011615510461475420016147 0ustar schollerscholler00000000000000# Copyright (c) Stephan Martin # # $Id: CA.pm,v 1.9 2006/06/28 21:50:41 sm Exp $ # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. use strict; package CA; use POSIX; sub new { my $that = shift; my $self = {}; my $class = ref($that) || $that; $self->{'init'} = shift; if(not -d $self->{'init'}->{'basedir'}) { print "create basedir: $self->{'init'}->{'basedir'}\n"; mkdir($self->{'init'}->{'basedir'}, 0700); } if(not -d $self->{'init'}->{'tmpdir'}) { print "create temp dir: $self->{'init'}->{'tmpdir'}\n"; mkdir($self->{'init'}->{'tmpdir'}, 0700); } opendir(DIR, $self->{'init'}->{'basedir'}) || do { print _("error: can't open basedir: ").$!; exit(1); }; $self->{'calist'} = []; while(my $ca = readdir(DIR)) { chomp($ca); next if $ca eq "."; next if $ca eq ".."; next if $ca eq "tmp"; my $dir = $self->{'init'}->{'basedir'}."/".$ca; next unless -d $dir; next unless -s $dir."/cacert.pem"; next unless -s $dir."/cacert.key"; push(@{$self->{'calist'}}, $ca); @{$self->{'calist'}} = sort(@{$self->{'calist'}}); $self->{$ca}->{'dir'} = $dir; $self->{$ca}->{'cnf'} = $dir."/openssl.cnf"; } closedir(DIR); bless($self, $class); } # # see if the ca can be opened without asking the user # or show the open dialog # sub get_open_name { my ($self, $main, $opts) = @_; my ($ind); if((not defined($opts->{'name'})) || ($opts->{'name'} eq "")) { # if only one CA is defined, open it without prompting if($#{$self->{'calist'}} == 0) { $opts->{'name'} = $self->{'calist'}->[0]; $self->open_ca($main, $opts); } else { $main->show_select_ca_dialog('open'); } } } # # open the ca with the given name # sub open_ca { my ($self, $main, $opts, $box) = @_; $box->destroy() if(defined($box)); GUI::HELPERS::set_cursor($main, 1); my ($i, $cnf, @lines, $oldca, $index, $bak, $t); GUI::HELPERS::set_status($main, _(" Opening CA: ").$opts->{'name'}); while(Gtk2->events_pending) { Gtk2->main_iteration; } if(!exists($self->{$opts->{'name'}})) { GUI::HELPERS::set_cursor($main, 0); GUI::HELPERS::print_warning(_("Invalid CA selected")); return; } # selected CA is already open if ((defined($self->{'actca'})) && ($opts->{'name'} eq $self->{'actca'})) { GUI::HELPERS::set_cursor($main, 0); print STDERR "DEBUG: ca $opts->{'name'} already opened\n"; return; } $self->{'actca'} = $opts->{'name'}; $self->{'cadir'} = $self->{$opts->{'name'}}->{'dir'}; $main->{'cadir'} = $self->{'cadir'}; if(my $dir = HELPERS::get_export_dir($main)) { $main->{'exportdir'} = $dir; } # update config (necessary for update from old tinyca) $cnf = $self->{$opts->{'name'}}->{'cnf'}; open(IN, "<$cnf"); @lines = ; close(IN); for($i = 0; $lines[$i]; $i++) { $lines[$i] =~ s/private\/cakey.pem/cacert.key/; } open(OUT, ">$cnf"); print OUT @lines; close(OUT); $main->{'mw'}->set_title( "Tiny CA Management $main->{'version'}". " - $self->{'actca'}" ); $main->{'CERT'}->{'lastread'} = 0; $main->{'REQ'}->{'lastread'} = 0; $main->{'KEY'}->{'lastread'} = 0; delete($main->{'OpenSSL'}->{'CACHE'}); delete($main->{'CERT'}->{'OpenSSL'}->{'CACHE'}); delete($main->{'REQ'}->{'OpenSSL'}->{'CACHE'}); delete($main->{'OpenSSL'}); GUI::HELPERS::set_status($main, _(" Initializing OpenSSL")); $main->{'OpenSSL'} = OpenSSL->new( $main->{'init'}->{'opensslbin'}, $main->{'tmpdir'}); $index = $self->{'cadir'}."/index.txt"; GUI::HELPERS::set_status($main, _(" Check for CA Version")); while(Gtk2->events_pending) { Gtk2->main_iteration; } open(INDEX, "+<$index") || do { GUI::HELPERS::set_cursor($main, 0); GUI::HELPERS::print_error(_("Can't open index file: ".$!)); return; }; while() { if(/Email=/) { $oldca = 1; last; } } close(INDEX); # offer CA conversion for old CAs and openssl >= 0.9.7 if($oldca && ($main->{'OpenSSL'}->{'version'} eq "0.9.7") && !$opts->{'noconv'} && !$opts->{'doconv'}) { GUI::HELPERS::set_status($main, _(" Convert CA")); while(Gtk2->events_pending) { Gtk2->main_iteration; } $self->{'actca'} = undef; GUI::HELPERS::set_cursor($main, 0); $main->show_ca_convert_dialog($opts); return; } if($opts->{'doconv'}) { open(INDEX, "+<$index") || do { GUI::HELPERS::set_cursor($main, 0); GUI::HELPERS::print_error(_("Can't open index file: ".$!)); return; }; $bak = $index.".bak"; open(BAK, "+>$bak") || do { GUI::HELPERS::set_cursor($main, 0); GUI::HELPERS::print_error(_("Can't open index backup: ").$!); return; }; seek(INDEX, 0, 0); while() { print BAK; } seek(INDEX, 0, 0); truncate(INDEX, 0); seek(BAK, 0, 0); while() { $_ =~ s/Email=/emailAddress=/; print INDEX; } close(INDEX); close(BAK); $t = _("This CA is converted for openssl 0.9.7x now."); $t .= "\n"; $t .= _("You will find a backup copy of the index file at: "); $t .= $bak; GUI::HELPERS::set_cursor($main, 0); GUI::HELPERS::print_info($t); } GUI::HELPERS::set_cursor($main, 1); GUI::HELPERS::set_status($main, _(" Read Configuration")); while(Gtk2->events_pending) { Gtk2->main_iteration; } $main->{'TCONFIG'}->init_config($main, $opts->{'name'}); GUI::HELPERS::set_status($main, _(" Create GUI")); while(Gtk2->events_pending) { Gtk2->main_iteration; } $main->create_mframe(1); GUI::HELPERS::set_status($main, _(" Create Toolbar")); while(Gtk2->events_pending) { Gtk2->main_iteration; } $main->create_toolbar('ca'); GUI::HELPERS::set_status($main, _(" Actual CA: ").$self->{'actca'}); while(Gtk2->events_pending) { Gtk2->main_iteration; } GUI::HELPERS::set_cursor($main, 0); $main->{'nb'}->set_current_page(0); return; } # # get name for deleting a CA # sub get_ca_delete { my ($self, $main, $name) = @_; if(!defined($name)) { $main->show_select_ca_dialog('delete'); return; }elsif(!exists($self->{$name})) { $main->show_select_ca_dialog('delete'); GUI::HELPERS::print_warning(_("Invalid CA selected")); return; }else { $self->delete_ca($main, $name); } return; } # # delete given CA # sub delete_ca { my ($self, $main, $name, $box) = @_; my ($ind, @tmp, $t); $box->destroy() if(defined($box)); GUI::HELPERS::set_cursor($main, 1); _rm_dir($self->{$name}->{'dir'}); if((defined($self->{'actca'})) && ($name eq $self->{'actca'})) { $self->{'actca'} = undef; } $main->{'cabox'}->destroy() if(defined($main->{'cabox'})); delete($main->{'cabox'}); $main->{'reqbox'}->destroy() if(defined($main->{'reqbox'})); delete($main->{'reqbox'}); $main->{'keybox'}->destroy() if(defined($main->{'keybox'})); delete($main->{'keybox'}); $main->{'certbox'}->destroy() if(defined($main->{'certbox'})); delete($main->{'certbox'}); for(my $i = 0; $i < 4; $i++) { $main->{'nb'}->remove_page($i); } delete($main->{'reqbrowser'}); delete($main->{'certbrowser'}); delete($main->{'REQ'}->{'reqlist'}); delete($main->{'CERT'}->{'certlist'}); foreach(@{$self->{'calist'}}) { next if $_ eq $name; push(@tmp, $_); } $self->{'calist'} = \@tmp; delete($self->{$name}); $main->create_mframe(); GUI::HELPERS::set_cursor($main, 0); $t = sprintf(_("CA: %s deleted"), $name); GUI::HELPERS::print_info($t); return; } # # check if all data for creating a ca is available # sub get_ca_create { my ($self, $main, $opts, $box, $mode) = @_; $box->destroy() if(defined($box)); my ($action, $index, $serial, $t, $parsed); if(not(defined($opts))) { $opts = {}; $opts->{'days'} = 3650; # set default to 10 years $opts->{'bits'} = 4096; $opts->{'digest'} = 'sha1'; if(defined($mode) && $mode eq "sub") { # create SubCA, use defaults $opts->{'parentca'} = $main->{'CA'}->{'actca'}; $parsed = $main->{'CERT'}->parse_cert($main, 'CA'); if(defined $parsed->{'C'}) { $opts->{'C'} = $parsed->{'C'}; } if(defined $parsed->{'ST'}) { $opts->{'ST'} = $parsed->{'ST'}; } if(defined $parsed->{'L'}) { $opts->{'L'} = $parsed->{'L'}; } if(defined $parsed->{'O'}) { $opts->{'O'} = $parsed->{'O'}; } if(defined $parsed->{'OU'}) { my $cc = 0; foreach my $ou (@{$parsed->{'OU'}}) { $opts->{'OU'}->[$cc++] = $ou; } } } $main->show_ca_dialog($opts, $mode); return; } if(defined($mode) && $mode eq "sub") { if(not defined($opts->{'parentpw'})) { $main->show_ca_dialog($opts, $mode); GUI::HELPERS::print_warning( _("Password of parent CA is needed for creating a Sub CA")); return; } } if((not defined($opts->{'name'})) || ($opts->{'name'} eq "") || ($opts->{'name'} =~ /\s/)) { $main->show_ca_dialog($opts, $mode); GUI::HELPERS::print_warning(_("Name must be filled in and must") ._(" not contain Spaces")); return; } if((not defined($opts->{'C'})) || ($opts->{'C'} eq "") || (not defined($opts->{'CN'})) || ($opts->{'CN'} eq "") || (not defined($opts->{'passwd'})) || ($opts->{'passwd'} eq "")) { $main->show_ca_dialog($opts, $mode); GUI::HELPERS::print_warning( _("Please specify at least Common Name, ") ._("Country and Password")); return; } if((not defined($opts->{'passwd2'})) || $opts->{'passwd'} ne $opts->{'passwd2'}) { $main->show_ca_dialog($opts, $mode); GUI::HELPERS::print_warning(_("Passwords don't match")); return; } $opts->{'C'} = uc($opts->{'C'}); if(length($opts->{'C'}) != 2) { $main->show_ca_dialog($opts, $mode); GUI::HELPERS::print_warning(_("Country must be exact 2 letter code")); return; } $t = sprintf(_("CA: %s already exists"), $opts->{'name'}); if(defined($self->{$opts->{'name'}})) { $main->show_ca_dialog($opts, $mode); GUI::HELPERS::print_warning($t); return; } # warn "call create_ca_env with bits: $opts->{'bits'}\n"; $self->create_ca_env($main, $opts, $mode); return; } # # check if all data for importing a CA is available # sub get_ca_import { my ($self, $main, $opts, $box) = @_; $box->destroy() if(defined($box)); my ($name, $t, $parsed, $constr); if(!(defined($opts))) { $opts = {}; $opts->{'days'} = 3650; # set default to 10 years $opts->{'bits'} = 4096; $opts->{'digest'} = 'sha1'; $main->show_ca_import_dialog($opts); return; } # check options given in dialog if((not defined($opts->{'name'})) || ($opts->{'name'} eq "") || ($opts->{'name'} =~ /\s/)) { $main->show_ca_import_dialog($opts); GUI::HELPERS::print_warning( _("Name for storage must be filled in and must not contain spaces")); return; } if(((not defined($opts->{'passwd'})) || ($opts->{'passwd'} eq '')) && (!$opts->{'pwwarning'})) { $main->show_ca_import_dialog($opts); GUI::HELPERS::print_warning( _("You didn't give a password for the private CA key."). "\n". _("The import will fail, if the key is encrypted.")); $opts->{'pwwarning'} = 1; return; } if((not defined($opts->{'newpasswd'})) || ($opts->{'newpasswd'} eq '')) { $main->show_ca_import_dialog($opts); GUI::HELPERS::print_warning( _("Please give a new password for the CA")); return; } if((not defined($opts->{'newpasswd2'})) || $opts->{'newpasswd'} ne $opts->{'newpasswd2'}) { $main->show_ca_import_dialog($opts); GUI::HELPERS::print_warning(_("New passwords don't match")); return; } if((not defined($opts->{'cacertfile'})) || ($opts->{'cacertfile'} eq '')) { $main->show_ca_import_dialog($opts); GUI::HELPERS::print_warning( _("Please give a CA certificate to import")); return; } if(not -r $opts->{'cacertfile'}) { $main->show_ca_import_dialog($opts); $t = sprintf(_("Can't read CA certificate file:\n%s"), $opts->{'cacertfile'}); GUI::HELPERS::print_warning($t); return; } if((not defined($opts->{'cakeyfile'})) || ($opts->{'cakeyfile'} eq '')) { $main->show_ca_import_dialog($opts); GUI::HELPERS::print_warning( _("Please give a CA keyfile to import")); return; } if(not -r $opts->{'cakeyfile'}) { $main->show_ca_import_dialog($opts); $t = sprintf(_("Can't read CA key file:\n%s"), $opts->{'cakeyfile'}); GUI::HELPERS::print_warning($t); return; } if(((not defined($opts->{'indexfile'})) || ($opts->{'indexfile'} eq '')) && (not defined($opts->{'indexwarning'}))) { $main->show_ca_import_dialog($opts); $t = _("Please give an Index file to import.\n"); $t .= _("If you don't have an Index file, i'll try to generate one.\n"); $t .= _("Attention: This will cause all Certificates to show up as valid.\n"); $t .= _("Attention: Revoked Certificates will not be determined."); $opts->{'indexwarning'} = 1; GUI::HELPERS::print_warning($t); return; } if(defined($opts->{'indexfile'}) && $opts->{'indexfile'} ne '' && not -r $opts->{'indexfile'}) { $main->show_ca_import_dialog($opts); $t = sprintf(_("Can't read Index file:\n%s"), $opts->{'indexfile'}); GUI::HELPERS::print_warning($t); return; } elsif(defined($opts->{'indexfile'}) && $opts->{'indexfile'} ne '') { $opts->{'gotindex'} = 1; } if((not defined($opts->{'certdir'})) || ($opts->{'certdir'} eq '')) { $main->show_ca_import_dialog($opts); GUI::HELPERS::print_warning( _("Please give a directory containing the certificates to import")); return; } if(not -d $opts->{'certdir'}) { $main->show_ca_import_dialog($opts); $t = sprintf(_("Can't find certificate directory:\n%s"), $opts->{'certdir'}); GUI::HELPERS::print_warning($t); return; } $name = $opts->{'name'}; if(defined($self->{$name})) { $main->show_ca_import_dialog($opts); $t = sprintf( _("CA: %s already exists. Please choose another name"), $name); GUI::HELPERS::print_warning($t); return; } # check ca certificate and key $parsed = $main->{'OpenSSL'}->parsecert( undef, undef, $opts->{'cacertfile'}, 1); # check if it's really a CA certificate if(defined($parsed->{'EXT'}->{'X509v3 Basic Constraints: critical'})) { $constr = $parsed->{'EXT'}->{'X509v3 Basic Constraints: critical'}->[0]; } elsif(defined($parsed->{'EXT'}->{'X509v3 Basic Constraints'})) { $constr = $parsed->{'EXT'}->{'X509v3 Basic Constraints'}->[0]; } else { $t = _("Can't find X509v3 Basic Constraints in CA Certificate\n"); $t .= _("Import canceled"); GUI::HELPERS::print_warning($t); return; } if($constr !~ /CA:TRUE/i) { $t = _("The selected CA Certificate is no valid CA certificate\n"); $t .= sprintf(_("X509v3 Basic Constraint is set to: %s"), $constr); GUI::HELPERS::print_warning($t); return; } $opts->{'cacertdata'} = $parsed->{'PEM'}; # now read the data from the files if(defined($opts->{'gotindex'})) { open(INDEX, "<$opts->{'indexfile'}") || do { $t = sprintf(_("Can't open Index file:\n%s"), $opts->{'indexfile'}); GUI::HELPERS::print_warning($t); return; }; while() { $opts->{'serial'} = hex((split(/\t/, $_))[3]); $opts->{'indexdata'} .= $_; } close(INDEX); $opts->{'serial'} +=1; $opts->{'serial'} = sprintf("%x", $opts->{'serial'}); } $main->show_import_verification("cacert", $opts, $parsed); return; } # # do the real import # sub import_ca { my ($self, $main, $opts, $box) = @_; my ($t, $f, $cacertfile, $cakeyfile, $certfile, $c, $p, @files, $ext, $ret, @d, $timestring, $indexline, $index, $serial, $subjects, $serials, $timestrings); my $format = "DER"; my $data = {}; my $ca = $opts->{'name'}; if (hex($opts->{'serial'}) < 1) { $opts->{'serial'} = "01"; } if(defined($box)) { $box->destroy(); } $opts->{'cakeydata'} = $main->{'KEY'}->key_change_passwd( $main, $opts->{'cakeyfile'}, $opts->{'passwd'}, $opts->{'newpasswd'}); if($opts->{'cakeydata'} eq 1) { return; } $self->create_ca_env($main, $opts, 'import'); # now read all certificates opendir(DIR, $opts->{'certdir'}) || do { $t = sprintf(_("Can't open Certificate directory: %s"), $opts->{'certdir'}); GUI::HELPERS::print_warning($t); return; }; # just count the files while($f = readdir(DIR)) { next if($f =~ /^\./); $certfile = $opts->{'certdir'}."/".$f; push (@files, $certfile); $c++; } GUI::HELPERS::set_cursor($main, 1); # import all the certificate files and gather information if necessary $main->{'barbox'}->pack_start($main->{'progress'}, 0, 0, 0); foreach $certfile (@files) { $t = sprintf(_(" Read Certificate: %s"), $certfile); GUI::HELPERS::set_status($main, $t); $p += 100/$c; $main->{'progress'}->set_fraction($p/100); while(Gtk2->events_pending) { Gtk2->main_iteration; } open(IN, "<$certfile") || do { GUI::HELPERS::set_cursor($main, 0); $t = sprintf(_("Can't read Certificate file: %s"), $certfile); return; }; $data->{'raw'} = ''; $data->{'raw'} .= $_ while(); close(IN); $format = "PEM" if($data->{'raw'} =~ /BEGIN CERTIFICATE/); if($format eq "PEM") { $data->{'PEM'} = $data->{'raw'}; } $data->{'parsed'} = $main->{'OpenSSL'}->parsecert( undef, undef, $certfile, 1 ); $data->{'name'} = HELPERS::gen_name($data->{'parsed'}); $data->{'name'} = HELPERS::enc_base64($data->{'name'}); $data->{'name'} .= ".pem"; $data->{'file'} = $self->{$ca}->{'dir'}."/certs/".$data->{'name'}; open(OUT, ">$data->{'file'}") || do { GUI::HELPERS::set_cursor($main, 0); $t = sprintf(_("Can't write Certificate file: %s"), $data->{'file'}); return; }; print OUT $data->{'PEM'}; if(not defined($opts->{'gotindex'})) { # get information for index.txt file @d = localtime($data->{'parsed'}->{'EXPDATE'}); $timestring = sprintf("%02d%02d%02d%02d%02d%02dZ", $d[5]%100, $d[4]+1, $d[3], $d[2], $d[1], $d[0]); # try to detect index clashes FIXME: only the newer is kept if(exists($subjects->{$data->{'parsed'}->{'SUBJECT'}})) { if(hex($data->{'parsed'}->{'SERIAL'}) >= hex($serials->{$data->{'parsed'}->{'SUBJECT'}})) { $subjects->{$data->{'parsed'}->{'SUBJECT'}} = 1; $serials->{$data->{'parsed'}->{'SUBJECT'}} = $data->{'parsed'}->{'SERIAL'}; $timestrings->{$data->{'parsed'}->{'SUBJECT'}} = $timestring; } } else { $subjects->{$data->{'parsed'}->{'SUBJECT'}} = 1; $serials->{$data->{'parsed'}->{'SUBJECT'}} = $data->{'parsed'}->{'SERIAL'}; $timestrings->{$data->{'parsed'}->{'SUBJECT'}} = $timestring; } # get information for serial file if(hex($data->{'parsed'}->{'SERIAL'}) >= hex($opts->{'serial'})) { $opts->{'serial'} = sprintf("%x", hex($data->{'parsed'}->{'SERIAL'})); } $opts->{'serial'} = hex($opts->{'serial'}) + 1; $opts->{'serial'} = sprintf("%x", $opts->{'serial'}); } close(OUT); } # now build the indexdata foreach my $s (keys(%$subjects)) { $indexline = "V\t$timestrings->{$s}\t\t$serials->{$s}\tunknown\t$s\n"; $opts->{'indexdata'} .= $indexline; } # create index file $index = $self->{$ca}->{'dir'}."/index.txt"; open(OUT, ">$index") || do { GUI::HELPERS::print_error(_("Can't open Index file: ").$!); return; }; print OUT $opts->{'indexdata'}; close OUT; $cacertfile = $self->{$ca}->{'dir'}."/cacert.pem"; $cakeyfile = $self->{$ca}->{'dir'}."/cacert.key"; # write cacertfile open(OUT, ">$cacertfile") || do { GUI::HELPERS::set_cursor($main, 0); $t = sprintf(_("Can't write CA Certificate file: %s"), $cacertfile); return; }; print OUT $opts->{'cacertdata'}; close(OUT); # check serial number of CA file $data->{'parsed'} = $main->{'OpenSSL'}->parsecert( undef, undef, $cacertfile, 1 ); if(hex($data->{'parsed'}->{'SERIAL'}) >= hex($opts->{'serial'})) { $opts->{'serial'} = sprintf("%x", hex($opts->{'serial'})); } $opts->{'serial'} = hex($opts->{'serial'}) + 1; $opts->{'serial'} = sprintf("%x", $opts->{'serial'}); # create serial file $serial = $self->{$ca}->{'dir'}."/serial"; open(OUT, ">$serial") || do { GUI::HELPERS::print_error(_("Can't write Serial file: ").$!); return; }; if($opts->{'serial'} ne "") { print OUT uc($opts->{'serial'}); }else{ print OUT "01"; } close OUT; # write keyfile open(OUT, ">$cakeyfile") || do { GUI::HELPERS::set_cursor($main, 0); $t = sprintf(_("Can't write CA Key file: %s"), $cakeyfile); return; }; print OUT $opts->{'cakeydata'}; close(OUT); ($ret, $ext) = $main->{'OpenSSL'}->newcrl( config => $self->{$ca}->{'cnf'}, pass => $opts->{'newpasswd'}, crldays => 30, outfile => $self->{$ca}->{'dir'}."/crl/crl.pem", format => 'PEM' ); if ((not -s $self->{$ca}->{'dir'}."/crl/crl.pem") || $ret) { GUI::HELPERS::set_cursor($main, 0); GUI::HELPERS::print_error(_("Generating CRL failed"), $ext); print STDERR "DEBUG: newcrl returned $ext\n"; die; return; } GUI::HELPERS::set_cursor($main, 0); $main->{'barbox'}->remove($main->{'progress'}); push(@{$self->{'calist'}}, $ca); @{$self->{'calist'}} = sort(@{$self->{'calist'}}); $t = sprintf(_("Succesfully imported %d certificates\n"), $c); $t.= _("Check the configuration of your imported CA."); GUI::HELPERS::print_info($t); $self->open_ca($main, $opts); return; } # # create a new CA, environment: dirs, etc. # sub create_ca_env { my ($self, $main, $opts, $mode) = @_; my ($t, $index, $serial); if((!defined($opts->{'name'})) || $opts->{'name'} eq '') { GUI::HELPERS::print_error(_("No CA name given")); return; } # create directories $self->{$opts->{'name'}}->{'dir'} = $self->{'init'}->{'basedir'}."/".$opts->{'name'}; mkdir($self->{$opts->{'name'}}->{'dir'}, 0700) || do { GUI::HELPERS::print_warning(_("Can't create directory: ").$!); return; }; mkdir($self->{$opts->{'name'}}->{'dir'}."/req", 0700) || do { GUI::HELPERS::print_warning(_("Can't create directory: ").$!); return; }; mkdir($self->{$opts->{'name'}}->{'dir'}."/keys", 0700) || do { GUI::HELPERS::print_warning(_("Can't create directory: ").$!); return; }; mkdir($self->{$opts->{'name'}}->{'dir'}."/certs", 0700) || do { GUI::HELPERS::print_warning(_("Can't create directory: ").$!); return; }; mkdir($self->{$opts->{'name'}}->{'dir'}."/crl", 0700) || do { GUI::HELPERS::print_warning(_("Can't create directory: ").$!); return; }; mkdir($self->{$opts->{'name'}}->{'dir'}."/newcerts", 0700) || do { GUI::HELPERS::print_warning(_("Can't create directory: ").$!); return; }; # create configuration file my $in = $self->{'init'}->{'templatedir'}."/openssl.cnf"; my $out = $self->{$opts->{'name'}}->{'dir'}."/openssl.cnf"; open(IN, "<$in") || do { $t = sprintf(_("Can't open template file %s %s"), $in, $!); GUI::HELPERS::print_error($t); return; }; open(OUT, ">$out") || do { $t = sprintf(_("Can't open output file: %s: %s"),$out, $!); GUI::HELPERS::print_error($t); return; }; while() { s/\%dir\%/$self->{$opts->{'name'}}->{'dir'}/; print OUT; } close IN; close OUT; $self->{$opts->{'name'}}->{'cnf'} = $out; $main->{'TCONFIG'}->init_config($main, $opts->{'name'}); # create some more files $index = $self->{$opts->{'name'}}->{'dir'}."/index.txt"; open(OUT, ">$index") || do { GUI::HELPERS::print_error(_("Can't open Index file: ").$!); return; }; close(OUT); $serial = $self->{$opts->{'name'}}->{'dir'}."/serial"; open(OUT, ">$serial") || do { GUI::HELPERS::print_error(_("Can't write Serial file: ").$!); return; }; if(defined($opts->{'serial'}) && $opts->{'serial'} ne "") { print OUT uc($opts->{'serial'}); }else{ print OUT "01"; } close(OUT); if(defined($mode) && $mode eq "sub") { $self->create_ca($main, $opts, undef, $mode); } elsif(defined($mode) && $mode eq "import") { } else { GUI::TCONFIG::show_config_ca($main, $opts, $mode); } return; } # # now create the CA certificate and CRL # sub create_ca { my ($self, $main, $opts, $box, $mode) = @_; my ($fname, $t, $index, $serial, $ca, $ret, $ext); $ca = $self->{'actca'}; $box->destroy() if(defined($box)); GUI::HELPERS::set_cursor($main, 1); if((!defined($opts->{'name'})) || $opts->{'name'} eq '') { GUI::HELPERS::set_cursor($main, 0); GUI::HELPERS::print_error(_("No CA name given")); return; } # create CA certifikate ($ret, $ext) = $main->{'OpenSSL'}->newkey( 'bits' => $opts->{'bits'}, 'outfile' => $self->{$opts->{'name'}}->{'dir'}."/cacert.key", 'pass' => $opts->{'passwd'} ); if (not -s $self->{$opts->{'name'}}->{'dir'}."/cacert.key" || $ret) { GUI::HELPERS::set_cursor($main, 0); GUI::HELPERS::print_warning(_("Generating key failed"), $ext); _rm_dir($self->{$opts->{'name'}}->{'dir'}); delete($self->{$opts->{'name'}}); return; } my @dn = ( $opts->{'C'}, $opts->{'ST'}, $opts->{'L'}, $opts->{'O'}, $opts->{'OU'}->[0], $opts->{'CN'}, $opts->{'EMAIL'}, '', ''); ($ret, $ext) = $main->{'OpenSSL'}->newreq( 'config' => $self->{$opts->{'name'}}->{'cnf'}, 'outfile' => $self->{$opts->{'name'}}->{'dir'}."/cacert.req", 'digest' => $opts->{'digest'}, 'pass' => $opts->{'passwd'}, 'dn' => \@dn, 'keyfile' => $self->{$opts->{'name'}}->{'dir'}."/cacert.key" ); $fname = HELPERS::gen_name($opts); $opts->{'reqname'} = HELPERS::enc_base64($fname); if (not -s $self->{$opts->{'name'}}->{'dir'}."/cacert.req" || $ret) { unlink($self->{$opts->{'name'}}->{'dir'}."/cacert.key"); unlink($self->{$opts->{'name'}}->{'dir'}."/cacert.req"); GUI::HELPERS::set_cursor($main, 0); GUI::HELPERS::print_warning(_("Generating Request failed"), $ext); _rm_dir($self->{$opts->{'name'}}->{'dir'}); delete($self->{$opts->{'name'}}); return; } else { if(defined($mode) && $mode eq "sub") { # for SubCAs: copy the request to the signing CA open(IN, "<$self->{$opts->{'name'}}->{'dir'}"."/cacert.req") || do { GUI::HELPERS::set_cursor($main, 0); GUI::HELPERS::print_warning(_("Can't read Certificate")); return; }; open(OUT, ">$self->{$ca}->{'dir'}"."/req/".$opts->{'reqname'}.".pem") || do { GUI::HELPERS::set_cursor($main, 0); GUI::HELPERS::print_warning(_("Can't write Certificate")); return; }; print OUT while(); close IN; close OUT; # for SubCAs: copy the key to the signing CA open(IN, "<$self->{$opts->{'name'}}->{'dir'}"."/cacert.key") || do { GUI::HELPERS::set_cursor($main, 0); GUI::HELPERS::print_warning(_("Can't read Certificate")); return; }; open(OUT, ">$self->{$ca}->{'dir'}"."/keys/".$opts->{'reqname'}.".pem") || do { GUI::HELPERS::set_cursor($main, 0); GUI::HELPERS::print_warning(_("Can't write Certificate")); return; }; print OUT while(); close IN; close OUT; } } if(defined($mode) && $mode eq "sub") { ($ret, $ext) = $main->{'REQ'}->sign_req( $main, { 'mode' => "sub", 'config' => $self->{$opts->{'name'}}->{'cnf'}, 'outfile' => $self->{$opts->{'name'}}->{'dir'}."/cacert.pem", 'reqfile' => $self->{$opts->{'name'}}->{'dir'}."/cacert.req", 'outdir' => $self->{$ca}->{'dir'}."/newcerts/", 'keyfile' => $self->{$ca}->{'dir'}."/cacert.key", 'cacertfile' => $self->{$ca}->{'dir'}."/cacert.pem", 'pass' => $opts->{'passwd'}, 'days' => $opts->{'days'}, 'parentpw' => $opts->{'parentpw'}, 'reqname' => $opts->{'reqname'} } ); } else { ($ret, $ext) = $main->{'OpenSSL'}->newcert( 'config' => $self->{$opts->{'name'}}->{'cnf'}, 'outfile' => $self->{$opts->{'name'}}->{'dir'}."/cacert.pem", 'keyfile' => $self->{$opts->{'name'}}->{'dir'}."/cacert.key", 'reqfile' => $self->{$opts->{'name'}}->{'dir'}."/cacert.req", 'digest' => $opts->{'digest'}, 'pass' => $opts->{'passwd'}, 'days' => $opts->{'days'} ); } if (not -s $self->{$opts->{'name'}}->{'dir'}."/cacert.pem" || $ret) { GUI::HELPERS::set_cursor($main, 0); GUI::HELPERS::print_warning( _("Generating certificate failed"), $ext); _rm_dir($self->{$opts->{'name'}}->{'dir'}); delete($self->{$opts->{'name'}}); return; } unlink($self->{$opts->{'name'}}->{'dir'}."/cacert.req"); if(defined($mode) && $mode eq "sub") { # create file containing chain of ca certificates my $in; if (-f $self->{$ca}->{'dir'}."/cachain.pem") { $in = $self->{$ca}->{'dir'}."/cachain.pem"; } else { $in = $self->{$ca}->{'dir'}."/cacert.pem"; } my $out = $self->{$opts->{'name'}}->{'dir'}."/cachain.pem"; open(IN, "<$in") || do { $t = sprintf( _("Can't open ca certificate file %s %s"), $in, $!); GUI::HELPERS::set_cursor($main, 0); GUI::HELPERS::print_warning($t); _rm_dir($self->{$opts->{'name'}}->{'dir'}); delete($self->{$opts->{'name'}}); return; }; open(OUT, ">$out") || do { $t = sprintf( _("Can't create certificate chain file: %s: %s"),$out, $!); GUI::HELPERS::set_cursor($main, 0); $main->print_warning($t); _rm_dir($self->{$opts->{'name'}}->{'dir'}); delete($self->{$opts->{'name'}}); return; }; while() { print OUT; } close IN; # now append the certificate of the created SubCA $in = $self->{$opts->{'name'}}->{'dir'}."/cacert.pem"; open(IN, "<$in") || do { $t = sprintf( _("Can't open ca certificate file %s %s"), $in, $!); GUI::HELPERS::set_cursor($main, 0); GUI::HELPERS::print_warning($t); _rm_dir($self->{$opts->{'name'}}->{'dir'}); delete($self->{$opts->{'name'}}); return; }; while() { print OUT; } close OUT; } ($ret, $ext) = $main->{'OpenSSL'}->newcrl( config => $self->{$opts->{'name'}}->{'cnf'}, pass => $opts->{'passwd'}, crldays => $main->{'TCONFIG'}->{'server_ca'}->{'default_crl_days'}, outfile => $self->{$opts->{'name'}}->{'dir'}."/crl/crl.pem", format => 'PEM' ); if (not -s $self->{$opts->{'name'}}->{'dir'}."/crl/crl.pem" || $ret) { GUI::HELPERS::set_cursor($main, 0); GUI::HELPERS::print_warning(_("Generating CRL failed"), $ext); _rm_dir($self->{$opts->{'name'}}->{'dir'}); delete($self->{$opts->{'name'}}); return; } # seems to be done push(@{$self->{'calist'}}, $opts->{'name'}); @{$self->{'calist'}} = sort(@{$self->{'calist'}}); $t = sprintf(_("CA: %s created"), $opts->{'name'}); GUI::HELPERS::set_cursor($main, 0); GUI::HELPERS::print_info($t); $self->open_ca($main, $opts); return; } # # export ca certificate chain # sub export_ca_chain { my ($self, $main, $opts, $box) = @_; my($ca, $chainfile, $parsed, $out, $t); $box->destroy() if(defined($box)); $ca = $self->{'actca'}; if(not defined($opts)) { $opts->{'format'} = 'PEM'; $opts->{'outfile'} = "$main->{'exportdir'}/$ca-cachain.pem"; $main->show_ca_chain_export_dialog($opts); return; } GUI::HELPERS::set_cursor($main, 1); $chainfile = $self->{$ca}->{'dir'}."/cachain.pem"; open(IN, "<$self->{$ca}->{'dir'}"."/cachain.pem") || do { GUI::HELPERS::set_cursor($main, 0); GUI::HELPERS::print_warning( _("Can't open certificate chain file: %s: %s"), $self->{$ca}->{'dir'}."/cachain.pem", $!); return; }; open(OUT, ">$opts->{'outfile'}") || do { GUI::HELPERS::set_cursor($main, 0); GUI::HELPERS::print_warning( _("Can't open output file: %s: %s"), $opts->{'outfile'}, $!); return; }; print OUT while(); close OUT; $main->{'exportdir'} = HELPERS::write_export_dir($main, $opts->{'outfile'}); GUI::HELPERS::set_cursor($main, 0); $t = sprintf(_("Certificate Chain succesfully exported to: %s"), $opts->{'outfile'}); GUI::HELPERS::print_info($t); return; } # # export ca certificate # sub export_ca_cert { my ($self, $main, $opts, $box) = @_; my($ca, $certfile, $parsed, $out, $t); $box->destroy() if(defined($box)); GUI::HELPERS::set_cursor($main, 1); $ca = $self->{'actca'}; $certfile = $self->{$ca}->{'dir'}."/cacert.pem"; if(not defined($opts)) { $opts->{'format'} = 'PEM'; $opts->{'outfile'} = "$main->{'exportdir'}/$ca-cacert.pem"; GUI::HELPERS::set_cursor($main, 0); $main->show_ca_export_dialog($opts); return; } $parsed = $main->{'CERT'}->parse_cert($main, 'CA'); if(not defined $parsed) { GUI::HELPERS::set_cursor($main, 0); GUI::HELPERS::print_error(_("Can't read CA certificate")); } if($opts->{'format'} eq "PEM") { $out = $parsed->{'PEM'}; } elsif ($opts->{'format'} eq "DER") { $out = $parsed->{'DER'}; } elsif ($opts->{'format'} eq "TXT") { $out = $parsed->{'TEXT'}; } else { $t = sprintf(_("Invalid Format for export_ca_cert(): %s"), $opts->{'format'}); GUI::HELPERS::set_cursor($main, 0); GUI::HELPERS::print_warning($t); return; } open(OUT, ">$opts->{'outfile'}") || do { GUI::HELPERS::set_cursor($main, 0); $t = sprintf(_("Can't open output file: %s: %s"), $opts->{'outfile'}, $!); GUI::HELPERS::print_warning($t); return; }; print OUT $out; close OUT; $main->{'exportdir'} = HELPERS::write_export_dir($main, $opts->{'outfile'}); GUI::HELPERS::set_cursor($main, 0); $t = sprintf(_("Certificate succesfully exported to: %s"), $opts->{'outfile'}); GUI::HELPERS::print_info($t); return; } # # export crl # sub export_crl { my ($self, $main, $opts, $box) = @_; my($ca, $t, $ret, $ext); $box->destroy() if(defined($box)); GUI::HELPERS::set_cursor($main, 1); $ca = $self->{'actca'}; if(not defined($opts)) { $opts->{'outfile'} = "$main->{'exportdir'}/$ca-crl.pem"; $opts->{'format'} = 'PEM'; $opts->{'days'} = $main->{'TCONFIG'}->{'server_ca'}->{'default_crl_days'}; GUI::HELPERS::set_cursor($main, 0); $main->show_crl_export_dialog($opts); return; } if((not defined($opts->{'outfile'})) || ($opts->{'outfile'} eq '')) { GUI::HELPERS::set_cursor($main, 0); $t = _("Please give the output file"); $main->show_crl_export_dialog($opts); GUI::HELPERS::print_warning($t); return; }; if((not defined($opts->{'passwd'})) || ($opts->{'passwd'} eq '')) { GUI::HELPERS::set_cursor($main, 0); $t = _("Please give the CA password to create the Revocation List"); $main->show_crl_export_dialog($opts); GUI::HELPERS::print_warning($t); return; } if(not defined($main->{'OpenSSL'})) { $main->init_openssl($ca); } ($ret, $ext) = $main->{'OpenSSL'}->newcrl( config => $self->{$ca}->{'cnf'}, pass => $opts->{'passwd'}, crldays => $opts->{'days'}, outfile => $opts->{'outfile'}, format => $opts->{'format'} ); GUI::HELPERS::set_cursor($main, 0); if($ret eq 1) { $t = _("Wrong CA password given\nGenerating Revocation List failed"); GUI::HELPERS::print_warning($t, $ext); return; } elsif($ret eq 2) { $t = _("CA Key not found\nGenerating Revocation List failed"); GUI::HELPERS::print_warning($t, $ext); return; } elsif($ret) { $t = _("Generating Revocation List failed"); GUI::HELPERS::print_warning($t, $ext); return; } if (not -s $opts->{'outfile'}) { $t = _("Generating Revocation List failed"); GUI::HELPERS::print_warning($t); return; } $main->{'exportdir'} = HELPERS::write_export_dir($main, $opts->{'outfile'}); $t = sprintf(_("CRL successfully exported to: %s"), $opts->{'outfile'}); GUI::HELPERS::print_info($t, $ext); return; } sub _rm_dir { my $dir = shift; my $dirh; opendir($dirh, $dir); while(my $f = readdir($dirh)) { next if $f eq '.'; next if $f eq '..'; if(-d $dir."/".$f) { _rm_dir($dir."/".$f); } else { unlink($dir."/".$f); } } closedir(DIR); rmdir($dir); return(0); } 1 tinyca2-0.7.5/lib/REQ.pm0000644000175000017500000005307710461475420016316 0ustar schollerscholler00000000000000# Copyright (c) Stephan Martin # # $Id: REQ.pm,v 1.7 2006/06/28 21:50:42 sm Exp $ # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. use strict; package REQ; use POSIX; sub new { my $that = shift; my $class = ref($that) || $that; my $self = {}; $self->{'OpenSSL'} = shift; bless($self, $class); } # # check if all data for creating a new request is available # sub get_req_create { my ($self, $main, $opts, $box) = @_; $box->destroy() if(defined($box)); my ($name, $action, $parsed, $reqfile, $keyfile, $ca, $t); $ca = $main->{'CA'}->{'actca'}; if(!(defined($opts)) || !(ref($opts))) { if(defined($opts) && $opts eq "signserver") { $opts = {}; $opts->{'sign'} = 1; $opts->{'type'} = "server"; } elsif(defined($opts) && $opts eq "signclient") { $opts = {}; $opts->{'sign'} = 1; $opts->{'type'} = "client"; } elsif (defined($opts)) { $t = sprintf(_("Strange value for 'opts': %s"), $opts); GUI::HELPERS::print_error($t); } $opts->{'bits'} = 4096; $opts->{'digest'} = 'sha1'; $opts->{'algo'} = 'rsa'; if(defined($opts) && $opts eq "sign") { $opts->{'sign'} = 1; } $parsed = $main->{'CERT'}->parse_cert($main, 'CA'); defined($parsed) || GUI::HELPERS::print_error(_("Can't read CA certificate")); # set defaults if(defined $parsed->{'C'}) { $opts->{'C'} = $parsed->{'C'}; } if(defined $parsed->{'ST'}) { $opts->{'ST'} = $parsed->{'ST'}; } if(defined $parsed->{'L'}) { $opts->{'L'} = $parsed->{'L'}; } if(defined $parsed->{'O'}) { $opts->{'O'} = $parsed->{'O'}; } my $cc = 0; foreach my $ou (@{$parsed->{'OU'}}) { $opts->{'OU'}->[$cc++] = $ou; } $main->show_req_dialog($opts); return; } if((not defined($opts->{'CN'})) || ($opts->{'CN'} eq "") || (not defined($opts->{'passwd'})) || ($opts->{'passwd'} eq "")) { $main->show_req_dialog($opts); GUI::HELPERS::print_warning( _("Please specify at least Common Name ") ._("and Password")); return; } if((not defined($opts->{'passwd2'})) || $opts->{'passwd'} ne $opts->{'passwd2'}) { $main->show_req_dialog($opts); GUI::HELPERS::print_warning(_("Passwords don't match")); return; } $opts->{'C'} = uc($opts->{'C'}); if((defined $opts->{'C'}) && ($opts->{'C'} ne "") && (length($opts->{'C'}) != 2)) { $main->show_req_dialog($opts); GUI::HELPERS::print_warning( _("Country must be exact 2 letter code")); return; } $name = HELPERS::gen_name($opts); $opts->{'reqname'} = HELPERS::enc_base64($name); $reqfile = $main->{'CA'}->{$ca}->{'dir'}."/req/".$opts->{'reqname'}.".pem"; $keyfile = $main->{'CA'}->{$ca}->{'dir'}."/keys/".$opts->{'reqname'}.".pem"; if(-s $reqfile || -s $keyfile) { $main->show_req_overwrite_warning($opts); return; } $self->create_req($main, $opts); return; } # # create new request and key # sub create_req { my ($self, $main, $opts) = @_; my($reqfile, $keyfile, $ca, $ret, $ext, $cadir); GUI::HELPERS::set_cursor($main, 1); $ca = $main->{'CA'}->{'actca'}; $cadir = $main->{'CA'}->{$ca}->{'dir'}; $reqfile = $cadir."/req/".$opts->{'reqname'}.".pem"; $keyfile = $cadir."/keys/".$opts->{'reqname'}.".pem"; ($ret, $ext) = $self->{'OpenSSL'}->newkey( 'algo' => $opts->{'algo'}, 'bits' => $opts->{'bits'}, 'outfile' => $keyfile, 'pass' => $opts->{'passwd'} ); if (not -s $keyfile || $ret) { unlink($keyfile); GUI::HELPERS::set_cursor($main, 0); GUI::HELPERS::print_warning(_("Generating key failed"), $ext); return; } my @dn = ( $opts->{'C'}, $opts->{'ST'}, $opts->{'L'}, $opts->{'O'} ); if(ref($opts->{'OU'})) { foreach my $ou (@{$opts->{'OU'}}) { push(@dn,$ou); } } else { push(@dn, $opts->{'OU'}); } @dn = (@dn, $opts->{'CN'}, $opts->{'EMAIL'}, '', ''); ($ret, $ext) = $self->{'OpenSSL'}->newreq( 'config' => $main->{'CA'}->{$ca}->{'cnf'}, 'outfile' => $reqfile, 'keyfile' => $keyfile, 'digest' => $opts->{'digest'}, 'pass' => $opts->{'passwd'}, 'dn' => \@dn, ); if (not -s $reqfile || $ret) { unlink($keyfile); unlink($reqfile); GUI::HELPERS::set_cursor($main, 0); GUI::HELPERS::print_warning(_("Generating Request failed"), $ext); return; } my $parsed = $self->parse_req($main, $opts->{'reqname'}, 1); $main->{'reqbrowser'}->update($cadir."/req", $cadir."/crl/crl.pem", $cadir."/index.txt", 0); $main->{'keybrowser'}->update($cadir."/keys", $cadir."/crl/crl.pem", $cadir."/index.txt", 0); GUI::HELPERS::set_cursor($main, 0); if($opts->{'sign'}) { $opts->{'reqfile'} = $reqfile; $opts->{'passwd'} = undef; # to sign request, ca-password is needed $self->get_sign_req($main, $opts); } return; } # # get name of requestfile to delete # sub get_del_req { my ($self, $main) = @_; my($reqname, $req, $reqfile, $row, $ind, $ca, $cadir); $ca = $main->{'reqbrowser'}->selection_caname(); $cadir = $main->{'reqbrowser'}->selection_cadir(); if(not(defined($reqfile))) { $req = $main->{'reqbrowser'}->selection_dn(); if(not defined($req)) { GUI::HELPERS::print_info(_("Please select a Request first")); return; } $reqname = HELPERS::enc_base64($req); $reqfile = $cadir."/req/".$reqname.".pem"; } if(not -s $reqfile) { GUI::HELPERS::print_warning(_("Request file not found")); return; } $main->show_del_confirm($reqfile, 'req'); return; } # # now really delete the requestfile # sub del_req { my ($self, $main, $file) = @_; my ($ca, $cadir); GUI::HELPERS::set_cursor($main, 1); unlink($file); $ca = $main->{'reqbrowser'}->selection_caname(); $cadir = $main->{'reqbrowser'}->selection_cadir(); $main->{'reqbrowser'}->update($cadir."/req", $cadir."/crl/crl.pem", $cadir."/index.txt", 0); GUI::HELPERS::set_cursor($main, 0); return; } sub read_reqlist { my ($self, $reqdir, $crlfile, $indexfile, $force, $main) = @_; my ($f, $modt, $d, $reqlist, $c, $p, $t); GUI::HELPERS::set_cursor($main, 1); $reqlist = []; $modt = (stat($reqdir))[9]; if(defined($self->{'lastread'}) && $self->{'lastread'} >= $modt) { GUI::HELPERS::set_cursor($main, 0); return(0); } opendir(DIR, $reqdir) || do { GUI::HELPERS::set_cursor($main, 0); GUI::HELPERS::print_warning(_("Can't open Request directory")); return(0); }; while($f = readdir(DIR)) { next if $f =~ /^\./; $c++; } rewinddir(DIR); $main->{'barbox'}->pack_start($main->{'progress'}, 0, 0, 0); $main->{'progress'}->show(); while($f = readdir(DIR)) { next if $f =~ /^\./; $f =~ s/\.pem//; $d = HELPERS::dec_base64($f); next if not defined($d); next if $d eq ""; push(@{$reqlist}, $d); if(defined($main)) { $t = sprintf(_(" Read Request: %s"), $d); GUI::HELPERS::set_status($main, $t); $p += 100/$c; if($p/100 <= 1) { $main->{'progress'}->set_fraction($p/100); while(Gtk2->events_pending) { Gtk2->main_iteration; } } select(undef, undef, undef, 0.025); } } @{$reqlist} = sort(@{$reqlist}); closedir(DIR); delete($self->{'reqlist'}); $self->{'reqlist'} = $reqlist; $self->{'lastread'} = time(); if(defined($main)) { $main->{'progress'}->set_fraction(0); $main->{'barbox'}->remove($main->{'progress'}); GUI::HELPERS::set_cursor($main, 0); } return(1); # got new list } # # get name of request to sign # sub get_sign_req { my ($self, $main, $opts, $box) = @_; my($time, $parsed, $ca, $cadir, $ext, $ret); $box->destroy() if(defined($box)); $time = time(); $ca = $main->{'reqbrowser'}->selection_caname(); $cadir = $main->{'reqbrowser'}->selection_cadir(); if(not(defined($opts->{'reqfile'}))) { $opts->{'req'} = $main->{'reqbrowser'}->selection_dn(); if(not defined($opts->{'req'})) { GUI::HELPERS::print_info(_("Please select a Request first")); return; } $opts->{'reqname'} = HELPERS::enc_base64($opts->{'req'}); $opts->{'reqfile'} = $cadir."/req/".$opts->{'reqname'}.".pem"; } if(not -s $opts->{'reqfile'}) { GUI::HELPERS::print_warning(_("Request file not found")); return; } if((-s $cadir."/certs/".$opts->{'reqname'}.".pem") && (!(defined($opts->{'overwrite'})) || ($opts->{'overwrite'} ne 'true'))) { $main->show_cert_overwrite_confirm($opts); return; } $parsed = $main->{'CERT'}->parse_cert($main, 'CA'); defined($parsed) || GUI::HELPERS::print_error(_("Can't read CA certificate")); if(!defined($opts->{'passwd'})) { $opts->{'days'} = $main->{'TCONFIG'}->{$opts->{'type'}."_ca"}->{'default_days'}; if($opts->{'days'} > (($parsed->{'EXPDATE'}/86400) - ($time/86400))) { $opts->{'days'} = int(($parsed->{'EXPDATE'}/86400) - ($time/86400)); } $main->show_req_sign_dialog($opts); return; } if((($time + ($opts->{'days'} * 86400)) > $parsed->{'EXPDATE'}) && (!(defined($opts->{'ignoredate'})) || $opts->{'ignoredate'} ne 'true')){ $main->show_req_date_warning($opts); return; } # try to find message digest used for the request $parsed = undef; $parsed = $self->parse_req($main, $opts->{'reqname'}, 1); defined($parsed) || GUI::HELPERS::print_error(_("Can't read Request file")); if(defined($parsed->{'SIG_ALGORITHM'})) { $opts->{'digest'} = $parsed->{'SIG_ALGORITHM'}; if($opts->{'digest'} =~ /^md2/) { $opts->{'digest'} = "md2"; } elsif ($opts->{'digest'} =~ /^mdc2/) { $opts->{'digest'} = "mdc2"; } elsif ($opts->{'digest'} =~ /^md4/) { $opts->{'digest'} = "md4"; } elsif ($opts->{'digest'} =~ /^md5/) { $opts->{'digest'} = "md5"; } elsif ($opts->{'digest'} =~ /^sha1/) { $opts->{'digest'} = "sha1"; } elsif ($opts->{'digest'} =~ /^ripemd160/) { $opts->{'digest'} = "ripemd160"; } else { } } else { $opts->{'digest'} = 0; } ($ret, $ext) = $self->sign_req($main, $opts); return($ret, $ext); } # # now really sign the request # sub sign_req { my ($self, $main, $opts) = @_; my($serial, $certout, $certfile, $certfile2, $ca, $cadir, $ret, $t, $ext); GUI::HELPERS::set_cursor($main, 1); $ca = $main->{'reqbrowser'}->selection_caname(); $cadir = $main->{'reqbrowser'}->selection_cadir(); $serial = $cadir."/serial"; open(IN, "<$serial") || do { GUI::HELPERS::set_cursor($main, 0); GUI::HELPERS::print_warning(_("Can't read serial")); return; }; $serial = ; chomp($serial); close IN; if(not defined($opts->{'nsSslServerName'})) { $opts->{'nsSslServerName'} = 'none'; } if(not defined($opts->{'nsRevocationUrl'})) { $opts->{'nsRevocationUrl'} = 'none'; } if(not defined($opts->{'nsRenewalUrl'})) { $opts->{'nsRenewalUrl'} = 'none'; } if(not defined($opts->{'subjectAltName'})) { $opts->{'subjectAltName'} = 'none'; $opts->{'subjectAltNameType'} = 'none'; } else { $opts->{'subjectAltNameType'} = $main->{TCONFIG}->{$opts->{'type'}.'_cert'}->{'subjectAltNameType'}; } if(not defined($opts->{'extendedKeyUsage'})) { $opts->{'extendedKeyUsage'} = 'none'; $opts->{'extendedKeyUsageType'} = 'none'; } else { $opts->{'extendedKeyUsageType'} = $main->{TCONFIG}->{$opts->{'type'}.'_cert'}->{'extendedKeyUsageType'}; } if(defined($opts->{'mode'}) && $opts->{'mode'} eq "sub") { ($ret, $ext) = $self->{'OpenSSL'}->signreq( 'mode' => $opts->{'mode'}, 'config' => $main->{'CA'}->{$ca}->{'cnf'}, 'reqfile' => $opts->{'reqfile'}, 'keyfile' => $opts->{'keyfile'}, 'cacertfile' => $opts->{'cacertfile'}, 'outdir' => $opts->{'outdir'}, 'days' => $opts->{'days'}, 'parentpw' => $opts->{'parentpw'}, 'caname' => "ca_ca", 'revocationurl' => $opts->{'nsRevocationUrl'}, 'renewalurl' => $opts->{'nsRenewalUrl'}, 'subjaltname' => $opts->{'subjectAltName'}, 'subjaltnametype' => $opts->{'subjectAltNameType'}, 'extendedkeyusage' => $opts->{'extendedKeyUsage'}, 'extendedkeyusagetype' => $opts->{'extendedKeyUsageType'}, 'noemaildn' => $opts->{'noemaildn'}, 'digest' => $opts->{'digest'} ); } else { ($ret, $ext) = $self->{'OpenSSL'}->signreq( 'config' => $main->{'CA'}->{$ca}->{'cnf'}, 'reqfile' => $opts->{'reqfile'}, 'days' => $opts->{'days'}, 'pass' => $opts->{'passwd'}, 'caname' => $opts->{'type'}."_ca", 'sslservername' => $opts->{'nsSslServerName'}, 'revocationurl' => $opts->{'nsRevocationUrl'}, 'renewalurl' => $opts->{'nsRenewalUrl'}, 'subjaltname' => $opts->{'subjectAltName'}, 'subjaltnametype' => $opts->{'subjectAltNameType'}, 'extendedkeyusage' => $opts->{'extendedKeyUsage'}, 'extendedkeyusagetype' => $opts->{'extendedKeyUsageType'}, 'noemaildn' => $opts->{'noemaildn'}, 'digest' => $opts->{'digest'} ); } GUI::HELPERS::set_cursor($main, 0); if($ret eq 1) { $t = _("Wrong CA password given\nSigning of the Request failed"); GUI::HELPERS::print_warning($t, $ext); delete($opts->{$_}) foreach(keys(%$opts)); $opts = undef; return; } elsif($ret eq 2) { $t = _("CA Key not found\nSigning of the Request failed"); GUI::HELPERS::print_warning($t, $ext); delete($opts->{$_}) foreach(keys(%$opts)); $opts = undef; return; } elsif($ret eq 3) { $t = _("Certificate already existing\nSigning of the Request failed"); GUI::HELPERS::print_warning($t, $ext); delete($opts->{$_}) foreach(keys(%$opts)); $opts = undef; return; } elsif($ret eq 4) { $t = _("Invalid IP Address given\nSigning of the Request failed"); GUI::HELPERS::print_warning($t, $ext); delete($opts->{$_}) foreach(keys(%$opts)); $opts = undef; return; } elsif($ret) { GUI::HELPERS::print_warning( _("Signing of the Request failed"), $ext); delete($opts->{$_}) foreach(keys(%$opts)); $opts = undef; return($ret, $ext); } if(defined($opts->{'mode'}) && $opts->{'mode'} eq "sub") { $certout = $cadir."/newcerts/".$serial.".pem"; $certfile = $opts->{'outfile'}; $certfile2 = $cadir."/certs/".$opts->{'reqname'}.".pem"; } else { $certout = $cadir."/newcerts/".$serial.".pem"; $certfile = $cadir."/certs/".$opts->{'reqname'}.".pem"; #print STDERR "DEBUG: write certificate to: ".$cadir."/certs/".$opts->{'reqname'}.".pem"; } if (not -s $certout) { GUI::HELPERS::print_warning( _("Signing of the Request failed"), $ext); delete($opts->{$_}) foreach(keys(%$opts)); $opts = undef; return; } open(IN, "<$certout") || do { GUI::HELPERS::print_warning(_("Can't read Certificate file")); delete($opts->{$_}) foreach(keys(%$opts)); $opts = undef; return; }; open(OUT, ">$certfile") || do { GUI::HELPERS::print_warning(_("Can't write Certificate file")); delete($opts->{$_}) foreach(keys(%$opts)); $opts = undef; return; }; print OUT while(); if(defined($opts->{'mode'}) && $opts->{'mode'} eq "sub") { close OUT; open(OUT, ">$certfile2") || do { GUI::HELPERS::print_warning(_("Can't write Certificate file")); delete($opts->{$_}) foreach(keys(%$opts)); $opts = undef; return; }; seek(IN, 0, 0); print OUT while(); } close IN; close OUT; GUI::HELPERS::print_info( _("Request signed succesfully.\nCertificate created"), $ext); GUI::HELPERS::set_cursor($main, 1); $main->{'CERT'}->reread_cert($main, HELPERS::dec_base64($opts->{'reqname'})); $main->{'certbrowser'}->update($cadir."/certs", $cadir."/crl/crl.pem", $cadir."/index.txt", 0); delete($opts->{$_}) foreach(keys(%$opts)); $opts = undef; GUI::HELPERS::set_cursor($main, 0); return($ret, $ext); } # # get informations/verifications to import request from file # sub get_import_req { my ($self, $main, $opts, $box) = @_; my ($ret, $ext, $der); $box->destroy() if(defined($box)); my($ca, $parsed, $file, $format); $ca = $main->{'CA'}->{'actca'}; if(not defined($opts)) { $main->show_req_import_dialog(); return; } if(not defined($opts->{'infile'})) { $main->show_req_import_dialog(); GUI::HELPERS::print_warning(_("Please select a Request file first")); return; } if(not -s $opts->{'infile'}) { $main->show_req_import_dialog(); GUI::HELPERS::print_warning( _("Can't find Request file: ").$opts->{'infile'}); return; } open(IN, "<$opts->{'infile'}") || do { GUI::HELPERS::print_warning( _("Can't read Request file:").$opts->{'infile'}); return; }; $opts->{'in'} .= $_ while(); if($opts->{'in'} =~ /-BEGIN[\s\w]+CERTIFICATE REQUEST-/i) { $format = "PEM"; $file = $opts->{'infile'}; } else { $format = "DER"; } if($format eq "DER") { ($ret, $der, $ext) = $opts->{'in'} = $self->{'OpenSSL'}->convdata( 'cmd' => 'req', 'data' => $opts->{'in'}, 'inform' => 'DER', 'outform' => 'PEM' ); if($ret) { GUI::HELPERS::print_warning( _("Error converting Request"), $ext); return; } $opts->{'tmpfile'} = HELPERS::mktmp($self->{'OpenSSL'}->{'tmp'}."/import"); open(TMP, ">$opts->{'tmpfile'}") || do { GUI::HELPERS::print_warning( _("Can't create temporary file: %s: %s"), $opts->{'tmpfile'}, $!); return; }; print TMP $opts->{'in'}; close(TMP); $file = $opts->{'tmpfile'}; } $parsed = $self->{'OpenSSL'}->parsereq( $main->{'CA'}->{$ca}->{'cnf'}, $file); if(not defined($parsed)) { unlink($opts->{'tmpfile'}); GUI::HELPERS::print_warning(_("Parsing Request failed")); return; } $main->show_import_verification("req", $opts, $parsed); return; } # # import request # sub import_req { my ($self, $main, $opts, $parsed, $box) = @_; my ($ca, $cadir); $box->destroy() if(defined($box)); GUI::HELPERS::set_cursor($main, 1); $ca = $main->{'reqbrowser'}->selection_caname(); $cadir = $main->{'reqbrowser'}->selection_cadir(); $opts->{'name'} = HELPERS::gen_name($parsed); $opts->{'reqname'} = HELPERS::enc_base64($opts->{'name'}); $opts->{'reqfile'} = $cadir."/req/".$opts->{'reqname'}.".pem"; open(OUT, ">$opts->{'reqfile'}") || do { unlink($opts->{'tmpfile'}); GUI::HELPERS::set_cursor($main, 0); GUI::HELPERS::print_warning(_("Can't open output file: %s: %s"), $opts->{'reqfile'}, $!); return; }; print OUT $opts->{'in'}; close OUT; $main->{'reqbrowser'}->update($cadir."/req", $cadir."/crl/crl.pem", $cadir."/index.txt", 0); GUI::HELPERS::set_cursor($main, 0); return; } sub parse_req { my ($self, $main, $name, $force) = @_; my ($parsed, $ca, $reqfile, $req); GUI::HELPERS::set_cursor($main, 1); $ca = $main->{'CA'}->{'actca'}; $reqfile = $main->{'CA'}->{$ca}->{'dir'}."/req/".$name.".pem"; $parsed = $self->{'OpenSSL'}->parsereq($main->{'CA'}->{$ca}->{'cnf'}, $reqfile, $force); GUI::HELPERS::set_cursor($main, 0); return($parsed); } 1 tinyca2-0.7.5/lib/HELPERS.pm0000644000175000017500000002101510461475420016754 0ustar schollerscholler00000000000000# Copyright (c) Olaf Gellert and # Stephan Martin # # $Id: HELPERS.pm,v 1.6 2006/06/28 21:50:41 sm Exp $ # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. use strict; package HELPERS; use POSIX; my $version = "0.1"; my $true = 1; my $false = undef; # # generate filename from Subject-DN # sub gen_name { my $opts = shift; my $name = ''; foreach (qw(CN EMAIL OU O L ST C)) { if((not defined($opts->{$_})) || ($opts->{$_} eq '')) { $opts->{$_} = "."; } if($opts->{$_} ne '.' && not ref($opts->{$_})) { $name .= $opts->{$_}; } elsif (ref($opts->{$_})) { if(defined($opts->{$_}->[0])) { $name .= $opts->{$_}->[0]; } else { $name .= " "; } } else { $name .= " "; } $name .= ":" if($_ ne 'C'); } return($name); } # # generate temporary filename # sub mktmp { my $base = shift; my @rand = (); my $ret = ''; do { for(my $i = 0; $i < 8; $i++) { push(@rand, int(rand 26)+65); } my $end = pack("C8", @rand); $ret = $base.$end; } while (-e $ret); return($ret); } # # finished... # sub exit_clean { my ($ret) = @_; $ret = 0 unless(defined $ret); # hack to avoid busy cursor my $rootwin = Gtk2::Gdk->get_default_root_window(); my $cursor = Gtk2::Gdk::Cursor->new('left-ptr'); $rootwin->set_cursor($cursor); Gtk2->main_quit(); exit($ret); } # # split Subject DN and return hash # sub parse_dn { my $dn = shift; my (@dn, $k, $v, $tmp); $tmp = {}; $dn =~ s/,/\//g; @dn = split(/\//, $dn); foreach(@dn) { s/^\s+//; s/\s+$//; ($k, $v) = split(/=/); next if(not defined($k)); if($k =~ /ou/i) { $tmp->{'OU'} or $tmp->{'OU'} = []; push(@{$tmp->{'OU'}}, $v); } else { if($k =~ /emailaddress/i) { $tmp->{'EMAIL'} = $v; } else { $tmp->{uc($k)} = $v; } } } return($tmp); } # # parse (requested) X509 extensions and return hash # sub parse_extensions { my ($lines, $mode) = @_; my ($sep, $i, $k, $v, $tmp); $sep = $mode eq "req"?"Requested extensions:":"X509v3 extensions:"; $tmp = {}; # skip everything before the extensions for($i = 0; defined($lines->[$i]) && $lines->[$i] !~ /^[\s\t]*$sep$/i; $i++) { return(undef) if not defined($lines->[$i]); } $i++; while($i < @{$lines}) { if(($lines->[$i] =~ /^[\s\t]*[^:]+:\s*$/) || ($lines->[$i] =~ /^[\s\t]*[^:]+:\s+.+$/)) { if($lines->[$i] =~ /^[\s\t]*Signature Algorithm/i) { $i++; next; } $k = $lines->[$i]; $k =~ s/[\s\t:]*$//g; $k =~ s/^[\s\t]*//g; $tmp->{$k} = []; $i++; while(($lines->[$i] !~ /^[\s\t].+:\s*$/) && ($lines->[$i] !~ /^[\s\t]*[^:]+:\s+.+$/) && ($lines->[$i] !~ /^[\s\t]*Signature Algorithm/i) && ($i < @{$lines})) { $v = $lines->[$i]; $v =~ s/^[\s]+//g; $v =~ s/[\s]+$//g; $i++; next if $v =~ /^$/; next if $v =~ /Signature Algorithm:/; my @vs = split(/,/, $v); foreach(@vs) { $_ =~ s/^\s//; $_ =~ s/\s$//; push(@{$tmp->{$k}}, $_); } } } else { $i++; } } return($tmp); } # # get last used export directory # sub get_export_dir { my $main = shift; open(EXPIN, "<$main->{'cadir'}/.exportdir") || return(undef); my $dir = ; chomp($dir); return($dir); } # # write last used export directory # sub write_export_dir { my ($main, $dir) = @_; $dir =~ s:/[^/]+$::; open(EXPOUT, ">$main->{'cadir'}/.exportdir") || do { my $t = sprintf(_("Can't write exportdir: %s, %s"), "$main->{'cadir'}/.exportdir", $!); GUI::HELPERS::print_warning($t); return; }; print EXPOUT "$dir\n"; close(EXPOUT); return($dir); } # # generate contents for subjectAltName # sub gen_subjectaltname_contents($@) { my $type = shift || ''; my @input = map { split/,\s*|\s+/, $_ } @_; # split on ',' and ' ' my %output = (); # uniq on the fly if ($type) { # type given => use that one for all foreach my $elem (@input) { $output{$type.$elem} = 1; } } else { # no type => use heuristigcs to guess type per element foreach my $elem (@input) { if ($elem =~ s/^(ip:|dns:)(.*)/$2/i) { $type = uc($1); } elsif ($elem =~ s/^(email:)(.*)/$2/i) { $type = lc($1); } else { if ($elem =~ /^\d+\.\d+\.\d+\.\d+$/) { # it's an IP address $type = 'IP:'; } elsif ($elem =~ /^.+\@.+\.\w+$/) { # it's a mail address $type = 'email:'; } else { $type = 'DNS:' # otherwise it's a DNS name } } $output{$type.$elem} = 1; } } return(wantarray ? keys(%output) : join(', ', keys(%output))); } sub enc_base64 { my $data = shift; my $ret = MIME::Base64::encode($data, ''); $ret =~ tr/\/+/-_/; return $ret; } sub dec_base64 { my $data = shift; $data =~ tr/-_/\/+/; return MIME::Base64::decode($data); } 1 __END__ =head1 NAME HELPERS - helper functions for TinyCA, doing small jobs not related to the GUI =head1 SYNOPSIS use HELPERS; $name = HELPERS::gen_name($opts); $tmpnam = HELPERS::mktmp($base); $dnhash = HELPERS::parse_dn($dnstring); $exthash = HELPERS::parse_extensions($mode, $lines); $subjaltname = HELPERS::gen_subjectaltname_contents($type, @list); exit_clean($retcode); =head1 DESCRIPTION HELPERS.pm is just a library, containing some useful functions used by other TinyCA modules. =head1 FUNCTIONS =head2 HELPERS::gen_name($opts) =over 1 returns a string with the TinyCA filename for a certificate, request or key. The filename is generated from the following parts of the Subject DN from the related request or certificate if present: CN EMAIL OU O L ST C These parts need to be elements in the given options hash. =back =head2 HELPERS::mktmp($base) =over 1 returns a string, containing a uniqe filename starting with $base, which is not existing yet. $base needs to be an absolute path to allow HELPERS::mktmp() reliable check that the filename is really uniqe. =back =head2 HELPERS::parse_dn($dnstring) =over 1 returns the reference to a hash containing all elements of the Subject DN, given in $dnstring. The element OU is included as an array refernce in the hash, with an array containing all values of OU. =back =head2 HELPERS::parse_extensions($mode, $lines) =over 1 returns the reference to a hash containing all X509 extensions of the given request or certificate. The request or certificate is given in textform as an array reference with the array containing one line per element. $mode contains one of the strings "req" or "cert" depending on the type of the data. =back =head2 HELPERS::exit_clean($retcode) =over 1 does nothing yet, than closing the Gtk application returning the exitcode given in $retcode. =back =head2 $main->HELPERS::get_export_dir() =over 1 Get last used export directory. =back =head2 $main->HELPERS::write_export-dir($dir) =over 1 Store last used export directory =back =head2 HELPERS::gen_subjectaltname_contents($type, @list) =over 1 Generate a string suitable for the use as subjhectAltname contets for OpenSSL. If $Type is not empty create the contents of that type only, otherwise use either the type prefix of the list elements or the following heuristics to find the type for the appropriate elements: If the element looks like an IP address in dotted quad notation set then treat it as one. If the element contains a '@' followed by a '.' and a sequence of letters then treat the element as an email address. In all other cases treat it as a DNS name. =back =cut tinyca2-0.7.5/lib/OpenSSL.pm0000644000175000017500000007005010461475420017140 0ustar schollerscholler00000000000000# Copyright (c) Stephan Martin # # $Id: OpenSSL.pm,v 1.14 2006/07/13 22:36:13 sm Exp $ # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. use strict; package OpenSSL; use POSIX; use IPC::Open3; use Time::Local; sub new { my $self = {}; my ($that, $opensslbin, $tmpdir) = @_; my $class = ref($that) || $that; $self->{'bin'} = $opensslbin; my $t = sprintf("Can't execute OpenSSL: %s", $self->{'bin'}); GUI::HELPERS::print_error($t) if (! -x $self->{'bin'}); $self->{'tmp'} = $tmpdir; open(TEST, "$self->{'bin'} version|"); my $v = ; close(TEST); # set version (format: e.g. 0.9.7 or 0.9.7a) if($v =~ /\b(0\.9\.[678][a-z]?)\b/) { $self->{'version'} = $1; } # CRL output was broken before openssl 0.9.7f if($v =~ /\b0\.9\.[0-6][a-z]?\b/ || $v =~ /\b0\.9\.7[a-e]?\b/) { $self->{'broken'} = 1; } else { $self->{'broken'} = 0; } bless($self, $class); } sub newkey { my $self = shift; my $opts = { @_ }; my ($cmd, $ext, $c, $i, $box, $bar, $t, $param, $pid, $ret); if(defined($opts->{'algo'}) && $opts->{'algo'} eq "dsa") { $param = HELPERS::mktmp($self->{'tmp'}."/param"); $cmd = "$self->{'bin'} dsaparam"; $cmd .= " -out $param"; $cmd .= " $opts->{'bits'}"; my($rdfh, $wtfh); $ext = "$cmd\n\n"; $pid = open3($wtfh, $rdfh, $rdfh, $cmd); $t = _("Creating DSA key in progress..."); ($box, $bar) = GUI::HELPERS::create_activity_bar($t); $i = 0; while(defined($c = getc($rdfh))) { $ext .= $c; $bar->pulse(); while(Gtk2->events_pending) { Gtk2->main_iteration; } } $box->destroy(); waitpid($pid, 0); $ret = $? >> 8; return($ret, $ext) if($ret); $cmd = "$self->{'bin'} gendsa"; $cmd .= " -des3"; $cmd .= " -passout env:SSLPASS"; $cmd .= " -out \"$opts->{'outfile'}\""; $cmd .= " $param"; } else { $cmd = "$self->{'bin'} genrsa"; $cmd .= " -des3"; $cmd .= " -passout env:SSLPASS"; $cmd .= " -out \"$opts->{'outfile'}\""; $cmd .= " $opts->{'bits'}"; } $ENV{'SSLPASS'} = $opts->{'pass'}; my($rdfh, $wtfh); $ext = "$cmd\n\n"; $pid = open3($wtfh, $rdfh, $rdfh, $cmd); $t = _("Creating RSA key in progress..."); ($box, $bar) = GUI::HELPERS::create_activity_bar($t); $i = 0; while(defined($c = getc($rdfh))) { $ext .= $c; #$bar->update(($i++%100)/100); $bar->pulse(); while(Gtk2->events_pending) { Gtk2->main_iteration; } } $box->destroy(); waitpid($pid, 0); $ret = $? >> 8; if(defined($param) && $param ne '') { unlink($param); } delete($ENV{'SSLPASS'}); return($ret, $ext); } sub signreq { my $self = shift; my $opts = { @_ }; my ($ext, $cmd, $pid, $ret); $cmd = "$self->{'bin'} ca -batch"; $cmd .= " -passin env:SSLPASS -notext"; $cmd .= " -config $opts->{'config'}"; $cmd .= " -name $opts->{'caname'}" if($opts->{'caname'} ne ""); $cmd .= " -in \"$opts->{'reqfile'}\""; $cmd .= " -days $opts->{'days'}"; $cmd .= " -preserveDN"; $cmd .= " -md $opts->{'digest'}" if($opts->{'digest'}); if(defined($opts->{'mode'}) && $opts->{'mode'} eq "sub") { $cmd .= " -keyfile \"$opts->{'keyfile'}\""; $cmd .= " -cert \"$opts->{'cacertfile'}\""; $cmd .= " -outdir \"$opts->{'outdir'}\""; $ENV{'SSLPASS'} = $opts->{'parentpw'}; } else { $ENV{'SSLPASS'} = $opts->{'pass'}; } if(defined($opts->{'sslservername'}) && $opts->{'sslservername'} ne 'none') { $ENV{'NSSSLSERVERNAME'} = $opts->{'sslservername'}; } if(defined($opts->{'revocationurl'}) && $opts->{'revocationurl'} ne 'none') { $ENV{'NSREVOCATIONURL'} = $opts->{'revocationurl'}; } if(defined($opts->{'renewalurl'}) && $opts->{'renewalurl'} ne 'none') { $ENV{'NSRENEWALURL'} = $opts->{'renewalurl'}; } if($opts->{'subjaltname'} ne 'none' && $opts->{'subjaltname'} ne 'emailcopy') { if($opts->{'subjaltnametype'} eq 'ip') { $ENV{'SUBJECTALTNAMEIP'} = HELPERS::gen_subjectaltname_contents('IP:', $opts->{'subjaltname'}); }elsif($opts->{'subjaltnametype'} eq 'dns') { $ENV{'SUBJECTALTNAMEDNS'} = HELPERS::gen_subjectaltname_contents('DNS:', $opts->{'subjaltname'}); }elsif($opts->{'subjaltnametype'} eq 'mail') { $ENV{'SUBJECTALTNAMEEMAIL'} = HELPERS::gen_subjectaltname_contents('email:', $opts->{'subjaltname'}); }elsif($opts->{'subjaltnametype'} eq 'raw') { $ENV{'SUBJECTALTNAMERAW'} = HELPERS::gen_subjectaltname_contents(undef, $opts->{'subjaltname'}); } } if($opts->{'extendedkeyusage'} ne 'none') { $ENV{'EXTENDEDKEYUSAGE'} = $opts->{'extendedkeyusage'}; } if(defined($opts->{'noemaildn'}) && $opts->{'noemaildn'}) { $cmd .= " -noemailDN"; } # print STDERR "DEBUG call cmd: $cmd\n"; my($rdfh, $wtfh); $pid = open3($wtfh, $rdfh, $rdfh, $cmd); $ext = "$cmd\n\n"; while(<$rdfh>) { # print STDERR "DEBUG cmd returns: $_\n"; $ext .= $_; if($_ =~ /unable to load CA private key/) { delete($ENV{'SSLPASS'}); $ENV{'NSSSLSERVERNAME'} = 'dummy'; $ENV{'NSREVOCATIONURL'} = 'dummy'; $ENV{'NSRENEWALURL'} = 'dummy'; $ENV{'SUBJECTALTNAMEIP'} = 'dummy'; $ENV{'SUBJECTALTNAMEDNS'} = 'dummy'; $ENV{'SUBJECTALTNAMEEMAIL'} = 'dummy'; $ENV{'SUBJECTALTNAMERAW'} = 'dummy'; $ENV{'EXTENDEDKEYUSAGE'} = 'dummy'; waitpid($pid, 0); return(1, $ext); } elsif($_ =~ /trying to load CA private key/) { delete($ENV{'SSLPASS'}); $ENV{'NSSSLSERVERNAME'} = 'dummy'; $ENV{'NSREVOCATIONURL'} = 'dummy'; $ENV{'NSRENEWALURL'} = 'dummy'; $ENV{'SUBJECTALTNAMEIP'} = 'dummy'; $ENV{'SUBJECTALTNAMEDNS'} = 'dummy'; $ENV{'SUBJECTALTNAMEEMAIL'} = 'dummy'; $ENV{'SUBJECTALTNAMERAW'} = 'dummy'; $ENV{'EXTENDEDKEYUSAGE'} = 'dummy'; waitpid($pid, 0); return(2, $ext); } elsif($_ =~ /There is already a certificate for/) { delete($ENV{'SSLPASS'}); $ENV{'NSSSLSERVERNAME'} = 'dummy'; $ENV{'NSREVOCATIONURL'} = 'dummy'; $ENV{'NSRENEWALURL'} = 'dummy'; $ENV{'SUBJECTALTNAMEIP'} = 'dummy'; $ENV{'SUBJECTALTNAMEDNS'} = 'dummy'; $ENV{'SUBJECTALTNAMEEMAIL'} = 'dummy'; $ENV{'SUBJECTALTNAMERAW'} = 'dummy'; $ENV{'EXTENDEDKEYUSAGE'} = 'dummy'; waitpid($pid, 0); return(3, $ext); } elsif($_ =~ /bad ip address/) { delete($ENV{'SSLPASS'}); $ENV{'NSSSLSERVERNAME'} = 'dummy'; $ENV{'NSREVOCATIONURL'} = 'dummy'; $ENV{'NSRENEWALURL'} = 'dummy'; $ENV{'SUBJECTALTNAMEIP'} = 'dummy'; $ENV{'SUBJECTALTNAMEDNS'} = 'dummy'; $ENV{'SUBJECTALTNAMEEMAIL'} = 'dummy'; $ENV{'SUBJECTALTNAMERAW'} = 'dummy'; $ENV{'EXTENDEDKEYUSAGE'} = 'dummy'; waitpid($pid, 0); return(4, $ext); } } waitpid($pid, 0); $ret = $? >> 8; delete($ENV{'SSLPASS'}); $ENV{'NSSSLSERVERNAME'} = 'dummy'; $ENV{'NSREVOCATIONURL'} = 'dummy'; $ENV{'NSRENEWALURL'} = 'dummy'; $ENV{'SUBJECTALTNAMEIP'} = 'dummy'; $ENV{'SUBJECTALTNAMEDNS'} = 'dummy'; $ENV{'SUBJECTALTNAMEEMAIL'} = 'dummy'; $ENV{'SUBJECTALTNAMERAW'} = 'dummy'; $ENV{'EXTENDEDKEYUSAGE'} = 'dummy'; return($ret, $ext); } sub revoke { my $self = shift; my $opts = { @_ }; my ($ext, $cmd, $ret, $pid); $cmd = "$self->{'bin'} ca"; $cmd .= " -passin env:SSLPASS"; $cmd .= " -config $opts->{'config'}"; $cmd .= " -revoke $opts->{'infile'}"; if($opts->{'reason'} ne 'none') { $cmd .= " -crl_reason $opts->{'reason'}"; } $ENV{'SSLPASS'} = $opts->{'pass'}; my($rdfh, $wtfh); $ext = "$cmd\n\n"; $pid = open3($wtfh, $rdfh, $rdfh, $cmd); while(<$rdfh>) { $ext .= $_; if($_ =~ /unable to load CA private key/) { delete($ENV{'SSLPASS'}); waitpid($pid, 0); return(1, $ext); } elsif($_ =~ /trying to load CA private key/) { delete($ENV{'SSLPASS'}); waitpid($pid, 0); return(2, $ext); } elsif($_ =~ /^ERROR:/) { delete($ENV{'SSLPASS'}); waitpid($pid, 0); return(3, $ext); } } waitpid($pid, 0); $ret = $? >> 8; delete($ENV{'SSLPASS'}); return($ret, $ext); } sub newreq { my $self = shift; my $opts = { @_ }; my ($ext, $ret, $cmd, $pid); $cmd = "$self->{'bin'} req -new"; $cmd .= " -keyform PEM"; $cmd .= " -outform PEM"; $cmd .= " -passin env:SSLPASS"; $cmd .= " -config $opts->{'config'}"; $cmd .= " -out $opts->{'outfile'}"; $cmd .= " -key $opts->{'keyfile'}"; $cmd .= " -"."$opts->{'digest'}"; $ENV{'SSLPASS'} = $opts->{'pass'}; print "DEBUG call: $cmd\n"; my($rdfh, $wtfh); $ext = "$cmd\n\n"; $pid = open3($wtfh, $rdfh, $rdfh, $cmd); foreach(@{$opts->{'dn'}}) { print "DEBUG: add to dn: $_\n"; if(defined($_)) { print $wtfh "$_\n"; } else { print $wtfh ".\n"; } } while(<$rdfh>) { $ext .= $_; } waitpid($pid, 0); $ret = $? >> 8; print "DEBUG return: $ext\n"; delete($ENV{'SSLPASS'}); return($ret, $ext); } sub newcert { my $self = shift; my $opts = { @_ }; my ($ext, $cmd, $ret, $pid); $cmd = "$self->{'bin'} req -x509"; $cmd .= " -keyform PEM"; $cmd .= " -outform PEM"; $cmd .= " -passin env:SSLPASS"; $cmd .= " -config $opts->{'config'}"; $cmd .= " -out \"$opts->{'outfile'}\""; $cmd .= " -key \"$opts->{'keyfile'}\""; $cmd .= " -in \"$opts->{'reqfile'}\""; $cmd .= " -days $opts->{'days'}"; $cmd .= " -"."$opts->{'digest'}"; $ENV{'SSLPASS'} = $opts->{'pass'}; my($rdfh, $wtfh); $ext = "$cmd\n\n"; $pid = open3($wtfh, $rdfh, $rdfh, $cmd); while(<$rdfh>) { $ext .= $_; } waitpid($pid, 0); $ret = $? >> 8; delete($ENV{'SSLPASS'}); return($ret, $ext); } sub newcrl { my $self = shift; my $opts = { @_ }; my ($out, $ext, $tmpfile, $cmd, $ret, $pid, $crl); $tmpfile = HELPERS::mktmp($self->{'tmp'}."/crl"); $cmd = "$self->{'bin'} ca -gencrl"; $cmd .= " -passin env:SSLPASS"; $cmd .= " -config $opts->{'config'}"; $cmd .= " -out $tmpfile"; $cmd .= " -crldays $opts->{'crldays'}"; $ENV{'SSLPASS'} = $opts->{ 'pass'}; my($rdfh, $wtfh); $ext = "$cmd\n\n"; #print STDERR "DEBUG: cmd: $cmd"; $pid = open3($wtfh, $rdfh, $rdfh, $cmd); while(<$rdfh>) { $ext .= $_; #print STDERR "DEBUG: cmd return: $_"; if($_ =~ /unable to load CA private key/) { delete($ENV{'SSLPASS'}); waitpid($pid, 0); return(1, $ext); } elsif($_ =~ /trying to load CA private key/) { delete($ENV{'SSLPASS'}); waitpid($pid, 0); return(2, $ext); } } waitpid($pid, 0); $ret = $?>>8; delete($ENV{'SSLPASS'}); return($ret, $ext) if($ret); $crl = $self->parsecrl($tmpfile, 1); unlink( $tmpfile); $opts->{'format'} = 'PEM' if ( !defined( $opts->{ 'format'})); if($opts->{'format'} eq 'PEM') { $out = $crl->{'PEM'}; } elsif ($opts->{'format'} eq 'DER') { $out = $crl->{'DER'}; } elsif ($opts->{'format'} eq 'TXT') { $out = $crl->{'TXT'}; } else { $out = $crl->{'PEM'}; } unlink( $opts->{'outfile'}); open(OUT, ">$opts->{'outfile'}") or return; print OUT $out; close OUT; return($ret, $ext); } sub parsecrl { my ($self, $file, $force) = @_; my $tmp = {}; my (@lines, $i, $t, $ext, $ret); # check if crl is cached if($self->{'CACHE'}->{$file} && not $force) { return($self->{'CACHE'}->{$file}); } delete($self->{'CACHE'}->{$file}); open(IN, $file) || do { $t = sprintf(_("Can't open CRL '%s': %s"), $file, $!); GUI::HELPERS::print_warning($t); return; }; # convert crl to PEM, DER and TEXT $tmp->{'PEM'} .= $_ while(); ($ret, $tmp->{'TXT'}, $ext) = $self->convdata( 'cmd' => 'crl', 'data' => $tmp->{'PEM'}, 'inform' => 'PEM', 'outform' => 'TEXT' ); if($ret) { $t = _("Error converting CRL"); GUI::HELPERS::print_warning($t, $ext); return; } ($ret, $tmp->{'DER'}, $ext) = $self->convdata( 'cmd' => 'crl', 'data' => $tmp->{'PEM'}, 'inform' => 'PEM', 'outform' => 'DER' ); if($ret) { $t = _("Error converting CRL"); GUI::HELPERS::print_warning($t, $ext); return; } # get "normal infos" if ($tmp->{'TXT'}) { @lines = split(/\n/, $tmp->{'TXT'}); } else { @lines = (); } foreach(@lines) { if ($_ =~ /Signature Algorithm.*: (\w+)/i) { $tmp->{'SIG_ALGORITHM'} = $1; } elsif ($_ =~ /Issuer: (.+)/i) { $tmp->{'ISSUER'} = $1; $tmp->{'ISSUER'} =~ s/,/\//g; $tmp->{'ISSUER'} =~ s/\/ /\//g; $tmp->{'ISSUER'} =~ s/^\///; } elsif ($_ =~ /Last Update.*: (.+)/i) { $tmp->{'LAST_UPDATE'} = $1; } elsif ($_ =~ /Next Update.*: (.+)/i) { $tmp->{'NEXT_UPDATE'} = $1; } } # get revoked certs $tmp->{'LIST'} = []; for($i = 0; ($i < scalar(@lines)) && ($lines[$i] !~ /^[\s\t]*Revoked Certificates:$/i); $i++) { $self->{'CACHE'}->{$file} = $tmp; return($tmp) if ($lines[$i] =~ /No Revoked Certificates/i); } $i++; while($i < @lines) { if($lines[$i] =~ /Serial Number.*: (.+)/i) { my $t= {}; $t->{'SERIAL'} = length($1)%2?"0".uc($1):uc($1); $i++; if($lines[$i] =~ /Revocation Date: (.*)/i ) { $t->{'DATE'} = $1; $i++; #print STDERR "read CRL: $t->{'SERIAL'}\n"; push(@{$tmp->{'LIST'}}, $t); } else { $t = sprintf("CRL seems to be corrupt: %s\n", $file); GUI::HELPERS::print_warning($t); return; } } else { $i++; } } $self->{'CACHE'}->{$file} = $tmp; return($tmp); } sub parsecert { my ($self, $crlfile, $indexfile, $file, $force) = @_; my $tmp = {}; my (@lines, $dn, $i, $c, $v, $k, $cmd, $crl, $time, $t, $ext, $ret, $pid); $time = time(); $force && delete($self->{'CACHE'}->{$file}); #print STDERR "DEBUG: got force $force\n"; # check if certificate is cached if($self->{'CACHE'}->{$file}) { # print "DEBUG: use cached certificate $file\n"; return($self->{'CACHE'}->{$file}); } # print "DEBUG: parse certificate $file\n"; open(IN, $file) || do { $t = sprintf("Can't open Certificate '%s': %s", $file, $!); GUI::HELPERS::print_warning($t); return; }; # convert certificate to PEM, DER and TEXT $tmp->{'PEM'} .= $_ while(); ($ret, $tmp->{'TEXT'}, $ext) = $self->convdata( 'cmd' => 'x509', 'data' => $tmp->{'PEM'}, 'inform' => 'PEM', 'outform' => 'TEXT' ); if($ret) { $t = _("Error converting Certificate"); GUI::HELPERS::print_warning($t, $ext); return; } ($ret, $tmp->{'DER'}, $ext) = $self->convdata( 'cmd' => 'x509', 'data' => $tmp->{'PEM'}, 'inform' => 'PEM', 'outform' => 'DER' ); if($ret) { $t = _("Error converting Certificate"); GUI::HELPERS::print_warning($t, $ext); return; } # get "normal infos" @lines = split(/\n/, $tmp->{'TEXT'}); foreach(@lines) { if($_ =~ /Serial Number.*: (.+) /i) { # shit, -text shows serial as decimal number :( # dirty fix (incompleted) --curly $i = sprintf( "%x", $1); $tmp->{'SERIAL'} = length($i)%2?"0".uc($i):uc($i); } elsif ($_ =~ /Signature Algorithm.*: (\w+)/i) { $tmp->{'SIG_ALGORITHM'} = $1; } elsif ($_ =~ /Issuer: (.+)/i) { $tmp->{'ISSUER'} = $1; $tmp->{'ISSUER'} =~ s/,/\//g; $tmp->{'ISSUER'} =~ s/\/ /\//g; $tmp->{'ISSUER'} =~ s/^\///; } elsif ($_ =~ /Not Before.*: (.+)/i) { $tmp->{'NOTBEFORE'} = $1; } elsif ($_ =~ /Not After.*: (.+)/i) { $tmp->{'NOTAFTER'} = $1; } elsif ($_ =~ /Public Key Algorithm.*: (.+)/i) { $tmp->{'PK_ALGORITHM'} = $1; } elsif ($_ =~ /Modulus \((\d+) .*\)/i) { $tmp->{'KEYSIZE'} = $1; } elsif ($_ =~ /Subject.*: (.+)/i) { $tmp->{'DN'} = $1; } } # parse subject DN $dn = HELPERS::parse_dn($tmp->{'DN'}); foreach(keys(%$dn)) { $tmp->{$_} = $dn->{$_}; } # parse issuer DN $tmp->{'ISSUERDN'} = HELPERS::parse_dn($tmp->{'ISSUER'}); # get extensions $tmp->{'EXT'} = HELPERS::parse_extensions(\@lines, "cert"); # get fingerprint $cmd = "$self->{'bin'} x509 -noout -fingerprint -md5 -in $file"; my($rdfh, $wtfh); $ext = "$cmd\n\n"; $pid = open3($wtfh, $rdfh, $rdfh, $cmd); while(<$rdfh>){ $ext .= $_; ($k, $v) = split(/=/); $tmp->{'FINGERPRINTMD5'} = $v if($k =~ /MD5 Fingerprint/i); chomp($tmp->{'FINGERPRINTMD5'}); } waitpid($pid, 0); $ret = $? >> 8; if($ret) { $t = _("Error reading fingerprint from Certificate"); GUI::HELPERS::print_warning($t, $ext); } $cmd = "$self->{'bin'} x509 -noout -fingerprint -sha1 -in $file"; $ext = "$cmd\n\n"; $pid = open3($wtfh, $rdfh, $rdfh, $cmd); while(<$rdfh>){ $ext .= $_; ($k, $v) = split(/=/); $tmp->{'FINGERPRINTSHA1'} = $v if($k =~ /SHA1 Fingerprint/i); chomp($tmp->{'FINGERPRINTSHA1'}); } waitpid($pid, 0); $ret = $? >> 8; if($ret) { $t = _("Error reading fingerprint from Certificate"); GUI::HELPERS::print_warning($t, $ext); } # get subject in openssl format $cmd = "$self->{'bin'} x509 -noout -subject -in $file"; $ext = "$cmd\n\n"; $pid = open3($wtfh, $rdfh, $rdfh, $cmd); while(<$rdfh>){ $ext .= $_; if($_ =~ /subject= (.*)/) { $tmp->{'SUBJECT'} = $1; } } waitpid($pid, 0); $ret = $? >> 8; if($ret) { $t = _("Error reading subject from Certificate"); GUI::HELPERS::print_warning($t, $ext); } $tmp->{'EXPDATE'} = _get_date( $tmp->{'NOTAFTER'}); if(defined($crlfile) && defined($indexfile)) { $crl = $self->parsecrl($crlfile, 1); #print STDERR "DEBUG: parsed crl $crlfile : $crl\n"; defined($crl) || GUI::HELPERS::print_error(_("Can't read CRL")); $tmp->{'STATUS'} = _("VALID"); if($tmp->{'EXPDATE'} < $time) { $tmp->{'STATUS'} = _("EXPIRED"); # keep database up to date if($crl->{'ISSUER'} eq $tmp->{'ISSUER'}) { _set_expired($tmp->{'SERIAL'}, $indexfile); } } if (defined($tmp->{'SERIAL'})) { foreach my $revoked (@{$crl->{'LIST'}}) { #print STDERR "DEBUG: check tmp: $tmp->{'SERIAL'}\n"; #print STDERR "DEBUG: check revoked: $revoked->{'SERIAL'}\n"; next if ($tmp->{'SERIAL'} ne $revoked->{'SERIAL'}); if ($tmp->{'SERIAL'} eq $revoked->{'SERIAL'}) { $tmp->{'STATUS'} = _("REVOKED"); } } } } else { $tmp->{'STATUS'} = _("UNDEFINED"); } $self->{'CACHE'}->{$file} = $tmp; return($tmp); } sub parsereq { my ($self, $config, $file, $force) = @_; my $tmp = {}; my (@lines, $dn, $i, $c, $v, $k, $cmd, $t, $ext, $ret); # check if request is cached if($self->{'CACHE'}->{$file} && !$force) { # print STDERR "DEBUG return from CACHE $file\n"; return($self->{'CACHE'}->{$file}); } elsif($force) { # print STDERR "DEBUG delete from CACHE $file\n"; delete($self->{'CACHE'}->{$file}); } else { # print STDERR "DEBUG parse into CACHE $file\n"; } open(IN, $file) || do { $t = sprintf(_("Can't open Request file %s: %s"), $file, $!); GUI::HELPERS::print_warning($t); return; }; # convert request to PEM, DER and TEXT $tmp->{'PEM'} .= $_ while(); ($ret, $tmp->{'TEXT'}, $ext) = $self->convdata( 'cmd' => 'req', 'config' => $config, 'data' => $tmp->{'PEM'}, 'inform' => 'PEM', 'outform' => 'TEXT' ); if($ret) { $t = _("Error converting Request"); GUI::HELPERS::print_warning($t, $ext); return; } ($ret, $tmp->{'DER'}, $ext) = $self->convdata( 'cmd' => 'req', 'config' => $config, 'data' => $tmp->{'PEM'}, 'inform' => 'PEM', 'outform' => 'DER' ); if($ret) { $t = _("Error converting Request"); GUI::HELPERS::print_warning($t, $ext); return; } # get "normal infos" @lines = split(/\n/, $tmp->{'TEXT'}); foreach(@lines) { if ($_ =~ /Signature Algorithm.*: (\w+)/i) { $tmp->{'SIG_ALGORITHM'} = $1; } elsif ($_ =~ /Public Key Algorithm.*: (.+)/i) { $tmp->{'PK_ALGORITHM'} = $1; } elsif ($_ =~ /Modulus \((\d+) .*\)/i) { $tmp->{'KEYSIZE'} = $1; # print STDERR "read keysize: $tmp->{'KEYSIZE'}\n"; } elsif ($_ =~ /Subject.*: (.+)/i) { $tmp->{'DN'} = $1; } elsif ($_ =~ /Version: \d.*/i) { $tmp->{'TYPE'} = 'PKCS#10'; } } $dn = HELPERS::parse_dn($tmp->{'DN'}); foreach(keys(%$dn)) { $tmp->{$_} = $dn->{$_}; } # get extensions $tmp->{'EXT'} = HELPERS::parse_extensions(\@lines, "req"); $self->{'CACHE'}->{$file} = $tmp; return($tmp); } sub convdata { my $self = shift; my $opts = { @_ }; my ($tmp, $ext, $ret, $file, $pid, $cmd); $file = HELPERS::mktmp($self->{'tmp'}."/data"); $cmd = "$self->{'bin'} $opts->{'cmd'}"; $cmd .= " -config $opts->{'config'}" if(defined($opts->{'config'})); $cmd .= " -inform $opts->{'inform'}"; $cmd .= " -out \"$file\""; if($opts->{'outform'} eq 'TEXT') { $cmd .= " -text -noout"; } else { $cmd .= " -outform $opts->{'outform'}"; } my($rdfh, $wtfh); $ext = "$cmd\n\n"; $pid = open3($wtfh, $rdfh, $rdfh, $cmd); print $wtfh "$opts->{'data'}\n"; while(<$rdfh>){ $ext .= $_; # print STDERR "DEBUG: cmd ret: $_"; }; waitpid($pid, 0); $ret = $?>>8; if($self->{'broken'}) { if(($ret != 0 && $opts->{'cmd'} ne 'crl') || ($ret != 0 && $opts->{'outform'} ne 'TEXT' && $opts->{'cmd'} eq 'crl') || ($ret != 1 && $opts->{'outform'} eq 'TEXT' && $opts->{'cmd'} eq 'crl')) { unlink($file); return($ret, undef, $ext); } else { $ret = 0; } } else { # wow, they fixed it :-) if($ret != 0) { unlink($file); return($ret, undef, $ext); } else { $ret = 0; } } open(IN, $file) || do { my $t = sprintf(_("Can't open file %s: %s"), $file, $!); GUI::HELPERS::print_warning($t); return; }; $tmp .= $_ while(); close(IN); unlink($file); return($ret, $tmp, $ext); } sub convkey { my $self = shift; my $opts = { @_ }; my ($tmp, $ext, $pid, $ret); my $file = HELPERS::mktmp($self->{'tmp'}."/key"); my $cmd = "$self->{'bin'}"; # print STDERR "DEBUG: got type: $opts->{'type'}\n"; if($opts->{'type'} eq "RSA") { $cmd .= " rsa"; } elsif($opts->{'type'} eq "DSA") { $cmd .= " dsa"; } $cmd .= " -inform $opts->{'inform'}"; $cmd .= " -outform $opts->{'outform'}"; $cmd .= " -in \"$opts->{'keyfile'}\""; $cmd .= " -out \"$file\""; $cmd .= " -passin env:SSLPASS"; $cmd .= " -passout env:SSLPASSOUT -des3" if(not $opts->{'nopass'}); $ENV{'SSLPASS'} = defined($opts->{'oldpass'}) ? $opts->{'oldpass'} : $opts->{'pass'}; $ENV{'SSLPASSOUT'} = $opts->{'pass'} if(not $opts->{'nopass'}); my($rdfh, $wtfh); $ext = "$cmd\n\n"; $pid = open3($wtfh, $rdfh, $rdfh, $cmd); while(<$rdfh>) { $ext .= $_; if($_ =~ /unable to load key/) { delete($ENV{'SSLPASS'}); delete($ENV{'SSLPASSOUT'}); return(1, $ext); } } waitpid($pid, 0); $ret = $? >> 8; delete($ENV{'SSLPASS'}); delete($ENV{'SSLPASSOUT'}); return(1, $ext) if($ret); open(IN, $file) || return(undef); $tmp .= $_ while(); close(IN); unlink($file); return($tmp); } sub genp12 { my $self = shift; my $opts = { @_ }; my($cmd, $ext, $ret, $pid); $cmd = "$self->{'bin'} pkcs12 -export"; $cmd .= " -out \"$opts->{'outfile'}\""; $cmd .= " -in \"$opts->{'certfile'}\""; $cmd .= " -inkey \"$opts->{'keyfile'}\""; if(not $opts->{'nopass'}) { $cmd .= " -passout env:P12PASS"; } else { $cmd .= " -passout pass:"; } $cmd .= " -passin env:SSLPASS"; $cmd .= " -certfile $opts->{'cafile'}" if($opts->{'includeca'}); $cmd .= " -nodes " if($opts->{'nopass'}); $cmd .= " -name \"$opts->{'friendly'}\"" if($opts->{'friendly'} ne ""); $ENV{'P12PASS'} = $opts->{'p12passwd'} if(not $opts->{'nopass'}); $ENV{'SSLPASS'} = $opts->{'passwd'}; my($rdfh, $wtfh); $ext = "$cmd\n\n"; $pid = open3($wtfh, $rdfh, $rdfh, $cmd); while(<$rdfh>) { $ext .= $_; if($_ =~ /Error loading private key/) { delete($ENV{'SSLPASS'}); delete($ENV{'P12PASS'}); return(1, $ext); } } waitpid($pid, 0); $ret = $? >> 8; delete($ENV{'P12PASS'}); delete($ENV{'SSLPASS'}); return($ret, $ext); } sub read_index { my ($self, $index) = @_; my (@lines, @index); open(IN, "<$index") || do { my $t = sprintf(_("Can't read index %s: %s"), $index, $!); GUI::HELPERS::print_warning($t); return; }; @lines = ; close(IN); foreach my $l (@lines) { my $tmp = {}; ($tmp->{'STATUS'}, $tmp->{'EXPDATE'}, $tmp->{'REVDATE'}, $tmp->{'SERIAL'}, $tmp->{'xxx'}, $tmp->{'DN'}) = split(/\t/, $l); ($tmp->{'REVDATE'}, $tmp->{'REVREASON'}) = split(/,/, $tmp->{'REVDATE'}); $tmp->{'EXPDATE'} = _get_index_date($tmp->{'EXPDATE'}); if(defined($tmp->{'REVDATE'}) && ($tmp->{'REVDATE'} ne '')) { $tmp->{'REVDATE'} = _get_index_date( $tmp->{'REVDATE'}); } push(@index, $tmp); } return(@index); } sub _set_expired { my ($serial, $index) =@_; open(IN, "<$index") || do { my $t = sprintf(_("Can't read index %s: %s"), $index, $!); GUI::HELPERS::print_warning($t); return; }; my @lines = ; close IN; open(OUT, ">$index") || do { my $t = sprintf(_("Can't write index %s: %s"), $index, $!); GUI::HELPERS::print_warning($t); return; }; foreach my $l (@lines) { if($l =~ /\t$serial\t/) { $l =~ s/^V/E/; } print OUT $l; } close OUT; return; } sub _get_date { my $string = shift; $string =~ s/ / /g; my @t1 = split(/ /, $string); my @t2 = split(/:/, $t1[2]); $t1[0] = _get_index($t1[0]); my $ret = Time::Local::timelocal($t2[2],$t2[1],$t2[0],$t1[1],$t1[0],$t1[3]); return($ret); } sub _get_index_date { my $string = shift; my ($y, $m, $d); $y = substr($string, 0, 2) + 2000; $m = substr($string, 2, 2) - 1; $d = substr($string, 4, 2); my $ret = Time::Local::timelocal(0, 0, 0, $d, $m, $y); return($ret); } sub _get_index { my $m = shift; my @a = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec); for(my $i = 0; $a[$i]; $i++) { return $i if($a[$i] eq $m); } } 1 tinyca2-0.7.5/lib/TCONFIG.pm0000644000175000017500000004470310461475420016754 0ustar schollerscholler00000000000000# Copyright (c) Stephan Martin # # $Id: TCONFIG.pm,v 1.2 2006/06/28 21:50:42 sm Exp $ # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. use strict; package TCONFIG; use POSIX; sub new { my $self = {}; my $that = shift; my $class = ref($that) || $that; bless($self, $class); } sub init_config { my ($self, $main, $ca) = @_; my($file, @lines, $i, $section, $l, $k, $v); if(not defined($ca)) { $ca = $main->{'CA'}->{'actca'}; } if(not defined($ca)) { GUI::HELPERS::print_warning(_("Please select a CA first")); return; } $file = $main->{'CA'}->{$ca}->{'cnf'}; open(IN, "<$file") || do { GUI::HELPERS::print_warning(_("Can't open configuration")); return; }; @lines = ; close IN; chomp(@lines); # clean old configuration foreach $k (keys(%$self)) { delete($self->{$k}); } foreach $l (@lines) { next if $l =~ /^#/; next if $l =~ /^$/; next if $l =~ /^ *$/; # find section if($l =~ /\[\s*([^\s]+)\s*\]/) { $section = $1; } elsif ($l =~ /^([^\s\t]+)[\s\t]*=[\s\t]*([^\s\t]+.*)$/) { if($section eq "ca" || $section eq "policy_client" || $section eq "policy_server" || $section eq "policy_ca" || $section eq "req" || $section eq "req_distinguished_name" || $section eq "v3_req" || $section eq "req_attributes") { if(not defined($self->{$section})) { $self->{$section} = []; } push(@{$self->{$section}}, $l); } else { $k = $1; $v = $2; # really ugly hack XXX if($v =~ /ENV::(\w+)$/) { $ENV{$1} = 'dummy'; } if(not defined($self->{$section})) { $self->{$section} = {}; } $self->{$section}->{$k} = $v; } } } # store nsSslServerName information if(defined($self->{'server_cert'}->{'nsSslServerName'})) { if($self->{'server_cert'}->{'nsSslServerName'} =~ /ENV:/) { $self->{'server_cert'}->{'nsSslServerName'} = 'user'; } }else { $self->{'server_cert'}->{'nsSslServerName'} = 'none'; } # store subjectAltName information # ca if(defined($self->{'v3_ca'}->{'subjectAltName'})) { if($self->{'v3_ca'}->{'subjectAltName'} eq 'email:copy') { $self->{'v3_ca'}->{'subjectAltName'} = 'emailcopy'; } }else { $self->{'v3_ca'}->{'subjectAltName'} = 'none'; } # server if(defined($self->{'server_cert'}->{'subjectAltName'})) { if($self->{'server_cert'}->{'subjectAltName'} =~ /ENV:.*IP/) { $self->{'server_cert'}->{'subjectAltNameType'} = 'ip'; $self->{'server_cert'}->{'subjectAltName'} = 'user'; }elsif($self->{'server_cert'}->{'subjectAltName'} =~ /ENV:.*DNS/) { $self->{'server_cert'}->{'subjectAltNameType'} = 'dns'; $self->{'server_cert'}->{'subjectAltName'} = 'user'; }elsif($self->{'server_cert'}->{'subjectAltName'} =~ /ENV:.*RAW/) { $self->{'server_cert'}->{'subjectAltNameType'} = 'raw'; $self->{'server_cert'}->{'subjectAltName'} = 'user'; }elsif($self->{'server_cert'}->{'subjectAltName'} eq 'email:copy') { $self->{'server_cert'}->{'subjectAltName'} = 'emailcopy'; $self->{'server_cert'}->{'subjectAltNameType'} = 'ip'; } }else { $self->{'server_cert'}->{'subjectAltNameType'} = 'ip'; $self->{'server_cert'}->{'subjectAltName'} = 'none'; } # client if(defined($self->{'client_cert'}->{'subjectAltName'})) { if($self->{'client_cert'}->{'subjectAltName'} =~ /ENV:.*IP/) { $self->{'client_cert'}->{'subjectAltNameType'} = 'ip'; $self->{'client_cert'}->{'subjectAltName'} = 'user'; }elsif($self->{'client_cert'}->{'subjectAltName'} =~ /ENV:.*DNS/) { $self->{'client_cert'}->{'subjectAltNameType'} = 'dns'; $self->{'client_cert'}->{'subjectAltName'} = 'user'; }elsif($self->{'client_cert'}->{'subjectAltName'} =~ /ENV:.*EMAIL/) { $self->{'client_cert'}->{'subjectAltNameType'} = 'mail'; $self->{'client_cert'}->{'subjectAltName'} = 'user'; }elsif($self->{'client_cert'}->{'subjectAltName'} =~ /ENV:.*RAW/) { $self->{'client_cert'}->{'subjectAltNameType'} = 'raw'; $self->{'client_cert'}->{'subjectAltName'} = 'user'; }elsif($self->{'client_cert'}->{'subjectAltName'} eq 'email:copy') { $self->{'client_cert'}->{'subjectAltName'} = 'emailcopy'; $self->{'client_cert'}->{'subjectAltNameType'} = 'ip'; } }else { $self->{'client_cert'}->{'subjectAltNameType'} = 'ip'; $self->{'client_cert'}->{'subjectAltName'} = 'none'; } foreach my $sect ('server_cert', 'client_cert', 'v3_ca') { # store nsRevocationUrl information if(defined($self->{$sect}->{'nsRevocationUrl'})) { if($self->{$sect}->{'nsRevocationUrl'} =~ /ENV:/) { $self->{$sect}->{'nsRevocationUrl'} = 'user'; } }else { $self->{$sect}->{'nsRevocationUrl'} = 'none'; } # store nsRenewalUrl information if(defined($self->{$sect}->{'nsRenewalUrl'})) { if($self->{$sect}->{'nsRenewalUrl'} =~ /ENV:/) { $self->{$sect}->{'nsRenewalUrl'} = 'user'; } }else { $self->{$sect}->{'nsRenewalUrl'} = 'none'; } # store extendedKeyUsage information if(defined($self->{$sect}->{'extendedKeyUsage'})) { if($self->{$sect}->{'extendedKeyUsage'} =~ /critical/) { $self->{$sect}->{'extendedKeyUsageType'} = 'critical'; $self->{$sect}->{'extendedKeyUsage'} =~ s/critical\s*,\s*//; }else { $self->{$sect}->{'extendedKeyUsageType'} = 'noncritical'; } if($self->{$sect}->{'extendedKeyUsage'} =~ /ENV:/) { $self->{$sect}->{'extendedKeyUsage'} = 'user'; } }else { $self->{$sect}->{'extendedKeyUsage'} = 'none'; $self->{$sect}->{'extendedKeyUsageType'} = 'noncritical'; } # store keyUsage information if(defined($self->{$sect}->{'keyUsage'})) { if($self->{$sect}->{'keyUsage'} =~ /critical/) { $self->{$sect}->{'keyUsageType'} = 'critical'; }else { $self->{$sect}->{'keyUsageType'} = 'noncritical'; } if($self->{$sect}->{'keyUsage'} =~ /digitalSignature, keyEncipherment/) { $self->{$sect}->{'keyUsage'} = 'keysig'; } elsif($self->{$sect}->{'keyUsage'} =~ /digitalSignature/) { $self->{$sect}->{'keyUsage'} = 'sig'; } elsif($self->{$sect}->{'keyUsage'} =~ /keyEncipherment/) { $self->{$sect}->{'keyUsage'} = 'key'; } elsif($self->{$sect}->{'keyUsage'} =~ /keyCertSign, cRLSign/) { $self->{$sect}->{'keyUsage'} = 'keyCertSign, cRLSign'; } elsif($self->{$sect}->{'keyUsage'} =~ /keyCertSign/) { $self->{$sect}->{'keyUsage'} = 'keyCertSign'; } elsif($self->{$sect}->{'keyUsage'} =~ /cRLSign/) { $self->{$sect}->{'keyUsage'} = 'cRLSign'; }else { $self->{$sect}->{'keyUsage'} = 'none'; } }else { $self->{$sect}->{'keyUsage'} = 'none'; $self->{$sect}->{'keyUsageType'} = 'noncritical'; } } # hack to add new section to openssl.cnf, if old config if(not defined($self->{'ca_ca'})) { $self->{'ca_ca'} = $self->{'server_ca'}; $self->{'ca_ca'}->{'x509_extensions'} = "v3_ca"; $self->{'server_ca'}->{'x509_extensions'} = "server_cert"; $self->write_config($main, $ca); } if($self->{'server_ca'}->{'x509_extensions'} eq "v3_ca") { $self->{'server_ca'}->{'x509_extensions'} = "server_cert"; $self->write_config($main, $ca); } # hack to add new option if(not defined($self->{'ca_ca'}->{'unique_subject'})) { $self->{'ca_ca'}->{'unique_subject'} = "yes"; $self->write_config($main, $ca); } if(not defined($self->{'server_ca'}->{'unique_subject'})) { $self->{'server_ca'}->{'unique_subject'} = "yes"; $self->write_config($main, $ca); } if(not defined($self->{'client_ca'}->{'unique_subject'})) { $self->{'client_ca'}->{'unique_subject'} = "yes"; $self->write_config($main, $ca); } return; } sub config_ca { my ($self, $main, $ca) = @_; my($action); if(not defined($ca)) { $ca = $main->{'CA'}->{'actca'}; } if(not defined($ca)) { GUI::HELPERS::print_warning(_("Can't get CA name")); } $action = GUI::TCONFIG::show_config_ca($main, $ca); return; } sub config_openssl { my ($self, $main, $ca) = @_; if(not defined($ca)) { $ca = $main->{'CA'}->{'actca'}; } if(not defined($ca)) { GUI::HELPERS::print_warning(_("Can't get CA name")); } GUI::TCONFIG::show_configbox($main, $ca); return; } sub write_config { my ($self, $main, $ca) = @_; my($file, @sections, $line, $sect, $key, $val, @opts); # these sections are not configurable @sections = qw( ca policy_client policy_server policy_ca req req_distinguished_name v3_req req_attributes ); $file = $main->{'CA'}->{$ca}->{'cnf'}; open(OUT, ">$file") || do { GUI::HELPERS::print_warning(_("Can't open configfile")); return; }; foreach $sect (@sections) { print OUT "[ $sect ]\n"; foreach $line (@{$self->{$sect}}) { print OUT "$line\n"; } print OUT "\n"; } # these sections are configurable @sections = qw( v3_ca crl_ext server_ca client_ca ca_ca client_cert server_cert ); foreach $sect (@sections) { print OUT "[ $sect ]\n"; if($sect eq "v3_ca") { @opts = qw( subjectKeyIdentifier authorityKeyIdentifier basicConstraints nsCertType issuerAltName nsComment crlDistributionPoints nsCaRevocationUrl nsCaPolicyUrl nsRevocationUrl nsRenewalUrl ); foreach $key (@opts) { if(defined($self->{$sect}->{$key}) && $self->{$sect}->{$key} ne '' && $self->{$sect}->{$key} ne 'none') { print OUT "$key = $self->{$sect}->{$key}\n"; } } if(defined($self->{$sect}->{'subjectAltName'})) { if($self->{$sect}->{'subjectAltName'} eq 'emailcopy') { print OUT "subjectAltName = email:copy\n"; } elsif($self->{$sect}->{'subjectAltName'} eq 'none') { ;# do nothing } } if(defined($self->{$sect}->{'keyUsage'})) { if($self->{$sect}->{'keyUsage'} eq 'keyCertSign') { if($self->{$sect}->{'keyUsageType'} eq 'critical') { print OUT "keyUsage = critical, keyCertSign\n"; } else { print OUT "keyUsage = keyCertSign\n"; } }elsif($self->{$sect}->{'keyUsage'} eq 'cRLSign') { if($self->{$sect}->{'keyUsageType'} eq 'critical') { print OUT "keyUsage = critical, cRLSign\n"; }else { print OUT "keyUsage = cRLSign\n"; } }elsif($self->{$sect}->{'keyUsage'} eq 'keyCertSign, cRLSign') { if($self->{$sect}->{'keyUsageType'} eq 'critical') { print OUT "keyUsage = critical, keyCertSign, cRLSign\n"; }else { print OUT "keyUsage = keyCertSign, cRLSign\n"; } }elsif($self->{$sect}->{'keyUsage'} eq 'none') { ;# do nothing } } } elsif($sect eq "server_cert" || $sect eq "client_cert") { @opts = qw( basicConstraints nsCertType nsComment subjectKeyIdentifier authorityKeyIdentifier issuerAltName crlDistributionPoints nsCaRevocationUrl nsBaseUrl nsCaPolicyUrl ); foreach $key (@opts) { if(defined($self->{$sect}->{$key}) && $self->{$sect}->{$key} ne '' && $self->{$sect}->{$key} ne 'none') { print OUT "$key = $self->{$sect}->{$key}\n"; } } if(defined($self->{$sect}->{'nsSslServerName'})) { if($self->{$sect}->{'nsSslServerName'} eq 'user') { print OUT "nsSslServerName = \$ENV::NSSSLSERVERNAME\n"; } elsif($self->{$sect}->{'nsSslServerName'} eq 'none') { ;# do nothing } } if(defined($self->{$sect}->{'nsRevocationUrl'})) { if($self->{$sect}->{'nsRevocationUrl'} eq 'user') { print OUT "nsRevocationUrl = \$ENV::NSREVOCATIONURL\n"; } elsif($self->{$sect}->{'nsRevocationUrl'} eq 'none') { ;# do nothing } } if(defined($self->{$sect}->{'nsRenewalUrl'})) { if($self->{$sect}->{'nsRenewalUrl'} eq 'user') { print OUT "nsRenewalUrl = \$ENV::NSRENEWALURL\n"; } elsif($self->{$sect}->{'nsRenewalUrl'} eq 'none') { ;# do nothing } } if(defined($self->{$sect}->{'subjectAltName'})) { if($self->{$sect}->{'subjectAltName'} eq 'user') { if($self->{$sect}->{'subjectAltNameType'} eq 'ip') { print OUT "subjectAltName = \$ENV::SUBJECTALTNAMEIP\n"; } elsif($self->{$sect}->{'subjectAltNameType'} eq 'dns') { print OUT "subjectAltName = \$ENV::SUBJECTALTNAMEDNS\n"; } elsif($self->{$sect}->{'subjectAltNameType'} eq 'mail') { print OUT "subjectAltName = \$ENV::SUBJECTALTNAMEEMAIL\n"; } elsif($self->{$sect}->{'subjectAltNameType'} eq 'raw') { print OUT "subjectAltName = \$ENV::SUBJECTALTNAMERAW\n"; } } elsif($self->{$sect}->{'subjectAltName'} eq 'emailcopy') { print OUT "subjectAltName = email:copy\n"; } elsif($self->{$sect}->{'subjectAltName'} eq 'none') { ;# do nothing } } if(defined($self->{$sect}->{'keyUsage'})) { if($self->{$sect}->{'keyUsage'} eq 'key') { if($self->{$sect}->{'keyUsageType'} eq 'critical') { print OUT "keyUsage = critical, keyEncipherment\n"; } else { print OUT "keyUsage = keyEncipherment\n"; } }elsif($self->{$sect}->{'keyUsage'} eq 'sig') { if($self->{$sect}->{'keyUsageType'} eq 'critical') { print OUT "keyUsage = critical, digitalSignature\n"; }else { print OUT "keyUsage = digitalSignature\n"; } }elsif($self->{$sect}->{'keyUsage'} eq 'keysig') { if($self->{$sect}->{'keyUsageType'} eq 'critical') { print OUT "keyUsage = critical, digitalSignature, keyEncipherment\n"; }else { print OUT "keyUsage = digitalSignature, keyEncipherment\n"; } }elsif($self->{$sect}->{'keyUsage'} eq 'none') { ;# do nothing } } if(defined($self->{$sect}->{'extendedKeyUsage'})) { if(($self->{$sect}->{'extendedKeyUsage'} ne 'none') && ($self->{$sect}->{'extendedKeyUsage'} ne '')) { if($self->{$sect}->{'extendedKeyUsage'} eq 'user') { if($self->{$sect}->{'extendedKeyUsageType'} eq 'critical') { print OUT "extendedKeyUsage = critical, \$ENV::EXTENDEDKEYUSAGE\n"; } else { print OUT "extendedKeyUsage = \$ENV::EXTENDEDKEYUSAGE\n"; } } else { if($self->{$sect}->{'extendedKeyUsageType'} eq 'critical') { print OUT "extendedKeyUsage = critical, $self->{$sect}->{'extendedKeyUsage'}\n"; } else { print OUT "extendedKeyUsage = $self->{$sect}->{'extendedKeyUsage'}\n"; } } } elsif ($self->{$sect}->{'extendedKeyUsage'} eq 'none') { ;# do nothing } } } elsif(($sect eq "server_ca") || ($sect eq "client_ca") || ($sect eq "ca_ca")) { @opts = qw( dir certs crl_dir database new_certs_dir certificate serial crl private_key RANDFILE x509_extensions default_days default_crl_days default_md preserve policy unique_subject ); foreach $key (@opts) { if(defined($self->{$sect}->{$key}) && $self->{$sect}->{$key} ne '' && $self->{$sect}->{$key} ne 'none') { print OUT "$key = $self->{$sect}->{$key}\n"; } } } else { while(($key, $val) = each(%{$self->{$sect}})) { if(defined($val) && $val ne "") { print OUT "$key = $val\n"; } } } print OUT "\n"; } close OUT; # print STDERR "DEBUG: wrote config and reinit\n"; # $self->init_config($main, $ca); return; } 1 tinyca2-0.7.5/lib/CERT.pm0000644000175000017500000004654710461475420016430 0ustar schollerscholler00000000000000# Copyright (c) Stephan Martin # # $Id: CERT.pm,v 1.11 2006/06/28 21:50:41 sm Exp $ # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. use strict; package CERT; use POSIX; sub new { my $that = shift; my $class = ref($that) || $that; my $self = {}; $self->{'OpenSSL'} = shift; bless($self, $class); } # # read certificates in directory into list # sub read_certlist { my ($self, $certdir, $crlfile, $indexfile, $force, $main) = @_; my($f, $certlist, $crl, $modt, $parsed, $tmp, $t, $c, $p, @files); GUI::HELPERS::set_cursor($main, 1); $certlist = []; $modt = (stat($certdir))[9]; if(defined($self->{'lastread'}) && ($self->{'lastread'} >= $modt) && not defined($force)) { GUI::HELPERS::set_cursor($main, 0); return(0); } $crl = $self->{'OpenSSL'}->parsecrl($crlfile, $force); opendir(DIR, $certdir) || do { GUI::HELPERS::set_cursor($main, 0); $t = sprintf(_("Can't open Certificate directory: %s"), $certdir); GUI::HELPERS::print_warning($t); return(0); }; while($f = readdir(DIR)) { next if $f =~ /^\./; push(@files, $f); $c++; } $main->{'barbox'}->pack_start($main->{'progress'}, 0, 0, 0); $main->{'progress'}->show(); foreach $f (@files) { next if $f =~ /^\./; $f =~ s/\.pem//; $tmp = HELPERS::dec_base64($f); next if not defined($tmp); next if $tmp eq ""; if(defined($main)) { $t = sprintf(_(" Read Certificate: %s"), $tmp); GUI::HELPERS::set_status($main, $t); $p += 100/$c; if($p/100 <= 1) { $main->{'progress'}->set_fraction($p/100); while(Gtk2->events_pending) { Gtk2->main_iteration; } } } my $debugf = $certdir."/".$f.".pem"; $parsed = $self->{'OpenSSL'}->parsecert($crlfile, $indexfile, $certdir."/".$f.".pem", $force); defined($parsed) || do { GUI::HELPERS::set_cursor($main, 0); GUI::HELPERS::print_error(_("Can't read Certificate")); }; $tmp .= "%".$parsed->{'STATUS'}; push(@{$certlist}, $tmp); } @{$certlist} = sort(@{$certlist}); closedir(DIR); $self->{'certlist'} = $certlist; $self->{'lastread'} = time(); if(defined($main)) { $main->{'progress'}->set_fraction(0); $main->{'barbox'}->remove($main->{'progress'}); GUI::HELPERS::set_cursor($main, 0); } return(1); # got new list } # # get information for renewing a certifikate # sub get_renew_cert { my ($self, $main, $opts, $box) = @_; my ($cert, $status, $t, $ca, $cadir); $box->destroy() if(defined($box)); if((not defined($opts->{'certfile'})) || (not defined($opts->{'passwd'})) || ($opts->{'certfile'} eq '') || ($opts->{'passwd'} eq '')) { $cert = $main->{'certbrowser'}->selection_dn(); if(not defined($cert)) { GUI::HELPERS::print_info(_("Please select a Certificate first")); return; } $ca = $main->{'certbrowser'}->selection_caname(); $cadir = $main->{'certbrowser'}->selection_cadir(); $status = $main->{'certbrowser'}->selection_status(); if($status eq _("VALID")) { $t = sprintf( _("Can't renew Certifikate with Status: %s\nPlease revoke the Certificate first"), $status); GUI::HELPERS::print_warning($t); return; } $opts->{'certname'} = HELPERS::enc_base64($cert); $opts->{'reqname'} = $opts->{'certname'}; $opts->{'certfile'} = $cadir."/certs/".$opts->{'certname'}.".pem"; $opts->{'keyfile'} = $cadir."/keys/".$opts->{'certname'}.".pem"; $opts->{'reqfile'} = $cadir."/req/".$opts->{'certname'}.".pem"; if((not -s $opts->{'certfile'}) || (not -s $opts->{'keyfile'}) || (not -s $opts->{'reqfile'})) { $t = _("Key and Request are necessary for renewal of a Certificate\nRenewal is not possible!"); GUI::HELPERS::print_warning($t); return; } $main->show_req_sign_dialog($opts); return; } $main->{'REQ'}->sign_req($main, $opts); return; } # # get information for revoking a certifikate # sub get_revoke_cert { my ($self, $main, $opts, $box) = @_; my ($cert, $status, $t, $ca, $cadir); $box->destroy() if(defined($box)); if((not defined($opts->{'certfile'})) || (not defined($opts->{'passwd'})) || ($opts->{'certfile'} eq '') || ($opts->{'passwd'} eq '')) { $opts->{'certfile'} = $main->{'certbrowser'}->selection_fname(); if(not defined($opts->{'certfile'})) { $t = _("Please select a Certificate first"); GUI::HELPERS::print_info($t); return; } $ca = $main->{'certbrowser'}->selection_caname(); $cadir = $main->{'certbrowser'}->selection_cadir(); $cert = $main->{'certbrowser'}->selection_dn(); $status = $main->{'certbrowser'}->selection_status(); if($status ne _("VALID")) { $t = sprintf(_("Can't revoke Certifikate with Status: %s"), $status); GUI::HELPERS::print_warning($t); return; } $opts->{'certname'} = HELPERS::enc_base64($cert); $opts->{'cert'} = $cert; $main->show_cert_revoke_dialog($opts); return; } $self->revoke_cert($main, $opts); return; } # # now really revoke the certificate # sub revoke_cert { my ($self, $main, $opts) = @_; my($ca, $cadir, $ret, $t, $ext, $reason); $ca = $main->{'certbrowser'}->selection_caname(); $cadir = $main->{'certbrowser'}->selection_cadir(); GUI::HELPERS::set_cursor($main, 1); if(defined($opts->{'reason'}) && $opts->{'reason'} ne '') { $reason = $opts->{'reason'}; } else { $reason = 'none'; } ($ret, $ext) = $self->{'OpenSSL'}->revoke( 'config' => $main->{'CA'}->{$ca}->{'cnf'}, 'infile' => $cadir."/certs/".$opts->{'certname'}.".pem", 'pass' => $opts->{'passwd'}, 'reason' => $reason ); if($ret eq 1) { GUI::HELPERS::set_cursor($main, 0); $t = _("Wrong CA password given\nRevoking the Certificate failed"); GUI::HELPERS::print_warning($t, $ext); delete($opts->{$_}) foreach(keys(%$opts)); $opts = undef; return; } elsif($ret eq 2) { GUI::HELPERS::set_cursor($main, 0); $t = _("CA Key not found\nRevoking the Certificate failed"); GUI::HELPERS::print_warning($t, $ext); delete($opts->{$_}) foreach(keys(%$opts)); $opts = undef; return; } elsif($ret) { GUI::HELPERS::set_cursor($main, 0); $t = _("Revoking the Certificate failed"); GUI::HELPERS::print_warning($t, $ext); delete($opts->{$_}) foreach(keys(%$opts)); $opts = undef; return; } ($ret, $ext) = $self->{'OpenSSL'}->newcrl( 'config' => $main->{'CA'}->{$ca}->{'cnf'}, 'pass' => $opts->{'passwd'}, 'crldays' => 365, 'outfile' => $cadir."/crl/crl.pem" ); if (not -s $cadir."/crl/crl.pem" || $ret) { delete($opts->{$_}) foreach(keys(%$opts)); $opts = undef; GUI::HELPERS::set_cursor($main, 0); GUI::HELPERS::print_error( _("Generating a new Revocation List failed"), $ext); } $self->{'OpenSSL'}->parsecrl( $cadir."/crl/crl.pem", 1); $self->reread_cert($main, $opts->{'cert'}); # force reread of certlist $main->{'certbrowser'}->update($cadir."/certs", $cadir."/crl/crl.pem", $cadir."/index.txt", 0); GUI::HELPERS::set_cursor($main, 0); delete($opts->{$_}) foreach(keys(%$opts)); $opts = undef; return; } # # get name of certificatefile to delete # sub get_del_cert { my ($self, $main) = @_; my($certname, $cert, $certfile, $status, $t, $cadir, $ca); $certfile = $main->{'certbrowser'}->selection_fname(); if(not defined $certfile) { GUI::HELPERS::print_info(_("Please select a Certificate first")); return; } $ca = $main->{'certbrowser'}->selection_caname(); $cadir = $main->{'certbrowser'}->selection_cadir(); $cert = $main->{'certbrowser'}->selection_dn(); $status = $main->{'certbrowser'}->selection_status(); $certname = HELPERS::enc_base64($cert); if($status eq _("VALID")) { GUI::HELPERS::print_warning( _("Can't delete VALID certificate!\nPlease revoke the Certificate first.")); return; } $main->show_del_confirm($certfile, 'cert'); return; } # # now really delete the certificatefile # sub del_cert { my ($self, $main, $file) = @_; GUI::HELPERS::set_cursor($main, 1); unlink($file); my $cadir = $main->{'certbrowser'}->selection_cadir(); $main->{'certbrowser'}->update($cadir."/certs", $cadir."/crl/crl.pem", $cadir."/index.txt", 0); GUI::HELPERS::set_cursor($main, 0); return; } # # get informations for exporting a certificate # sub get_export_cert { my ($self, $main, $opts, $box) = @_; $box->destroy() if(defined($box)); my($ca, $t, $cn, $email, $cadir); if(not defined($opts)) { $cn = $main->{'certbrowser'}->selection_cn(); $email = $main->{'certbrowser'}->selection_email(); if(not defined $cn) { GUI::HELPERS::print_info(_("Please select a Certificate first")); return; } $ca = $main->{'certbrowser'}->selection_caname(); $cadir = $main->{'certbrowser'}->selection_cadir(); $opts->{'status'} = $main->{'certbrowser'}->selection_status(); $opts->{'cert'} = $main->{'certbrowser'}->selection_dn(); $opts->{'certname'} = HELPERS::enc_base64($opts->{'cert'}); $opts->{'certfile'} = $cadir."/certs/".$opts->{'certname'}.".pem"; $opts->{'keyfile'} = $cadir."/keys/".$opts->{'certname'}.".pem"; $opts->{'cafile'} = $cadir."/cacert.pem"; if (-f $cadir."/cachain.pem") { $opts->{'cafile'} = $cadir."/cachain.pem"; } if($opts->{'status'} ne _("VALID")) { $t = _("Certificate seems not to be VALID"); $t .= "\n"; $t .= _("Export is not possible"); GUI::HELPERS::print_warning($t); return; } $opts->{'parsed'} = $self->parse_cert($main, $opts->{'certname'}); if((defined($email)) && $email ne '' && $email ne ' ') { $opts->{'outfile'} = "$main->{'exportdir'}/$email-cert.pem"; }elsif((defined($cn)) && $cn ne '' && $cn ne ' ') { $opts->{'outfile'} = "$main->{'exportdir'}/$cn-cert.pem"; }else{ $opts->{'outfile'} = "$main->{'exportdir'}/cert.pem"; } $opts->{'format'} = 'PEM'; $opts->{'include'} = 0; $opts->{'incfp'} = 0; $opts->{'nopass'} = 0; $opts->{'friendlyname'} = ''; $main->show_export_dialog($opts, 'cert'); return; } if((not defined($opts->{'outfile'})) || ($opts->{'outfile'} eq '')) { $main->show_export_dialog($opts, 'cert'); GUI::HELPERS::print_warning( _("Please give at least the output file")); return; } if($opts->{'format'} eq 'P12') { if(not -s $opts->{'keyfile'}) { $t = _("Key is necessary for export as PKCS#12"); $t .= "\n"; $t .= _("Export is not possible!"); GUI::HELPERS::print_warning($t); return; } if((not defined($opts->{'p12passwd'})) && (not $opts->{'nopass'})) { $opts->{'includeca'} = 1; $main->show_p12_export_dialog($opts, 'cert'); return; } } elsif(($opts->{'format'} eq 'ZIP') || ($opts->{'format'} eq 'TAR')) { if(not -s $opts->{'keyfile'}) { $t = sprintf( _("Key is necessary for export as %s"), $opts->{'format'}); $t .= "\n"; $t .= _("Export is not possible!"); GUI::HELPERS::print_warning($t); return; } } $self->export_cert($main, $opts); #FIXME no need for two functions return; } # # now really export the certificate # sub export_cert { my ($self, $main, $opts) = @_; my($ca, $t, $out, $ret, $ext); GUI::HELPERS::set_cursor($main, 1); $ca = $main->{'CA'}->{'actca'}; if($opts->{'format'} eq 'PEM') { if($opts->{'incfp'}) { $out = ''; $out .= "Fingerprint (MD5): $opts->{'parsed'}->{'FINGERPRINTMD5'}\n"; $out .= "Fingerprint (SHA1): $opts->{'parsed'}->{'FINGERPRINTSHA1'}\n\n"; } else { $out = ''; } $out .= $opts->{'parsed'}->{'PEM'}; if($opts->{'include'}) { open(IN, "<$opts->{'keyfile'}") || do { GUI::HELPERS::set_cursor($main, 0); $t = sprintf(_("Can't open Certificate file: %s: %s"), $opts->{'keyfile'}, $!); return; }; $out .= "\n"; $out .= $_ while(); close(IN); } } elsif ($opts->{'format'} eq 'DER') { $out = $opts->{'parsed'}->{'DER'}; } elsif ($opts->{'format'} eq 'TXT') { $out = $opts->{'parsed'}->{'TEXT'}; } elsif ($opts->{'format'} eq 'P12') { unlink($opts->{'outfile'}); ($ret, $ext) = $self->{'OpenSSL'}->genp12( certfile => $opts->{'certfile'}, keyfile => $opts->{'keyfile'}, cafile => $opts->{'cafile'}, outfile => $opts->{'outfile'}, passwd => $opts->{'passwd'}, p12passwd => $opts->{'p12passwd'}, includeca => $opts->{'includeca'}, nopass => $opts->{'nopass'}, friendly => $opts->{'friendlyname'} ); GUI::HELPERS::set_cursor($main, 0); if($ret eq 1) { $t = "Wrong password given\nDecrypting Key failed\nGenerating PKCS#12 failed"; GUI::HELPERS::print_warning($t, $ext); return; } elsif($ret || (not -s $opts->{'outfile'})) { $t = _("Generating PKCS#12 failed"); GUI::HELPERS::print_warning($t, $ext); return; } $main->{'exportdir'} = HELPERS::write_export_dir($main, $opts->{'outfile'}); $t = sprintf(_("Certificate and Key successfully exported to %s"), $opts->{'outfile'}); GUI::HELPERS::print_info($t, $ext); return; } elsif (($opts->{'format'} eq "ZIP") || ($opts->{'format'} eq "TAR")) { my $tmpcert = "$main->{'tmpdir'}/cert.pem"; my $tmpkey = "$main->{'tmpdir'}/key.pem"; my $tmpcacert = "$main->{'tmpdir'}/cacert.pem"; open(OUT, ">$tmpcert") || do { GUI::HELPERS::set_cursor($main, 0); $t = sprintf(_("Can't create temporary file: %s: %s"), $tmpcert, $!); GUI::HELPERS::print_warning($t); return; }; print OUT $opts->{'parsed'}->{'PEM'}; close OUT; # store key in temporary location { open(IN, "<$opts->{'keyfile'}") || do { GUI::HELPERS::set_cursor($main, 0); $t = sprintf(_("Can't read Key file: %s: %s"), $tmpcert, $!); GUI::HELPERS::print_warning($t); return; }; my @key = ; close IN; open(OUT, ">$tmpkey") || do { GUI::HELPERS::set_cursor($main, 0); $t = sprintf(_("Can't create temporary file: %s: %s"), $tmpcert, $!); GUI::HELPERS::print_warning($t); return; }; print OUT @key; close OUT; } # store cacert in temporary location { open(IN, "<$opts->{'cafile'}") || do { GUI::HELPERS::set_cursor($main, 0); GUI::HELPERS::print_warning(_("Can't read CA certificate")); return; }; my @cacert = ; close IN; open(OUT, ">$tmpcacert") || do { GUI::HELPERS::set_cursor($main, 0); GUI::HELPERS::print_warning(_("Can't create temporary file")); return; }; print OUT @cacert; close OUT; } unlink($opts->{'outfile'}); if($opts->{'format'} eq "ZIP") { system($main->{'init'}->{'zipbin'}, '-j', $opts->{'outfile'}, $tmpcacert, $tmpkey, $tmpcert); my $ret = $? >> 8; } elsif ($opts->{'format'} eq "TAR") { system($main->{'init'}->{'tarbin'}, 'cfv', $opts->{'outfile'}, $tmpcacert, $tmpkey, $tmpcert); } GUI::HELPERS::set_cursor($main, 0); if(not -s $opts->{'outfile'} || $ret) { GUI::HELPERS::print_warning( sprintf(_("Generating %s file failed"), $opts->{'format'}) ); } else { $main->{'exportdir'} = HELPERS::write_export_dir($main, $opts->{'outfile'}); $t = sprintf( _("Certificate and Key successfully exported to %s"), $opts->{'outfile'}); GUI::HELPERS::print_info($t); unlink($tmpcacert); unlink($tmpcert); unlink($tmpkey); return; } } else { GUI::HELPERS::set_cursor($main, 0); $t = sprintf(_("Invalid Format for export_cert(): %s"), $opts->{'format'}); GUI::HELPERS::print_warning($t); return; } GUI::HELPERS::set_cursor($main, 0); open(OUT, ">$opts->{'outfile'}") || do { GUI::HELPERS::print_warning(_("Can't open output file: %s: %s"), $opts->{'outfile'}, $!); return; }; print OUT $out; close OUT; $main->{'exportdir'} = HELPERS::write_export_dir($main, $opts->{'outfile'}); $t = sprintf(_("Certificate successfully exported to: %s"), $opts->{'outfile'}); GUI::HELPERS::print_info($t); return; } sub reread_cert { my ($self, $main, $name) = @_; my ($parsed, $tmp); GUI::HELPERS::set_cursor($main, 1); $name = HELPERS::enc_base64($name); $parsed = $self->parse_cert($main, $name, 1); # print STDERR "DEBUG: status $parsed->{'STATUS'}\n"; foreach(@{$self->{'certlist'}}) { if(/^$name%/) { ; #delete } else { push(@{$tmp}, $_); } } push(@{$tmp}, $name."%".$parsed->{'STATUS'}); @{$tmp} = sort(@{$tmp}); delete($self->{'certlist'}); $self->{'certlist'} = $tmp; GUI::HELPERS::set_cursor($main, 0); return; } sub parse_cert { my ($self, $main, $name, $force) = @_; my($ca, $certfile, $x509, $parsed); GUI::HELPERS::set_cursor($main, 1); $ca = $main->{'CA'}->{'actca'}; if($name eq 'CA') { $certfile = $main->{'CA'}->{$ca}->{'dir'}."/cacert.pem"; } else { $certfile = $main->{'CA'}->{$ca}->{'dir'}."/certs/".$name.".pem"; } $parsed = $self->{'OpenSSL'}->parsecert( $main->{'CA'}->{$ca}->{'dir'}."/crl/crl.pem", $main->{'CA'}->{$ca}->{'dir'}."/index.txt", $certfile, $force ); GUI::HELPERS::set_cursor($main, 0); return($parsed); } 1 tinyca2-0.7.5/tinyca2.desktop0000644000175000017500000000265110461475420017517 0ustar schollerscholler00000000000000[Desktop Entry] Encoding=UTF-8 Type=Application GenericName=Tool to manage a Certification Authority Name=TinyCA2 Exec=tinyca2 Categories=Network;Security GenericName[bg]=GenericName(tinyca.desktop): Управление на сертификационните регистри (Certification Authority) Name[cs]=TinyCA2 GenericName[cs]=Nástroj pro správu certifikační autority Name[de]=TinyCA2 GenericName[de]=Werkzeug zum Verwalten einer Certification Authority Name[es]=TinyCA2 GenericName[es]=Herramienta para gestionar autoridades certificadoras Name[fr]=TinyCA2 GenericName[fr]=Outil de gestion d'une autorité de certification Name[hu]=TinyCA2 GenericName[hu]=CA (Certification Authority) kezelő segédeszköz Name[it]=TinyCA2 GenericName[it]=Tool d'amministrazione per una certification authority Name[ja]=TinyCA2 GenericName[ja]=認証局の管理ツール Name[nb]=TinyCA2 GenericName[nb]=Administrasjonsverktøy for sertifikater Name[nl]=TinyCA2 GenericName[nl]=Programma om een certificaat autoriteit te beheren Name[pl]=TinyCA2 GenericName[pl]=Narzędzie do zarządzania centrum certyfikacyjnym Name[pt_BR]=TinyCA2 GenericName[pt_BR]=Ferramenta para gerenciar uma Autoridade de Certificação Name[sk]=TinyCA2 GenericName[sk]=Nástroj pre správu certifikačnej autority Name[zh_CN]=TinyCA2 GenericName[zh_CN]=管理证书授权者的工具 Name[zh_TW]=TinyCA2 GenericName[zh_TW]=管理認證授權的工具 X-SuSE-translate=true tinyca2-0.7.5/install.sh0000755000175000017500000000040710461475420016555 0ustar schollerscholler00000000000000#!/bin/bash mkdir -p locale/de/LC_MESSAGES mkdir -p locale/es/LC_MESSAGES mkdir -p locale/cs/LC_MESSAGES msgfmt po/de.po -o locale/de/LC_MESSAGES/tinyca2.mo msgfmt po/es.po -o locale/es/LC_MESSAGES/tinyca2.mo msgfmt po/cs.po -o locale/cs/LC_MESSAGES/tinyca2.mo tinyca2-0.7.5/tinyca20000755000175000017500000000527310461475420016055 0ustar schollerscholler00000000000000#!/usr/bin/perl -w # # $Id: tinyca2,v 1.6 2006/07/04 19:53:16 sm Exp $ # # Copyright (c) Stephan Martin # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. BEGIN { unshift(@INC, './lib'); # put here the location of the modules } use strict; use Gtk2 '-init'; use MIME::Base64; use POSIX; use Locale::gettext; use OpenSSL; use CA; use GUI; use HELPERS; use GUI::TCONFIG; use GUI::HELPERS; use GUI::CALLBACK; use GUI::WORDS; use GUI::X509_infobox; use GUI::X509_browser; use CERT; use REQ; use KEY; use TCONFIG; setlocale(LC_MESSAGES, ""); bindtextdomain("tinyca2", "./locale/"); textdomain("tinyca2"); # https://bugs.gentoo.org/show_bug.cgi?id=78576 $ENV{XLIB_SKIP_ARGB_VISUALS}= '1'; my $init = {}; # location of openssl $init->{'opensslbin'} = "/usr/bin/openssl"; $init->{'zipbin'} = "/usr/bin/zip"; $init->{'tarbin'} = "/bin/tar"; if(not -x $init->{'opensslbin'}) { printf(gettext("Can't execute %s.\n"), $init->{'opensslbin'}); print gettext("Configure correct path to openssl in tinyca.\n"); exit(1); } if(not -x $init->{'zipbin'}) { print gettext("zip command not found, support disabled.\n"); print gettext("Configure correct path to zip in tinyca.\n"); } if(not -x $init->{'tarbin'}) { print gettext("tar command not found, support disabled.\n"); print gettext("Configure correct path to tar in tinyca.\n"); } # directory with the templates $init->{'templatedir'} = "./templates"; if(not -d $init->{'templatedir'}) { print gettext("Can't find templatedir.\n"); print gettext("Please configure correct path with templates in tinyca.\n"); exit(1); } # location for CA files $init->{'basedir'} = $ENV{HOME}."/.TinyCA"; $init->{'exportdir'} = $ENV{HOME}; umask(0077); # create main object and initialize CA my $gui = GUI->new($init); # and now run... $gui->{'mw'}->show_all(); # decide what to do on startup if(@{$gui->{'CA'}->{'calist'}}) { $gui->{'CA'}->get_open_name($gui); } else { $gui->{'CA'}->get_ca_create($gui); } sub _ { my $s = gettext(@_); utf8::decode($s); return($s); } Gtk2->main(); exit(0); tinyca2-0.7.5/tinyca2.spec0000644000175000017500000001175410461475421017005 0ustar schollerscholler00000000000000# spec file for package tinyca # # $Id: tinyca2.spec,v 1.9 2006/07/25 20:10:54 sm Exp $ # # Copyright (c) 2002 Stephan Martin # This file and all modifications and additions to the pristine # package are under the same license as the package itself. # %define bindir %{_bindir} %define libdir %{_datadir}/TinyCA2/lib %define templatesdir %{_datadir}/TinyCA2/templates %define localedir %{_datadir}/TinyCA2/locale/ Name: tinyca2 URL: http://tinyca.sm-zone.net/ Group: Productivity/Networking/Security License: GPL Requires: perl perl-Gtk2 perl-MIME-Base64 Packager: Stephan Martin Version: @version@ Release: 0 Source0: %{name}-%{version}.tar.gz Source1: %{name}.desktop Summary: Graphical Tool for Managing a Certification Authority BuildArch: noarch BuildRoot: %{_tmppath}/%{name}-%{version}-build %description TinyCA is a graphical tool written in Perl/Gtk to manage a small Certification Authority (CA) using openssl. TinyCA supports - creation and revocation of x509 - S/MIME certificates. - PKCS#10 requests. - exporting certificates as PEM, DER, TXT, and PKCS#12. - server certificates for use in web servers, email servers, IPsec, and more. - client certificates for use in web browsers, email clients, IPsec, and more. - creation and management of SubCAs Authors: -------- Stephan Martin %prep %setup %build # Configure pristine source perl -pi -e 's:./lib:%{libdir}:g' tinyca2 perl -pi -e 's:./templates:%{templatesdir}:g' tinyca2 perl -pi -e 's:./locale:%{localedir}:g' tinyca2 make -C po %install [ "$RPM_BUILD_ROOT" != "/" ] && [ -d $RPM_BUILD_ROOT ] && rm -rf $RPM_BUILD_ROOT; LANGUAGES="de es cs fr sv" mkdir -p $RPM_BUILD_ROOT%{bindir} mkdir -p $RPM_BUILD_ROOT%{libdir} mkdir -p $RPM_BUILD_ROOT%{libdir}/GUI mkdir -p $RPM_BUILD_ROOT%{templatesdir} install -m 644 lib/*.pm $RPM_BUILD_ROOT%{libdir} install -m 644 lib/GUI/*.pm $RPM_BUILD_ROOT%{libdir}/GUI/ install -m 644 templates/openssl.cnf $RPM_BUILD_ROOT%{templatesdir} install -m 755 tinyca2 $RPM_BUILD_ROOT%{bindir} mkdir -p $RPM_BUILD_ROOT/usr/share/applications/ install -m 644 tinyca2.desktop $RPM_BUILD_ROOT/usr/share/applications/ for LANG in $LANGUAGES; do mkdir -p $RPM_BUILD_ROOT%{localedir}/$LANG/LC_MESSAGES/ install -m 644 locale/$LANG/LC_MESSAGES/tinyca2.mo %{buildroot}%{localedir}/$LANG/LC_MESSAGES/ done %clean rm -rf %{buildroot} %files %defattr(-,root,root) %doc CHANGES %dir %{_datadir}/TinyCA2 %{bindir}/tinyca2 %{_datadir}/TinyCA2/* %{_datadir}/applications/* %changelog * Sun Dec 5 2004 - sm@sm-zone.net - import functioins added * Fri Aug 13 2004 - sm@sm-zone.net - czech translation * Sun Jun 13 2004 - sm@sm-zone.net - gui polishing - code cleanup - some usability improvements * Wed Jun 2 2004 - sm@sm-zone.net - gui polishing - GUI module splitted to several files * Fri Oct 3 2003 - sm@sm-zone.net - added a lot of configuration options - correctly import/show details of requests without extensions (thanks to James.Leavitt@anywaregroup.com) * Mon Sep 1 2003 - sm@sm-zone.net - added renewal of certificates * Wed Aug 13 2003 - sm@sm-zone.net - rewite, now using perl-Gtk * Sat Jul 5 2003 - sm@sm-zone.net - added german translation * Tue Jul 1 2003 - sm@sm-zone.net - convert index.txt if openssl changed from 0.9.6x to 0.9.7x * Fri Jun 27 2003 - sm@sm-zone.net - added export into zip-file thanks to ludwig.nussel@suse.de * Mon Jun 23 2003 - sm@sm-zone.net - some tiny usability improvements thanks to ludwig.nussel@suse.de again * Thu Jun 19 2003 - sm@sm-zone.net - some usability improvements thanks to ludwig.nussel@suse.de - some more configuration options * Fri Oct 4 2002 - sm@sm-zone.net - Fixed bug exporting keys in PEM format - Fixed possible empty lines in cert/key/reqlist thanks to waldemar.mertke@gmx.de * Fri Sep 27 2002 - sm@sm-zone.net - fixed some minor bugs and typos (e.g. concerning openssl 0.9.7) thanks to iebgener@yahoo.com and waldemar.mertke@gmx.de * Wed Aug 21 2002 - sm@sm-zone.net - fixed revocation - added some colors - thanks to curly@e-card.bg * Sun Aug 18 2002 - sm@sm-zone.net - new version 0.4.0 - works independent of OpenCA modules now - some enhancements to functionality (e.g. export of key without passwd) - some smaller bugfixes in usability - new specfile (thanks to oron@actcom.co.il) * Thu Jun 6 2002 - Oron Peled - Cleaned .spec file * Mon Jun 3 2002 - sm@sm-zone.net - fixed wrong templatedir when creating new CA * Sun Jun 2 2002 - sm@sm-zone.net - fixed some minor bugs and typos * Sat May 11 2002 - sm@sm-zone.net - Added parser for x509 extensions * Fri May 03 2002 - sm@sm-zone.net - added possibility to view requests/certificates * Thu Apr 18 2002 - sm@sm-zone.net - added configuration * Sun Apr 7 2002 - sm@sm-zone.net - improved usability * Sun Mar 31 2002 - sm@sm-zone.net - added function to delete ca * Sat Mar 30 2002 - sm@sm-zone.net - allow import of pkcs#10 requests * Thu Mar 21 2002 - sm@sm-zone.et - use different listboxes * Mon Mar 18 2002 - sm@sm-zone.net - initial package tinyca2-0.7.5/INSTALL0000644000175000017500000000207110461475421015601 0ustar schollerscholler000000000000001. Unpack the sources (seems like you got it already) 2. Configure the following paths for your setup. These variables are located in the file tinyca itself. @INC (location of the directory lib) $init->{'opensslbin'} (location of your openssl binary) $init->{'templatedir'} (location of the directory templates) $init->{'zipbin'} (location of your zip binary) $init->{'tarbin'} (location of your tar binary) 3. If you want to have german/spanish/czech/swedish texts: Generate the file tinyca.mo from po/de.po: msgfmt po/de.po -o locale/de/LC_MESSAGES/tinyca.mo msgfmt po/es.po -o locale/es/LC_MESSAGES/tinyca.mo msgfmt po/cs.po -o locale/cs/LC_MESSAGES/tinyca.mo msgfmt po/sv.po -o locale/sv/LC_MESSAGES/tinyca.mo or even more simple: call make in the directory po/ If your locale is not set to german/spanish: export LC_ALL=de_DE.UTF-8 or export LC_ALL=es_ES.UTF-8 or export LC_ALL=cs_CZ.UTF-8 or export LC_ALL=sv_SE.UTF-8 before you call tinyca. 4. Call tinyca2, use it and report bugs :-)) tinyca2-0.7.5/CHANGES0000644000175000017500000001641510461475421015552 0ustar schollerscholler00000000000000$Id: CHANGES,v 1.23 2006/07/25 20:10:54 sm Exp $ version 0.7.5 - Tue July 25 2006 * added swedish translation many thanks to Daniel Nylander version 0.7.4 - Thu June 29 2006 * fixed invalid filename encoding with german umlauts in base64 thanks to Bruno Blumenthal * Fixed display of UTF8 characters in the GUI Debian #367829 version 0.7.3 - Tue May 23 2006 * Add environment variable Gentoo #78576 thanks to dragonheart at gentoo dot org * Fixed crash when CA is created with nsCertType Debian #354386 version 0.7.3 - Tue May 23 2006 * Enhanced version detection thanks to Peter Marschall Debian #360766 #360555 * Changed command for openssl due to changed openssl behavior regarding fingerprints thanks to Peter Marschall Debian #360768 * Added "friendly name" to PKCS#12 export Debian #364617 * Corrected exit call thanks to Peter Marschall Debian #360767 version 0.7.2 - Sat Feb 18 2006 * Fixed bug, which made keysize always 4096 * Implemented correct usage of openssl crl depending on openssl version * Added tar file support for export version 0.7.1 - Sat Oct 22 2005 * Fixed possible crashbug, thanks to * Choose CA validity as maximal certificate lifetime * correctly include/don't include keys in exported certificate files thanks to "thus0 at free dot fr" * added ripemd160 support, thanks to Wim Lewis * added possibility to create pkcs#12 without password * fixed broken OU in SubCA, thanks to Charles Lepple * fixed bug which made saving options with comboboxes impossible thanks to "thus0 at free dot fr" * fixed bug inseting the right serial number during import thanks to Daniel Kahn Gillmor version 0.7.0 - Sun Apr 10 2005 * migrated to perl-Gtk2 * added advanced export options (Debian #293931) * added CA history * fixed some minor bugs version 0.6.8 (beta) - Sun Feb 20 2004 * added detection for openssl 0.9.8 * removed crlDistributionPoint for Root-CA * added patch for multiple OUs Thanks to Uwe Arndt * added patch for multiple subjectAltName extensions (Debian #271183) Thanks to Peter Marschall version 0.6.7 (beta) - Mon Dec 5 2004 * added import functionality version 0.6.6 (beta) - Fri Aug 13 2004 * added czech translation Thanks to Robert Wolf version 0.6.5 (beta) - Thu Aug 05 2004 * added spanish translation Thanks to Ramon Pons Vivanco * force (re)parsing a newly created request * force delete of internal structures, when deleting a CA version 0.6.4 (beta) - Thu Jul 15 2004 * fixed bug, showing wrong options for renewal of certificates * fixed bug creating requests via rightclick directly after creating a new CA (thanks to wbx@openbsd.de) * fixed bug which added ugly empty box to cert/req page * fixed bug with wrong openssl.conf during startup (server-cert with ca-extensions) (thanks to bernhard.dawuidow@tronicplanet.de) * fixed ca-config dialog during creation of root-ca (drop-downs) (thanks to X_KurJ@viessmann.com) * revocation reason can be given with openssl 0.9.7 * changed default exportdir to users home * remeber exportdir from last export * added possibility to set the extension extendedKeyUsage * added possibility to leave email out of the subject dn (0.9.7) version 0.6.3 (beta) - Wed Jun 16 2004 * fixed bug which made it impossible to create new requests version 0.6.2 (beta) - Sun Jun 13 2004 * added new look for some functions * key, request and certificate can be generated in one step * code cleanup version 0.6.1 (beta) - Sat May 22 2004 * fixed bug, which made it impossible to create a new Root-CA Thanks to Olaf Gellert version 0.6.0 (beta) - Tue May 11 2004 * some minor usability improvements * added possibility to create SubCAs now * added possibility also to use DSA keys * added possibility to select the digest during key creation * added possibility to export the complete CA-chain of a SubCA Thanks a lot to Olaf Gellert for ideas and patches. version 0.5.4 (beta) - Fri Oct 3 2003 * added a lot of configuration options * correctly import/show details of requests without extensions (thanks to James.Leavitt@anywaregroup.com) version 0.5.3 (beta) - Mon Sep 29 2003 * fixed wrong label while creating new CA * fixed bug, saving configuration is possible again version 0.5.2 (beta) - Mon Sep 1 2003 * added renewal of certificates version 0.5.1 (beta) - Tue Aug 26 2003 * code cleanup * fixed some minor bugs and typos * corrected some window sizes and tables * added accelerators to the menu version 0.5.0 (beta) - Sat Aug 16 2003 * GUI rewriten with perl-Gtk/Gnome version 0.4.9 (beta) - Sat Jul 5 2003 * added german translation version 0.4.8 (beta) - Tue Jul 1 2003 * convert index.txt if openssl changed from 0.9.6x to 0.9.7x version 0.4.7 (beta) - Fri Jun 27 2003 * added export into zip-file thanks to ludwig.nussel@suse.de version 0.4.6 (beta) - Mon Jun 23 2003 * some tiny usability improvements thanks to ludwig.nussel@suse.de again version 0.4.5 (beta) - Thu Jun 19 2003 * some usability improvements thanks to ludwig.nussel@suse.de * some more configuration options version 0.4.4 (beta) - Fri Oct 4 2002 * Fixed bug exporting keys in PEM format * Fixed possible empty lines in cert/key/reqlist thanks to waldemar.mertke@gmx.de version 0.4.3 (beta) - Fri Sep 27 2002 * Fixed some minor bugs and typos (e.g. concerning openssl 0.9.7) thanks to iebgener@yahoo.com and waldemar.mertke@gmx.de version 0.4.2 (beta) - Sat Aug 24 2002 * fixed revocation when serial is > 15 thanks to curly@e-card.bg * fixed recognition of java-generated requests thanks to matthew.lewis@syntegra.com * code cleanup version 0.4.1 (beta) - Wed Aug 21 2002 * fixed revocation * added some colors * thanks to curly@e-card.bg version 0.4.0 (beta) - Sun Aug 18 2002 * works independent of OpenCA modules now * some enhancements to functionality (e.g. export of key without passwd) * some smaller bugfixes in usability * new specfile (thanks to oron@actcom.co.il) version 0.3.4 (beta) - Mon Jun 3 2002 * fixed wrong templatedir when creating a new CA version 0.3.3 (beta) - Sun Jun 2 2002 * fixed some minor bugs and typos import of requests from ssh-sentinel should work now without problems version 0.3.2 (beta) - Sat May 11 2002 * added parser for x509 extensions when viewing certificate details version 0.3.1 (beta) - Fri May 3 2002 * added option to view complete certificate/request as text version 0.3.0 (beta) - Thu Apr 18 2002 * added possibility to configure openssl * fixed some minor bugs version 0.2.5 (beta) - Sun Apr 7 2002 * improved usabilty and errorhandling * fixed some minor bugs and typos version 0.2.4 (beta) - Sun Mar 31 2002 * added possibilty to import PKCS#10 requests * added function to delete a configured CA version 0.2.3 (beta) - Tue Mar 26 2002 * fixed bug with expiration date defaults to 30 days when creating a new CA * change status to E in index.txt, if certificate is expired tinyca2-0.7.5/templates/0000755000175000017500000000000010461475421016546 5ustar schollerscholler00000000000000tinyca2-0.7.5/templates/openssl.cnf0000644000175000017500000000766210461475421020734 0ustar schollerscholler00000000000000[ ca ] default_ca = server_ca [ client_ca ] dir = %dir% certs = $dir/certs crl_dir = $dir/crl database = $dir/index.txt new_certs_dir = $dir/newcerts certificate = $dir/cacert.pem serial = $dir/serial crl = $dir/crl.pem private_key = $dir/cacert.key RANDFILE = $dir/.rand x509_extensions = client_cert default_days = 365 default_crl_days= 30 default_md = sha1 preserve = no policy = policy_client [ server_ca ] dir = %dir% certs = $dir/certs crl_dir = $dir/crl database = $dir/index.txt new_certs_dir = $dir/newcerts certificate = $dir/cacert.pem serial = $dir/serial crl = $dir/crl.pem private_key = $dir/cacert.key RANDFILE = $dir/.rand x509_extensions = server_cert default_days = 365 default_crl_days= 30 default_md = sha1 preserve = no policy = policy_server [ ca_ca ] dir = %dir% certs = $dir/certs crl_dir = $dir/crl database = $dir/index.txt new_certs_dir = $dir/newcerts certificate = $dir/cacert.pem serial = $dir/serial crl = $dir/crl.pem private_key = $dir/cacert.key RANDFILE = $dir/.rand x509_extensions = v3_ca default_days = 365 default_crl_days= 30 default_md = sha1 preserve = no policy = policy_ca [ policy_client ] countryName = optional stateOrProvinceName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional [ policy_server ] countryName = optional stateOrProvinceName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional [ policy_ca ] countryName = optional stateOrProvinceName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional [ req ] default_bits = 4096 default_keyfile = privkey.pem distinguished_name = req_distinguished_name attributes = req_attributes x509_extensions = v3_ca string_mask = nombstr req_extensions = v3_req [ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_default = AU countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) stateOrProvinceName_default = Some-State localityName = Locality Name (eg, city) 0.organizationName = Organization Name (eg, company) 0.organizationName_default = Internet Widgits Pty Ltd organizationalUnitName = Organizational Unit Name (eg, section) commonName = Common Name (eg, YOUR name) commonName_max = 64 emailAddress = Email Address emailAddress_max = 40 [ v3_req ] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment [ req_attributes ] challengePassword = A challenge password challengePassword_min = 4 challengePassword_max = 20 unstructuredName = An optional company name [ client_cert ] basicConstraints=CA:FALSE nsCertType = client, email, objsign nsComment = "TinyCA Generated Certificate" keyUsage = nonRepudiation, digitalSignature, keyEncipherment subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer:always subjectAltName=email:copy issuerAltName=issuer:copy [ server_cert ] basicConstraints=CA:FALSE nsCertType = server nsComment = "TinyCA Generated Certificate" subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer:always subjectAltName=email:copy issuerAltName=issuer:copy [ v3_ca ] nsComment = "TinyCA Generated Certificate" subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always,issuer:always basicConstraints = critical,CA:true keyUsage = keyCertSign, cRLSign nsCertType = sslCA, emailCA subjectAltName=email:copy issuerAltName=issuer:copy [ crl_ext ] authorityKeyIdentifier=keyid:always,issuer:always