Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][OpenSSL] jak wygenerować certyfikat?
nitro18
post 15.10.2012, 23:21:56
Post #1





Grupa: Zarejestrowani
Postów: 311
Pomógł: 7
Dołączył: 2.08.2006
Skąd: Bystrzyca Kłodzka/Nysa

Ostrzeżenie: (10%)
X----


Witam,

Mam problem. Mam wygenerowany klucz cakey.pem i certyfikat ca.cert dla CA jako certyfikat samopodpisujący. Teraz chciałbym z poziomu php wygenerować certyfikat klienta na podstawie CA. w openssl z linii komend wiem jak to zrobić, ale jak to zrobić w PHP?

mam kod:

  1. $fp = fopen('ca.pem', "r");
  2. $myKey = fread($fp, filesize('ca.pem'));
  3. $fp = fopen('ca.crt', "r");
  4. $myCert = fread($fp, filesize('ca.crt'));
  5.  
  6.  
  7. $privkey = openssl_pkey_get_private($myKey, '1234');
  8.  
  9.  
  10. $dn = array( "countryName" => 'PL',
  11. "stateOrProvinceName" => 'Poorskie',
  12. "localityName" => 'Somewhsddddity',
  13. "organizationName" => 'MySfdfdfdffelf',
  14. "organizationalUnitName" => 'Whadfdfdftever',
  15. "commonName" => 'www.wdfdfdfdfdfp.pl',
  16. "emailAddress" => 'usdsdsder@domain.com');
  17.  
  18.  
  19.  
  20.  
  21. $req_csr = openssl_csr_new ($dn, $req_key);
  22. $scert = openssl_csr_sign($req_csr, $myCert, $privkey, 365);
  23.  
  24.  
  25.  
  26. openssl_x509_export($scert, 'client.crt');


tylko nawala przy ostatniej linii? Może ktoś pomoże?

Dziękuję.
Go to the top of the page
+Quote Post
abort
post 16.10.2012, 12:20:03
Post #2





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

Ostrzeżenie: (0%)
-----


drugi parametr do openssl_x509_export musi być ZMIENNĄ (zmienną typu string). Manual:

bool openssl_x509_export ( mixed $x509 , string &$output [, bool $notext = TRUE ] )

x509
See Key/Certificate parameters for a list of valid values.

output
On success, this will hold the PEM.


Zwróć uwagę na "&" w openssl_x509_export - to jest zmienna przekazywana przez referencję, bo funkcja openssl_x509_export zmieni wartość tej zmiennej. Ty podajesz sztywny ciąg znaków - i ta biedna funkcja próbuje to zmienić. Ale to pikuś. Gorzej, że Ty tego już nie będziesz nijak w stanie odczytać.
Go to the top of the page
+Quote Post
nitro18
post 16.10.2012, 17:29:57
Post #3





Grupa: Zarejestrowani
Postów: 311
Pomógł: 7
Dołączył: 2.08.2006
Skąd: Bystrzyca Kłodzka/Nysa

Ostrzeżenie: (10%)
X----


to dlaczego mi to działa:

  1. <?php
  2.  
  3. $config = array('private_key_bits' => 1024,
  4. 'x509_extensions' => 'v3_ca',
  5. 'req_extensions' => 'v3_req',
  6. 'digest_alg' => 'sha1',
  7. 'private_key_type' => OPENSSL_KEYTYPE_RSA
  8. );
  9. $dn = array( "countryName" => 'PL',
  10. "stateOrProvinceName" => 'State',
  11. "localityName" => 'SomewhereCity',
  12. "organizationName" => 'MySelf',
  13. "organizationalUnitName" => 'Whatever',
  14. "commonName" => 'mySelf',
  15. "emailAddress" => 'user@domain.com');
  16. $privkeypass = '1234';
  17. $numberofdays = 3650;
  18.  
  19. $privkey = openssl_pkey_new($config);
  20. $csr = openssl_csr_new($dn, $privkey);
  21. $sscert = openssl_csr_sign($csr, null, $privkey, $numberofdays,array(),1);
  22.  
  23. openssl_x509_export_to_file($sscert,'ca.crt');
  24. openssl_pkey_export_to_file($privkey,'ca.pem', $privkeypass);
  25.  
  26.  
  27.  
  28.  
  29. ?>
  30.  
  31.  
Go to the top of the page
+Quote Post
abort
post 16.10.2012, 17:38:43
Post #4





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

Ostrzeżenie: (0%)
-----


W pierwszym postingu w tym wątku masz linię
  1. openssl_x509_export($scert, 'client.crt');

Zgłaszałeś problem, że "nawala przy ostatniej linii" - na co ja napisałem, że prawdopodobnie źle używasz funkcji openssl_x509_export.
W drugim listingu nie używasz instrukcji openssl_x509_export i piszesz, że wszystko Ci działa.

Nie zauważasz zbieżności?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 2.05.2025 - 05:20