Установление безопасного соединения с TLS¶
Fabric поддерживает защищенную связь между узлами через TLS. TLS-соединение может использовать как одностороннюю (только сервер), так и двустороннюю (сервер и клиент) аутентификацию.
Настройка TLS для пир-узлов¶
Пир-узел является и TLS-сервером, и TLS-клиентов. Первым он является, когда другой узел, приложение или CLI устанавливает с ним соединение, а последним - когда он сам устанавливает это соединение с другим пиром или ордерером.
Чтобы включить TLS на пир-узле, необходимо установить следующие параметры конфигурации:
peer.tls.enabled=truepeer.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=trueCORE_PEER_TLS_CERT_FILE= полный путь к серверному сертификатуCORE_PEER_TLS_KEY_FILE= полный путь к серверному приватному ключуCORE_PEER_TLS_ROOTCERT_FILE= полный путь к файлу с цепочкой CACORE_PEER_TLS_CLIENTAUTHREQUIRED=trueCORE_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=trueGeneral.TLS.PrivateKey= полный путь к файлу, содержащему серверный приватный ключGeneral.TLS.Certificate= полный путь к файлу, содержащему серверный сертификатGeneral.TLS.RootCAs= полный путь к файлу, содержащему цепочку сертификатов CA, выдавшего серверные сертификаты
По умолчанию, TLS-аутентификация клиентов выключена, как и в случае с пиром. Чтобы включить аутентификацию клиентов, установите следующие параметры конфига:
General.TLS.ClientAuthRequired=trueGeneral.TLS.ClientRootCAs= полный путь к файлу, содержащему цепочку CA, выдавшего файлы клиентам
TLS может также быть настроен через следующие переменные окружения:
ORDERER_GENERAL_TLS_ENABLED=trueORDERER_GENERAL_TLS_PRIVATEKEY= полный путь к файлу, содержащему серверный приватный ключORDERER_GENERAL_TLS_CERTIFICATE= полный путь к файлу, содержащему серверный сертификатORDERER_GENERAL_TLS_ROOTCAS= полный путь к файлу, содержащему цепочку сертификатов CA, выдавшего серверные сертификатыORDERER_GENERAL_TLS_CLIENTAUTHREQUIRED=trueORDERER_GENERAL_TLS_CLIENTROOTCAS= полный путь к файлу, содержащему цепочку CA, выдавшего файлы клиентам
Configuring TLS for the peer CLI¶
Следующие переменные окружения должны быть установлены при использовании CLI-команд для взаимодействия с пиром с включенным TLS:
CORE_PEER_TLS_ENABLED=trueCORE_PEER_TLS_ROOTCERT_FILE= полный путь к файлу, содержащему цепочку сертификатов CA, выдавшего серверные сертификаты
Если на удаленном сервере также включена аутентификация клиентов, в дополнение к переменным выше необходимо установить следующие:
CORE_PEER_TLS_CLIENTAUTHREQUIRED=trueCORE_PEER_TLS_CLIENTCERT_FILE= полный путь к клиентскому сертификатуCORE_PEER_TLS_CLIENTKEY_FILE= полный путь к клиентскому приватному ключу
При использовании команд, подсоединяющихся к ордерер-службе, например peer channel <create|update|fetch> или or peer chaincode <invoke>, следующие аргументы командной строки должны быть указаны, если на ордерере включен TLS:
- –tls
Если на ордерере также включена аутентификация клиентов, в дополнение к переменным выше необходимо установить следующие:
- –clientauth
Отладка связанных с 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 или новее.