Forum und email
OpenSSL funkce

CXI. OpenSSL funkce

Úvod

Toto rozšíření využívá funkce OpenSSL pro tvorbu a ověřování podpisů a pečetění (kódování) a otvírání (dekódování) dat. OpenSSL nabízí mnoho vlastností, které tato extenze v současnosti nepodporuje. Některé z nich mohou být v budoucnu přidány.

Požadavky

Abyste mohli používat tyto funkce, musíte nainstalovat OpenSSL. PHP-4.0.4pl1 potřebuje OpenSSL >= 0.9.6, ale PHP-4.0.5 a vyšší budou pracovat i s OpenSSL >= 0.9.5.

Instalace

Abyste v PHP mohli používat funkce OpenSSL, musíte PHP zkompilovat s volbou --with-openssl[=DIR].

Poznámka pro uživatele Win32: Aby toto rozšíření fungovalo ve Windows, musíte zkopírovat soubor libeay32.dll z adresáře DLL Win32 distribuce do adresáře SYSTEM32. (Např.: C:\WINNT\SYSTEM32 nebo C:\WINDOWS\SYSTEM32)

Navíc, pokud máte v úmyslu používat funkce generování klíčů a podepisování certifikátů, musíte na váš systém nainstalovat platný openssl.cnf. Do PHP 4.3.0 jsme připojili ukázkový konfigurační soubor do adresáře openssl Win32 distribuce. Pokud používáte 4.2.0 nebo novější a tento soubor vám chybí, můžete ho stáhnout z domácí stránky OpenSSL nebo stáhněte PHP 4.3.0 a použijte konfigurační souboru z něj.

Poznámka pro uživatele Win32: PHP bude hledat openssl.cnf tímto postupem:

  • Proměnná prostředí OPENSSL_CONF, pokud je nastavena, bude použita jako cesta (včetně názvu souboru) konfiguračního souboru.

  • Proměnná prostředí SSLEAY_CONF, pokud je nastavena, bude použita jako cesta (včetně názvu souboru) konfiguračního souboru.

  • Bude se předpokládat, že soubor openssl.cnf bude nalezen ve výchozí oblasti certifikátů, která byla zkonfigurována při kompilaci DLL knihovny openssl. To obvykle znamená, že výchozí název souboru je c:\usr\local\ssl\openssl.cnf.

Ve své instalaci se musíte rozhodnout, zda nainstalujete konfigurační soubor do c:\usr\local\ssl\openssl.cnf nebo zda ho nainstalujete někam jinam a pro nalezení konfiguračního souboru použijete proměnnou prostředí (pravděpodpobně jako per-virtual-host). Vemte na vědomí, že výchozí cestu lze změnit v parametru configargs funkcí, které potřebují konfigurační soubor.

Konfigurace běhu

Toto rozšíření nemá definováno žádné konfigurační direktivy.

Parametry s klíči/certifikáty

Několik openssl funkcí potřebuje parametr s klíčem nebo certifikátem. PHP 4.0.5 a starší musí pro klíč a certifikát používat resource vrácený některou z funkcí openssl_get_xxx. Pozdější verzi mohou používat libovolnou z těchto metod:

  • Certifikáty

    1. X.509 zdroj vrácený funkcí openssl_x509_read()

    2. Řetězec ve formátu file://path/to/cert.pem; uvedený soubor musí obsahovat PEM-zakódovaný certifikát

    3. Řetězec obsahující PEM-zakódovaný certifikát

  • Veřejné a soukromé klíče

    1. Zdroj klíče vrácený funkcí openssl_get_publickey() nebo openssl_get_privatekey()

    2. Pouze veřejné klíče: zdroj X.509

    3. Řetězec ve formátu file://path/to/file.pem - uvedený soubor musí obsahovat PEM-zakódovaný certifikát / veřejný klíč (může obsahovat oba)

    4. Řetězec obsahující obsah certifikátu / klíče, PEM-zakódovaný

    5. Pro soukromé klíče lze také použít syntaxi array($key, $heslo) kde $key reprezentuje klíč zadaný pomocí file:// nebo textového uvedení zmíněného výše a $heslo reprezentuje řetězec obsahující heslo pro tento soukromý klíč

Ověření certifikátu

Když voláte funkci, která ověřuje podpis / certifikát, parametr cainfo je pole obsahující názvy souborů a adresářů, které určují umístění souborů důvěryhodných CA. Pokud je zadán adresář, musí to být správně uspořádaný adresář s hashi tak, jak ho používá příkaz openssl.

Předdefinované konstanty

Tyto konstanty jsou definovány tímto rozšířením a budou k dispozici pouze tehdy, bylo-li rozšíření zkompilováno společně s PHP nebo dynamicky zavedeno za běhu.

Přepínače ověření účelu

X509_PURPOSE_SSL_CLIENT (integer)

X509_PURPOSE_SSL_SERVER (integer)

X509_PURPOSE_NS_SSL_SERVER (integer)

X509_PURPOSE_SMIME_SIGN (integer)

X509_PURPOSE_SMIME_ENCRYPT (integer)

X509_PURPOSE_CRL_SIGN (integer)

X509_PURPOSE_ANY (integer)

Přepínače vycpávky

OPENSSL_PKCS1_PADDING (integer)

OPENSSL_SSLV23_PADDING (integer)

