Закрытый и открытый ключи математически связаны. Процесс генерации дает вам оба , всегда ; один называется приватным (вы держите его в безопасности), другой называется публичным (вы можете дать его любому)
Ссылку трудно найти, поэтому знание одного из них не поможет найти другого.
Когда вы что-то подписываете, вам нужен ваш личный ключ. Когда люди хотят проверить подпись, им нужен ваш открытый ключ.
Когда вы что-то шифруете, вам нужен открытый ключ получателя. Только он сможет расшифровать, потому что для этого требуется закрытый ключ.
Итак, в начале у вас есть оба файла, и вы можете извлечь открытый ключ для распространения (или поместить его в сертификат, если хотите, чтобы другие доверяли ему).
Редактировать: я начал комментарий, но он был слишком длинным, поэтому вот он:
Каждая библиотека безопасности имеет свои собственные инструменты, которые реализуют необходимую математику для построения правильной публичной / приватной пары. OpenSSL поставляется с инструментом командной строки, с помощью которого вы можете создать свой собственный CA, создавать запросы на сертификаты и сертификаты. Windows Server имеет службы сертификации с аналогичными функциями. .NET имеет инструмент sn (sn = строгое имя), который создает файлы (с расширением snk) с открытыми / закрытыми ключами (используется для подписи DLL). Visual Studio имеет графический интерфейс для создания файлов snk. Конечно, в мире Java есть инструменты (один из них называется keystore, если я не ошибаюсь) и в Mac OS X.
Когда вы сами создаете сертификаты, они называются «самоподписанными» и не пользуются доверием у остального мира.