Что поставить для commonName при создании ключа OpenSSL? - PullRequest
1 голос
/ 27 января 2010

У меня есть прикладная платформа приложений, которая работает в одноранговой сети между неназванными хостами в сети. Я хочу, чтобы трафик был зашифрован, поэтому я реализовал настройку с помощью M2Crypto, но столкнулся с загадкой. Я понятия не имею, что указывать для «commonName» при создании сертификата. Кажется, ему нужно доменное имя, но ни на одном из компьютеров, на которых это работает, его не будет. Я просто добавил temphost для commonName, но, видимо, это важный параметр. Я получил это при попытке проверить это:

M2Crypto.SSL.Checker.WrongHost: Peer Сертификат commonName не совпадает хост, ожидаемый 127.0.0.1, получил temphost

Есть ли способ обобщить общее имя?

Ответы [ 2 ]

1 голос
/ 28 января 2010

Поэтому, основываясь на вашем комментарии к моему первому ответу, я решил предложить другое решение, которое может подойти для вашего случая. Создайте свой собственный CA сертификат и ключ. Затем ваши коллеги скажут M2Crypto принимать только сертификаты, которые были подписаны этим CA (см. Этот старый вопрос о стековом потоке для API: В чем разница между set_client_CA_list_from_file () и load_verify_info () M2Crypto и когда вы будете использовать каждый из них? ).

Затем на ранних этапах в ваших скриптах сделайте следующее:

from M2Crypto import SSL
SSL.Connection.clientPostConnectionCheck = None

или если вам нужно иметь возможность устанавливать другие виды соединений SSL, посмотрите, можете ли вы контролировать создание объектов SSL.Connection и вызывать их set_post_connection_check_callback () с помощью подходящего средства проверки.

После этого ваши одноранговые узлы должны принимать любые другие одноранговые узлы, если сертификат однорангового узла был подписан только вашим ЦС.

Если вы можете вспомнить какую-либо дополнительную информацию, которую вы могли бы проверить при проверке соединения после отправки, вы можете поместить эту информацию в сертификаты (возможно, в commonName) и написать свой собственный инструмент проверки (вместо None выше).

1 голос
/ 28 января 2010

В вашем случае проверка имени хоста по умолчанию не подходит. Возможно, вы захотите попробовать выполнить проверку отпечатков пальцев. Сначала получите отпечатки каждого сертификата (openssl x509 -fingerprint). Допустим, у вас есть одноранговый узел A и одноранговый узел B с отпечатками пальцев A и B соответственно.

На стороне A на раннем этапе в вашем скрипте вы сделаете следующие вызовы:

from M2Crypto import SSL
SSL.Connection.clientPostConnectionCheck = SSL.Checker(peerCertHash='fingerprint B')

На стороне одноранговой сети B вы делаете то же самое, за исключением использования отпечатка пальца A. Теперь средство проверки сертификатов будет проверять только на соответствие отпечатков пальцев и не будет выполнять дальнейшие проверки.

Этот подход означает, что он отменяет проверку пост-соединения для ALL SSL-соединений, поэтому он не подходит во всех случаях использования. Если вы можете контролировать создание объекта SSL.Connection, вы также можете вызывать set_post_connection_check_callback () для каждого экземпляра, что позволит при необходимости использовать другую программу проверки.

...