Частные и открытые ключи связаны математически. Процесс генерации получает вас и, всегда; один называется частным (вы держите его в безопасности), один называется общедоступным (вы можете дать его кому-либо) Ссылка трудно найти, поэтому знание одной из них не помогает найти другую.
Когда вы подписываете что-то, вам нужен ваш личный ключ. Когда люди хотят проверить подпись, им нужен ваш открытый ключ.
Когда вы зашифровываете что-то, вам нужен открытый ключ получателя. Только он сможет расшифровать, потому что для этого требуется секретный ключ.
Итак, в начале у вас есть оба файла, и вы можете извлечь открытый ключ для распространения (или поместить его в сертификат, если хотите, чтобы другие люди доверяли ему).
Edit: Я начал комментарий, но это было слишком долго, так вот она:
Каждого libray безопасности имеет свои собственные инструменты, которые реализуют необходимую математику, чтобы построить правильные открытые/закрытые пары. OpenSSL поставляется с инструментом командной строки, с помощью которого вы можете создать свой собственный ЦС, создать запросы сертификатов и сертификаты. Windows Server имеет службы сертификации с аналогичными функциями. .NET имеет инструмент sn (sn = strong name), который создает файлы (с расширением snk) с общедоступными/закрытыми ключами (используется для подписи DLL). Visual Studio имеет интерфейс GUI для создания файлов snk. Конечно, в мире Java есть инструменты (один называется keystore, если я не ошибаюсь), а также в Mac OS X. Когда вы сами создаете сертификаты, они называются «самозаверяющимися» и не доверяются остальной частью Мир.
Если вы чувствуете, что нужно начинать вопрос с SO «Извините, что это не совсем вопрос программирования», тогда вы можете захотеть переосмыслить .... – skaffman
Что это связано с Microsoft? –