Установление безопасного соединения с 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
= полный путь к файлу с цепочкой CACORE_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 <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 или новее.