Установление безопасного соединения с TLS ========================================= Fabric поддерживает защищенную связь между узлами через TLS. TLS-соединение может использовать как одностороннюю (только сервер), так и двустороннюю (сервер и клиент) аутентификацию. Настройка TLS для пир-узлов --------------------------- Пир-узел является и TLS-сервером, и TLS-клиентов. Первым он является, когда другой узел, приложение или CLI устанавливает с ним соединение, а последним - когда он сам устанавливает это соединение с другим пиром или ордерером. Чтобы включить TLS на пир-узле, необходимо установить следующие параметры конфигурации: * ``peer.tls.enabled`` = ``true`` * ``peer.tls.cert.file`` = полный путь к файлу, содержащему серверный сертификат * ``peer.tls.key.file`` = полный путь к файлу, содержащему серверный приватный ключ * ``peer.tls.rootcert.file`` = полный путь к файлу, содержащему цепочку сертификатов CA, выдавшего серверный сертификат По умолчанию, если TLS включен на узле, то аутентификация клиентов выключена. Это означает, что пир-узел не будет проверять сертификаты клиентов (другого пира, приложения или CLI) во время TLS-рукопожатия. Чтобы включить аутентификацию клиентов, установите параметр ``peer.tls.clientAuthRequired`` на ``true``, и ``peer.tls.clientRootCAs.files`` на файлы цепочек CA, содержащие сертификаты CA, выдающие TLS-сертификаты клиентам вашей организации. По умолчанию, узел будет использовать одни и те же сертификат и ключ в роли сервера и в роли клиента. Чтобы в роли клиента использовать другую пару сертификат+ключ, используйте параметры ``peer.tls.clientCert.file`` и ``peer.tls.clientKey.file``. TLS может также быть настроен через следующие переменные окружения: * ``CORE_PEER_TLS_ENABLED`` = ``true`` * ``CORE_PEER_TLS_CERT_FILE`` = полный путь к серверному сертификату * ``CORE_PEER_TLS_KEY_FILE`` = полный путь к серверному приватному ключу * ``CORE_PEER_TLS_ROOTCERT_FILE`` = полный путь к файлу с цепочкой CA * ``CORE_PEER_TLS_CLIENTAUTHREQUIRED`` = ``true`` * ``CORE_PEER_TLS_CLIENTROOTCAS_FILES`` = полный путь к файлу с цепочкой CA клиентов * ``CORE_PEER_TLS_CLIENTCERT_FILE`` = полный путь к клиентскому сертификату * ``CORE_PEER_TLS_CLIENTKEY_FILE`` = полный путь к клиентскому приватному ключу Когда включен аутентификация клиентов, клиенту требуется послать свой сертификат во время TLS-рукопожатия, иначе рукопожатие провалится и пир закроет соединение. Когда пир присоединяется к каналу, корневые цепочки CA сертификатов участников канала считываются пиром из конфигурационного блока и добавляются в структуру данных, содержащую корневые CA-сертификаты TLS клиентов и серверов. Так peer-to-peer и peer-to-orderer коммуникация должна сработать беcшовно. Настройка TLS для ордерер-узлов ------------------------------- Чтобы включить TLS на ордеринг-узлах, установите следующие параметры конфигурации: * ``General.TLS.Enabled`` = ``true`` * ``General.TLS.PrivateKey`` = полный путь к файлу, содержащему серверный приватный ключ * ``General.TLS.Certificate`` = полный путь к файлу, содержащему серверный сертификат * ``General.TLS.RootCAs`` = полный путь к файлу, содержащему цепочку сертификатов CA, выдавшего серверные сертификаты По умолчанию, TLS-аутентификация клиентов выключена, как и в случае с пиром. Чтобы включить аутентификацию клиентов, установите следующие параметры конфига: * ``General.TLS.ClientAuthRequired`` = ``true`` * ``General.TLS.ClientRootCAs`` = полный путь к файлу, содержащему цепочку CA, выдавшего файлы клиентам TLS может также быть настроен через следующие переменные окружения: * ``ORDERER_GENERAL_TLS_ENABLED`` = ``true`` * ``ORDERER_GENERAL_TLS_PRIVATEKEY`` = полный путь к файлу, содержащему серверный приватный ключ * ``ORDERER_GENERAL_TLS_CERTIFICATE`` = полный путь к файлу, содержащему серверный сертификат * ``ORDERER_GENERAL_TLS_ROOTCAS`` = полный путь к файлу, содержащему цепочку сертификатов CA, выдавшего серверные сертификаты * ``ORDERER_GENERAL_TLS_CLIENTAUTHREQUIRED`` = ``true`` * ``ORDERER_GENERAL_TLS_CLIENTROOTCAS`` = полный путь к файлу, содержащему цепочку CA, выдавшего файлы клиентам Configuring TLS for the peer CLI -------------------------------- Следующие переменные окружения должны быть установлены при использовании CLI-команд для взаимодействия с пиром с включенным TLS: * ``CORE_PEER_TLS_ENABLED`` = ``true`` * ``CORE_PEER_TLS_ROOTCERT_FILE`` = полный путь к файлу, содержащему цепочку сертификатов CA, выдавшего серверные сертификаты Если на удаленном сервере также включена аутентификация клиентов, в дополнение к переменным выше необходимо установить следующие: * ``CORE_PEER_TLS_CLIENTAUTHREQUIRED`` = ``true`` * ``CORE_PEER_TLS_CLIENTCERT_FILE`` = полный путь к клиентскому сертификату * ``CORE_PEER_TLS_CLIENTKEY_FILE`` = полный путь к клиентскому приватному ключу При использовании команд, подсоединяющихся к ордерер-службе, например `peer channel ` или or `peer chaincode `, следующие аргументы командной строки должны быть указаны, если на ордерере включен TLS: * --tls * --cafile <полный путь к файлу, содержащему цепочку сертификатов CA, выдавшего серверные сертификаты> Если на ордерере также включена аутентификация клиентов, в дополнение к переменным выше необходимо установить следующие: * --clientauth * --keyfile <полный путь к файлу, содержащему клиентский приватный ключ> * --certfile <полный путь к файлу, содержащему клиентский сертификат> Отладка связанных с TLS проблем ------------------------------- Перед тем как начать отлаживать такие проблемы, советуется включить ``GRPC debug`` на обеих сторонах соединения для получения дополнительной информации. Для того, чтобы включить ``GRPC debug``, установите переменную окружения ``FABRIC_LOGGING_SPEC`` так, чтобы она включала ``grpc=debug``. Например, чтобы установить стандартный уровень логирования на ``INFO`` и уровень логирования gRPC на ``DEBUG``, установите такую спецификацию логирования: ``grpc=debug:info``. Если вы видите сообщение об ошибке ``remote error: tls: bad certificate`` на стороне клиента, обычно это означает, что TLS-сервер включил аутентификацию клиента и сервер либо вообще не получил сертификата клиента, либо получил невалидный сертификат, которому он не доверяет. Проверьте, что клиент отправляет свой сертификат и что этот сертификат был подписан CA, которому доверяет пир или ордерер. Если вы видите сообщение об ошибке ``remote error: tls: bad certificate`` в логах вашего чейнкода, проверьте, что чейнкод был собран с chaincode shim версии Fabric v1.1 или новее. .. Licensed under Creative Commons Attribution 4.0 International License https://creativecommons.org/licenses/by/4.0/