darksign Posted February 2, 2012 Report Share Posted February 2, 2012 To ko var izdarīt izmantojot komandrindu ir šādi: openssl pkcs12 -export -in tirgotajs.pem -out tirgotajs.p12 -certfile CACert.pem -inkey tirgotajs_key.pem Rezultātā tiek noģenrerēts p12 fails. Šeit tiek izmantots arī parametrs "-certfile". (p.s. CACert.pem ir tas pats ECOMM.pem ko FDL atsūta) Pēc tam tiek ģenerēts keystore fails: openssl pkcs12 -in tirgotajs.p12 > tirgotajs_keystore.pem Tad nu nepieciešams šīs divas rindiņas pārvērst uz PHP kodu. Forumos atradu ka citi joprojām izmanto konsoli (exec() funkciju), taču tas man neder (arhīva pēc ieliku citātu) [avots: http://www.phpbuilde....php?t=10321977]: 2. Create a PEM encoded certificate using above TEST.crt $exestr = "openssl pkcs12 -export -in TEST.crt -inkey MY_PRIVATE_KEY [b]-certfile MY_CA_CERT[/b] -name blablabla -passin pass:MYPASS -passout pass:MYPASS -out TMPCERT"; $exestr2 = "openssl pkcs12 -in TMPCERT -passin pass:MYPASS -passout pass:MYPASS -out TEST.pem"; Līdz šim man ir izdevies uzģenerēt to pašu p12 failu ar šādu te veidu: openssl_pkcs12_export($signed_csr, $cerificate_out, $private_key_resource, "parole"); //p.s. $signed_csr <-- parakstiits "tirgotajs.pem" ko atsuuta FDL, un $private_key_resource -- tirgotaja privaataa atsleega // $cerificate_out -> On success, this will hold the PKCS#12. file_put_contents("./certificate.p12", $cerificate_out); //saglabaajam failaa Atšķirība tāda, ka PHP koda piemērā netiek izmantots CA sertifikāts jeb "-certfile CACert.pem". Līdz ar to, kā tālāk izveidot keystore failu? Jo PHP funkcijas izmantojot, vienīgais ko varu izdomāt ir: $certs_pem = array(); $pkcs12 = file_get_contents($certificate_p12_path); openssl_pkcs12_read($pkcs12, $certs_pem, $passphrase); echo "<br />Certificate keystore arr: <br />"; print_r($certs_pem); Un šajā gadījumā $certs_pem satur šādu te masīvu: Array ( [cert] => -----BEGIN CERTIFICATE----- ....... -----END CERTIFICATE----- [pkey] => -----BEGIN RSA PRIVATE KEY----- ............. -----END RSA PRIVATE KEY----- [extracerts] => Array ( ) ) Taču konsolē ģenerētais KeyStore fails satur šādu struktūru: Bag Attributes localKeyID: 64 7A 55 FE 29 .............................4 D1 C7 E9 CF subject=/C=lv/O=veikals.lv/CN=tirgotajaID issuer=/C=LV/ST=Riga/L=Riga/O=BSC/OU=BSC/CN=ECOMM/emailAddress=example@example.com -----BEGIN CERTIFICATE----- ............. -----END CERTIFICATE----- Bag Attributes: <No Attributes> subject=/C=LV/ST=Riga/L=Riga/O=BSC/OU=BSC/CN=ECOMM/emailAddress=example@example.com issuer=/C=LV/ST=Riga/L=Riga/O=BSC/OU=BSC/CN=ECOMM/emailAddress=example@example.com -----BEGIN CERTIFICATE----- ............. -----END CERTIFICATE----- Bag Attributes localKeyID: 64 7A 55 FE 29 CE B........................C7 E9 CF Key Attributes: <No Attributes> -----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: DES-EDE3-CBC,4A53F67F2ACB00AE ...................... -----END RSA PRIVATE KEY----- Kā ar PHP var uztaisīt to pašu keystore failu? Un kur ielikt to CAcert.pem? Cerams, ka kāds zinošāks palīdzēs, jo līdz šim neko neesmu atradis kur ievietot to CAcert... p.s. ir pieejams arī pkcs7 formāta (it kā chain) fails, ko FDL sūta pielikumā, bet tā kā konsoles komandās tas netiek izmantots, tad diez vai vajag to izmantot priekš PHP. Quote Link to comment Share on other sites More sharing options...
vincister Posted February 2, 2012 Report Share Posted February 2, 2012 Kāpēc to jādara ar PHP? Sertifikātu uztaisa vienreiz, noliek vietā un izmanto. Quote Link to comment Share on other sites More sharing options...
briedis Posted February 2, 2012 Report Share Posted February 2, 2012 Mjā, piekritīšu. Līdzi tika dota dokumentācija un paraugs ar visām komandām priekš openssl, veicot visu kā teikts, nevajadzētu būt problēmām. (Pirms kāda laika arī ģenerēju, viss bija ok) Quote Link to comment Share on other sites More sharing options...
darksign Posted February 2, 2012 Author Report Share Posted February 2, 2012 nu man vnk. ir uzdevums, uztaisīt tā, lai lietotājs var pats mainīt visus sertifikātus ar vienkāršu "upload" vai arī "send-to-email" pogām... kā arī ir izdiskutēts jautājums.. taču, pasūtītājs grib, lai tā ir. p.s. nav tā ka tikai vienreiz.. šobrīd tas ir jādara katru gadu. (tur ar tas suns aprakts - vienreiz uztaisīšu, pēc tam, useris, varēs lietot nebēdājot, ka neko nezin no openssl, vai arī, ja developeris nav sasniedzams) galu galā, vienalga par to pamatojumu, bet vai tad ar tīru PHP nevar izdarīt šo darbiņu??? Quote Link to comment Share on other sites More sharing options...
briedis Posted February 2, 2012 Report Share Posted February 2, 2012 Hmm, pamācībās arī tika dots līdzi batch fails, kur tika prasīts tikai, lai ievada tur vajadzīgos datus. Quote Link to comment Share on other sites More sharing options...
werd Posted February 3, 2012 Report Share Posted February 3, 2012 http://php.net/manual/en/book.openssl.php Quote Link to comment Share on other sites More sharing options...
darksign Posted February 3, 2012 Author Report Share Posted February 3, 2012 Hmm, pamācībās arī tika dots līdzi batch fails, kur tika prasīts tikai, lai ievada tur vajadzīgos datus. Jā tāds fakts ir, bet kāds šim faktam sakars ar minētajām php funkcijām. Un to būtību, ka neizdodas ar php funkcijām ģenerēt p12 failu, kurā būtu iešūts arī CAcert ? http://php.net/manua...ook.openssl.php To funkciju sarakstu esmu redzējis un pētījis daudzkārt, bet tā arī neesmu atradis, kura no funkcijām ļautu iešūt p12 failā klāt to CAcert. Vai kāds varētu palīdzēt? Quote Link to comment Share on other sites More sharing options...
darksign Posted February 3, 2012 Author Report Share Posted February 3, 2012 (edited) Viss, pats atradu.. topiks slēgts. Vienkārši php dokumentācijā trūkst apraksts par "openssl_pkcs12_export" funkcijas optional parametru $args, tāpēc arī tik ilgi gāja. Paldies visiem, kas vismaz centās iedziļināties :) Edited February 3, 2012 by darksign Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.