К моему большому удивлению, openssl-функции оказались одними из самых плохо документированных из тех что мне приходилось использовать в PHP. Это тем более удивительно учитывая огромное количество возможностей самой библиотеки OpenSSL. Поэтому решил записать несколько основых моментов. Рассмотрим пример ассиметричного шифрования с помощью OpenSSL.

Создание пары приватного и публичного ключей

Генерация приватного 1024-битного ключа:
openssl genrsa -out private.pem 1024

Создание парного публичного ключа:
openssl rsa -pubout -in private.pem -out public.pem

Шифрование

Процесс ассимитричного шифрования предпологает что исходное сообщение шифруется с помощью буличного ключа, а расшифровано может быть только приватным ключом. Соответственно, для шифрования используется функция openssl_public_encrypt, а для расшифровки openssl_private_decrypt.

Подпись

Для подтверждения того что зашифрованное сообщение пришло из даверенного источника используется подпись. Но в этом случае ключи используются наоборот - приватным ключом создаётся подпись, а публичным эта подпись проверяется. Таким образом для защищённого обмена сообщениями обе стороны должны обменяться своими публичными ключами. Для создания подписи используется функция openssl_sign, а для проверки openssl_verify.