Portál AbcLinuxu, 2. května 2025 07:28
Ke své práci potřebuji kvalifikovaný certifikát od ICA (dáno zákazníkem) a jako každoročně došlo na jeho prodloužení. Dřív jsem toto řešil pomocí vmware s windows a to většinou dost nahonem, abych mohl pokusničit, ale letos jsem si dal čas na 'odladění' vygenerování žádosti normálním (leč oficiálně nepodporovaným) způsobem bez activeX komponent.
Byl jsem i připraven na to, že narazím, avšak k mému velkému údivu jsem se setkal u všech lidí z ICA, se kterými jsem komunikoval, s ochotou a profesionalitou. Zvláště tímto děkuji paní Štojdlové za pomoc a trpělivost při těch X iteracích, než jsme odladili postup žádosti tak, aby vše prošlo bez problémů.
Takže, vycházel jsem z politiky vystavené na stránkách ICA. Na tu nespoléhejte, žádost neprošla asi se 4mi chybami, které jsme postupně odstranili (některé položky byly navic, některé chyběly a jiné měly špatný formát).
Níže uvedený popis se týká pouze prodloužení kvalifikovaného certifikátu, ne o jeho prvotní žádost *)... kvůli ní samozřejmě musí každý stejně osobně pro ověření totožnosti. (a nechci polemizovat o správnosti generování privátního klíče prvotní žádosti na počítači, který nemám pod kontrolou sám, někde na pobočce ICA ...)
*) ... na konci článku doplněno
Pro jednoduchost uvádím přímo funkční openssl.cnf včetně příkladů položek
---------- openssl.cnf ---------- HOME = . RANDFILE = $ENV::HOME/.rnd oid_section = new_oids # To use this configuration file with the "-extfile" option of the # "openssl x509" utility, name here the section containing the # X.509v3 extensions to use: # extensions = # (Alternatively, use a configuration file that has only # X.509v3 extensions in its main [= default] section.) [ new_oids ] oid_mpsv=1.3.6.1.4.1.11801.2.1 [ req ] default_bits = 2048 default_keyfile = privkey.pem default_md = sha256 distinguished_name = req_distinguished_name #attributes = req_attributes # Passwords for private keys if not present they will be prompted for # input_password = secret # output_password = secret string_mask = utf8only req_extensions = v3_req # The extensions to add to a certificate request [ req_distinguished_name ] countryName = Country Name (2 znaky kod) (C OID=2.5.4.6) countryName_default = CZ commonName = titul jmeno prijmeni (CN OID=2.5.4.3) commonName_default = Ing. Ferda Mravenec emailAddress = Email Address (Email OID=1.2.840.113549.1.9.1) emailAddress_default = ferda@mravenec.cz givenName = Krestni jmeno (GN OID=2.5.4.42) givenName_default = Ferda name = Jmeno (Name OID=2.5.4.41) name_default = Ing. Ferda Mravenec surname = Prijmeni (SN OID=2.5.4.4) surname_default = Mravenec serialNumber = serialNumber (OID=2.5.4.5) serialNumber_default = ICA - 12345678 #oid_mpsv = IK MPSV (OID=1.3.6.1.4.1.11801.2.1) #oid_mpsv_default = 1234567890 [ req_attributes ] #challengePassword = A challenge password [ v3_req ] # Extensions to add to a certificate request #basicConstraints = CA:FALSE - podle novych pravidel tohle treba zakomentovat keyUsage = nonRepudiation, digitalSignature, keyEncipherment, dataEncipherment ---------- end openssl.cnf -----------
Položku MPSV uvádím pro úplnost kvůli jejímu OID, ale tato položka není potřeba vyplňovat, protože se automaticky přebere z údajů minulého certifikátu. Pozor, pokud by jí někdo přesto uváděl, nesmí být v subjectu certifikátu, ale v extensions! Ostatní položky si změníme (zvláště serialNumber) podle našeho předchozího certifikátu a kódování musí být v UTF8!
Request vygenerujeme příkazem:
openssl req -sha256 -config openssl.cnf -newkey rsa:2048 -nodes -utf8 -out newreq.pem -keyout privkey.pem
a soubor newreq.pem pošleme jako přílohu (!) na adresu 'renewal@ica.cz'. Text zprávy nechávám na fantazii každého, nemá to vliv na podepsání žádosti . Mail musíme samozřejmě podepsat svým platným certifikátem!
Po obdržení proforma faktury a zaplacení dostaneme zipfile s naším certifikátem v různých tvarech a aktuální veřejný certifikát CA v DER formátu. Ten si převedeme na formát PEM příkazem:
openssl x509 -inform der -in cert_ca.der -outform PEM -out cert_ca.pem
a můžeme si vyrobit pro většinu programů stravitelný pkcs12
openssl pkcs12 -export -in 12345678.pem -inkey privkey.pem -certfile cert_ca.pem -out muj-ica.p12 -name ferda
Omlouvám se, pokud by se některého zdatnějšího uživatele dotkl můj (asi až příliš) polopatický návod , ale chci tím eliminovat co nejvíce dotazů a chybných requestů na ICA, protože oceňuji jejich vstřícný přístup a nerad bych, aby za něj byli 'po zásluze potrestání'
...
Mnoho zdaru, Caha
-------------------------
Tak ještě doplnění ze strany ICA k tomu vydání prvotního certifikátu.
Žádost o prvotní certifikát si můžete vygenerovat stejným způsobem jako žádost o obnovu. Pouze nebudete generovat položku serialNumber= serialNumber (OID=2.5.4.5), ta se do certifikátu dostane automaticky při vydávání prvotního certifikátu. Co se týče MPSV OID, ta se v žádosti se negeneruje, pouze při vyřizování žádosti na RA nahlásíte požadavek na IKMPSV - v procesu vydávání certifikátů je na základě tohoto parametru kontaktován server MPSV a IKMPSV se do certu přidá, i když nebylo nic v žádosti.
Vygenerovanou žádost si uložíte na médium ( klíčenku ??, disketu ), které jsou schopni na pobočce RA přečíst a načíst si vaši žádost.
-------------------------
doplnena zmena v generovani zadosti (diky klamiku) aktuálně vyžaduje 1.CA "drobnou" změnu a to přechod z SHA-1 na SHA-2, čili do openssl.cnf přidat řádek: default_md = sha256
-------------------------
doplnena dalsi zmena v generovani zadosti pro inicialní vystavení (diky Františku)
Pro iniciální vystavení certifikátu je v příkladu v článku potřeba zakomentovat položky name a emailAddress a emailovou adresu uvést až v sekci v3_req jako subjectAltName = email:ferda@mravenec.cz viz. diskuse dole ...
Tiskni
Sdílej:
Nektere lidi nema cenu presvedcovat :) ... "nas zakaznik, nas pan" ;). Ale je pravda, ze v te dobe, kdy jsme poprve o certifikat zadali, postsignum teprve zacinalo a ica byla v te dobe jedinou certifikacni autoritou, ktera vam byla schopna zaroven poskytnout mpsv identifikator, takze kdyz uz jsem si ho porizoval, ani jsem se tomu nebranil ....
caha
Děkuji za zápisek. S největší pravděpodobností v budoucnu využiju.
Doplněno pro uplnost k vydání prvotního certifikátu....
Díky. Přesně tohle jsem hledal. Už jdu na ně .
openssl req -sha256 -config openssl.cnf -newkey rsa:2048 -nodes -utf8 -out /tmp/newreq.pem -keyout /tmp/privkey.pem
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.