Я недавно экспериментировал с API OpenSSL в C, и меня смущают некоторые функции настройки, а также некоторые концепции в криптографии с открытым ключом в целом.
Я вообще понимаю, как работает криптография с открытым ключом. У вас есть открытый ключ, который доступен каждому, а затем у сервера и клиента есть закрытый ключ, который является секретным и необходим для расшифровки сообщений.
Однако меня немного смущает вопрос, когда вам на самом деле нужен Открытый ключ. Например, понадобится ли веб-браузеру открытый ключ? Я бы подумал, что нет, поскольку кажется, что в большинстве случаев общему ключу нужен только сервер (не клиент). Если у сервера и клиента есть открытый ключ, какой из них используется?
В дополнение к моему заблуждению, факт, что OpenSSL API определяет функцию SSL_CTX_use_PrivateKey_file()
, но не соответствует SSL_CTX_use_PublicKey_file()
. В своих экспериментах я написал простой веб-клиент, который подключается к веб-сайту https и загружает файл. Он отлично работает, и открытый ключ не нужен. Я просто создал закрытый ключ, используя инструменты командной строки OpenSSL, а затем вызвал SSL_CTX_use_PrivateKey_file()
в моей программе.
Но если бы я писал сервер , в отличие от клиента, мне не понадобился бы открытый ключ? И если так, то почему я не вижу ничего подобного use_PublicKey_file
в OpenSSL API?