Насколько я понял, твой знакомый хочет генерировать персональные сертификаты для пользователей (это и есть ключи пользователя, связанные с сертификатом сервера). Для этого нужно, чтобы сертификат, установленный на сервере, имел атрибут CA, равный true, т.е. чтобы с помощью этого сертификата можно было создавать другие сертификаты. Обычно корневые центры сертификации типа thawte и verisign выдают сертификаты, годные лишь для подтверждения подлинности сервера, но не создания других сертификатов (т.е. у них атрибут CA равен false). Поэтому, если сертификат, установленный на сервер, был подписан одним из корневых центров, то, скорее всего, он не годен для создания пользовательских сертификатов.
Эту проблему можно обойти, создав собственный корневой сертификат с установленным атрибутом CA = true. Но в этом случае возникнет новая проблема - пользовательские браузеры будут предупреждать, что не доверяют такому корневому сертификату. Чтобы убрать это предупреждение, пользователи должны будут поместить сгенерированный сертификат в список доверенных центров сертификации.
Для того, чтобы создать пользовательский сертификат, нужно выполнить следующую последовательность действий:
1) сгенерировать пару ключей. Делается с помощью [m]openssl_pkey_new[/m];
2) создать запрос на подпись сертификата с помощью [m]openssl_csr_new[/m] для пользовательских ключей, сгенерированных на шаге 1;
3) подписать сертификат с помощью [m]openssl_csr_sign[/m]. Именно эта функция "связывает" ключи пользователя с сертификатом, установленным на сервере.
4) экспортировать пользовательский сертификат с помощью [m]openssl_x509_export[/m]
После того, как пользовательский сертификат создан, нужно зашифровать закрытый ключ пользовательским паролем. Для этого закрытый ключ достается из сгенерированной пары ключей с помощью [m]openssl_pkey_get_private[/m], после чего зашифровывается и экспортируется с помощью [m]openssl_pkey_export[/m].
После этого можно спокойно отдавать пользователю экспортированный сертификат вместе с зашифрованным закрытым ключом.
ps. Вооще-то, шаг 1 (и частично 2) обычно делается на стороне пользователя, т.к. закрытый ключ, генерируемый на первом шаге, на то и закрытый, что должен быть известен лишь его владельцу и никому больше, в т.ч. и стороне, выдающей сертификат на открытую часть ключа.
На странице
https://www.wmcert.com/Rus/Asp/Registration.asp можно посмотреть, как генерировать ключ и создавать запрос на подпись сертификата на стороне клиента.