Jump to content
php.lv forumi

Recommended Posts

Posted

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.

Posted

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)

Posted

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???

Posted

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 ?

 

 

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?

Posted (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 by darksign

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...