à titre expérimental, j'ai déjà eu à faire ceci, mais dis-toi que sous php le module qui s'interface avec OpenSSL et encore en développement et donc toutes les fonctionnalités ne sont pas disponibles (on ne peut spécifier l'utilisation du certificat, il est générique, et on ne peut mettre en place une hiérarchie d'autorité complexe, un niveau maximum). la solution dans ce cas et d'utiliser OpenSSL en ligne de commande en générant et appelant les .bat avec php.
c'est galère, long, et surtout tu ne sera jamais une autorité de confiance. cela te permettra au final uniquement cde permettre de signer des document et sécuriser des connections (c'est déjà pas mal).
et pour répondre à ta dernière question, pkcs12 est juste une convention. tu fais un zip avec la clé privé, le certificat (qui contient la clé pubique) et tu le fournis à son proprio en lui spécifiant comment l'installer et surtout soit supprimer ce document, soit le stocker sur un support amovible.
amuse-la toi bien !