OPENSSL_NO_PADDING (integer)

OPENSSL_PKCS1_OAEP_PADDING (integer)

Typy klíčů

OPENSSL_KEYTYPE_RSA (integer)

OPENSSL_KEYTYPE_DSA (integer)

OPENSSL_KEYTYPE_DH (integer)

Přepínače / konstanty PKCS7

S/MIME funkce používají přepínače, kterou jsou specifikovány jako bitové pole, které může obsahovat jednu nebo více následujících hodnot:

Tabulka 1. PKCS7 konstanty

KonstantaPopis
PKCS7_TEXTpřidá "text/plain content type" hlavičky k zakódovaným/podepsaným zprávám. Při dekódování nebo ověřování odstraní tyto hlavičky z výstupu - když není rozkódovaná nebo ověřená zpráva MIME typu text/plain, dojde k chybě.
PKCS7_BINARYza normálních okolností je zdrojová zpráva převedená do "kanonického" formátu, který používá pro konce řádků používá CR a LF: tak, jak to požaduje S/MIME specifikace. Když je zapnuta tato volba, nedojde k žádnému převodu. To se hodí v případě manipulace s binárními daty, která nemusí být v MIME formátu.
PKCS7_NOINTERNpři ověřování zprávy jsou za normálních okolností certifikáty obsažené ve zprávě (pokud nějaké existují) prohledávané na výskyt podpisového certifikátu. S touto volbou se použijí pouze certifikáty zadané v parametru extracerts funkce openssl_pkcs7_verify(). Zadané certifikáty ale stále mohou být použity jako nedůvěryhodné CA.
PKCS7_NOVERIFYneověřovat certifikát podepisovatele podepsané zprávy.
PKCS7_NOCHAINnespojovat ověření podepisovatelových certifikátů: to znamená nepoužívat certifikáty v podepsané zprávě jako nedůvěryhodné CA.
PKCS7_NOCERTSpři podepisování zprávy je za normálních okolností připojen certifikát podepisovatele - s touto volbou tomu tak není. To způsobí snížení velikosti podepsané zprávy, ale ověřovatel musí mít kopii podepisovatelova certifikátu k dispozici lokálně (například předanou v parametru extracerts funkce openssl_pkcs7_verify()).
PKCS7_NOATTRPokud je zpráva podepsána za normálních okolností, je připojena sada atributů obsahující čas podpisu a podporované symetrické algoritmy. S touto volbou není připojena.
PKCS7_DETACHEDPři podpisu zprávy použije podpis čitelného text spolu s MIME typem multipart/signed. To je výchozí nastavení, pokud ve funkci openssl_pkcs7_sign() nezadáte parametr flags. Pokud tuto volbu vypnete, bude zpráva podepsána za použití neprůhledného podepsání, které je více odolné vůči překladům e-mailových bran, ale nelze přečíst klienty, kteří nepodporují S/MIME.
PKCS7_NOSIGSNezkoušet a neověřovat podpisy zprávy

Poznámka: Tyto konstanty byly přidány ve verzi 4.0.6.

Obsah
openssl_csr_export_to_file -- Exports a CSR to a file
openssl_csr_export -- Exports a CSR as a string
openssl_csr_get_public_key -- Returns the public key of a CERT
openssl_csr_get_subject -- Returns the subject of a CERT
openssl_csr_new -- Generates a CSR
openssl_csr_sign -- Sign a CSR with another certificate (or itself) and generate a certificate
openssl_error_string -- Return openSSL error message
openssl_free_key -- Uvolnit prostředky klíče
openssl_get_privatekey -- Připravit soukromý PEM klíč k použití
openssl_get_publickey --  Získat z certifikátu veřejný klíč a připravit ho k použití
openssl_open -- Otevřít zapečetěná data
openssl_pkcs7_decrypt -- Decrypts an S/MIME encrypted message
openssl_pkcs7_encrypt -- Encrypt an S/MIME message
openssl_pkcs7_sign -- Sign an S/MIME message
openssl_pkcs7_verify -- Verifies the signature of an S/MIME signed message
openssl_pkey_export_to_file -- Gets an exportable representation of a key into a file
openssl_pkey_export -- Gets an exportable representation of a key into a string
openssl_pkey_free -- Frees a private key
openssl_pkey_get_details -- Returns an array with the key details (bits, pkey, type)
openssl_pkey_get_private -- Get a private key
openssl_pkey_get_public -- Extract public key from certificate and prepare it for use
openssl_pkey_new -- Generates a new private key
openssl_private_decrypt -- Decrypts data with private key
openssl_private_encrypt -- Encrypts data with private key
openssl_public_decrypt -- Decrypts data with public key
openssl_public_encrypt -- Encrypts data with public key
openssl_seal -- Zapečetit (zakódovat) data
openssl_sign -- Generate signature
openssl_verify -- Ověřit podpis
openssl_x509_check_private_key -- Checks if a private key corresponds to a certificate
openssl_x509_checkpurpose -- Verifies if a certificate can be used for a particular purpose
openssl_x509_export_to_file -- Exports a certificate to file
openssl_x509_export -- Exports a certificate as a string
openssl_x509_free -- Free certificate resource
openssl_x509_parse -- Parse an X509 certificate and return the information as an array
openssl_x509_read -- Parse an X.509 certificate and return a resource identifier for it