Как получить сертификаты из реального сертификата Fabric-CA-Server в hfc-key-store в hyperledger? - PullRequest
0 голосов
/ 22 октября 2018

Я хотел бы сначала объяснить, что я правильно понимаю, и если я прав, пожалуйста, скажите мне правду, и если я ошибаюсь, скажите мне также, что я ошибаюсь.Мое объяснение о том, как сеть hyperledger и узел sdk работают вместе, и как узел sdk подключается к сети hyperledger.

Давайте начнем.Когда я запускаю сеть Hyperledger, она создает образ док-станции Fabric-CA-Server и контейнер на порту 7054. На этом порту он зарегистрировал пользователя «admin с паролем:« adminpwd ». Это означает, что также были сделаны сертификатыдля этого пользователя. Теперь давайте предположим, что я хочу создать нового пользователя из узла SDK. Я думаю, что мне нужно сделать, это иметь сертификат для администратора, чтобы я мог подписать свой запрос, и сеть знает, что я являюсь администратором и частьюСеть. То, что делает код, это сначала пишет getUserContext ("admin"), и если он не находит, то он пытается зарегистрироваться с именем пользователя и паролем (admin и adminpwd). Я понимаю, что getUserContext переходит к hfc-key-store и пытается найти сертификат для администратора. Если он не находит его, происходит регистрация, а затем происходит функция createUser, которая помещает сертификат, полученный из образа док-станции fabric-ca-server, в hfc-key-store, так чтокогда администратор пытается зарегистрироваться снова, он не должен идти к док-станции Fabric-CA-Serverобраз.Я прав до сих пор?Сейчас я задам свои вопросы.

Вопросы:

  1. Я понимаю, что при попытке зарегистрироваться не получит исходный сертификатдля администратора из образа док-станции Fabric-CA-Server, потому что, если он будет украден, вся сеть облажается.так что он делает что-то вроде публичного / частного и сертификата из оригинального, что я могу сделать другие операции.Вопрос: что если кто-то украл мою папку hfc-key-store, в которой есть сертификаты администратора.он может выполнять операции без регистрации, потому что getUserContext ("admin") вернет true и позволит ему делать что угодно.Что если кто-то украдет эту папку?Разве это не опасно?

  2. Я не понимаю, что вообще означают функции getUserContext () и setUserContext () и что создают createUser ().ПОЖАЛУЙСТА, если можете, просто опишите их на очень понятном языке, потому что я давно пытался обдумать это, но безуспешно.Зачем нам нужны эти функции, с чем они нам помогают и т. Д.

  3. Почему инструмент криптогенеза не используется на производстве, а фабричный сервер может использоваться на производстве?

Ответы [ 3 ]

0 голосов
/ 23 октября 2018

Мне нравятся все ваши вопросы, и я столкнулся с точно таким же вопросом, когда недавно работал над Node SDK для HLF.

Я постараюсь ответить, насколько мне известно.

  1. В мире Blockchain защита личных ключей является первоочередной задачей.Если вы потеряете закрытый ключ для кого-то, это означает, что вы потеряли право на какую-либо сущность, которую разблокирует ваш закрытый ключ.В Hyperledger Fabric вы должны обеспечить безопасность ключей, будь то ключи администратора или ключи пользователя.Если его украли каким-либо образом, значит, вы взломаны.Помните: « с великой силой несет большую ответственность ».Кроме того, « getUserContext (« admin ») » не всегда возвращает пользовательский контекст «admin».Я объясню в следующем ответе.
  2. Документация API объясняет все технические аспекты здесь: getUserContext setUserContext createUser

    Все эти методы доступны в классе «клиент» в NodeSDK.Эти методы позволяют управлять пользователями.Когда вы говорите, что пользователь в мире Hyperledger Fabric, по умолчанию он содержит ссылку на открытый и закрытый ключи.Он также имеет все другие области, такие как принадлежность, личность, роль и т. Д.Подробнее: Пользователь

    createUser создает экземпляр класса Пользователь со всеми / любыми из указанных выше свойств.Этот экземпляр будет использоваться для выполнения всех соответствующих операций.Если у пользователя есть доступ admin , он может выполнять функцию уровня admin в мире Hyperledger Fabric и т. Д. Для других ролей.

    getUserContext и setUserContext получает / устанавливает контекст клиента экземпляра.Установив соответствующий пользовательский контекст, вы аутентифицируете client , и в дальнейшем экземпляр клиента может использовать этот контекст для подписи запросов.

    В дополнение к этому оба метода читают / записывают данные в какое-либо постоянное хранилище, если оно настроено.В случае Node SDK это hfc-key-store .Если вы изучите содержимое этой папки, вы найдете все ваши идентификационные данные пользователей, хранящиеся здесь.Если необходимые файлы не найдены в этой папке (или какая папка настроена для crypto-suite), getUserContext завершится неудачно, а затем вам придется вручную прочитать сертификаты из файловой системы и создать пользователя из этих сертификатов.а затем использовать его для setUserContext .

  3. cryptogen инструмент является статическим по своей природе.В то время как сервер Fabric CA поддерживает связь через API REST с использованием Fabric CA Client или Fabric SDK.Это делает его очень полезным в производственной среде, где вам нужно генерировать новые удостоверения (читать сертификаты) на ходу.Использование инструмента cryptogen может стать здесь громоздким.

0 голосов
/ 23 октября 2018

Кажется, там много вопросов.Позвольте мне объяснить это шаг за шагом.Пожалуйста, оставляйте свои комментарии, если что-то не так или неясно.

Fabric спроектирован как Consortium Blockchain System и широко используется в бизнес-сценариях предприятия.В бизнес-сети Fabric каждая организация обычно содержит, по крайней мере, одного партнера и, необязательно, примерно один.

Представьте себе такой бизнес-сценарий.Несколько компаний хотят вести бизнес вместе.Однако они недостаточно доверяют друг другу.Поэтому они решили использовать ткань, чтобы решить свою болевую точку.Предположим, что эта сеть содержит 3 компании (организации), и каждая компания (организация) имеет одного партнера и одну компанию.

Теперь бизнес-сеть уже настроена.

Во-первых, позвольте мне объяснить концепциюзарегистрируйтесь.

  1. У каждой организации есть пользователь начальной загрузки, это происходит по имени пользователя и паролю, обычно в примерах используется admin / adminpw.Во время установки сервера ca этот пользователь начальной загрузки записывал в базу данных CA.После установки пользователь начальной загрузки регистрируется.но не зачислен.
  2. Следующая вещь - enroll the bootstrap user.На этом шаге fabric-sdk (позже я буду использовать sdk) сначала сгенерирует пары закрытых / открытых ключей, затем сгенерирует csr ( запрос на подпись сертификата ), наконец, использует закрытый ключ для подписиcsr и отправьте подписанный csr на сервер Fabric-CA.
  3. Когда сервер Fabric-CA получил подписанный CSR.Он генерирует сертификат для этого пользователя.Сертификат содержит открытый ключ пользователя.Fabric-ca будет использовать свой закрытый ключ для подписания этого запроса и добавления своей подписи к сертификату.
  4. Ответ sdk get (сертификат от 3) с сервера Fabric-CA.Fabric-SDK соединяет сертификат и закрытый ключ пользователя (мы называем это регистрацией) как ответ метода enroll().
  5. Теперь пользователь начальной загрузки имеет свою регистрацию и может посещать сеть Fabric с помощью этой регистрации.

Мы можем использовать пользователя начальной загрузки для регистрации и регистрации новых пользователей в этой организации.Вот почему мы называем консорциумную систему блокчейнов как разрешенную систему блокчейнов.

Во-вторых, позвольте мне объяснить концепции sdk KVS (key-value-store).

Мы уже получили privateKey пользователяи справка из вышеперечисленных шагов.Так как же нам сохранить эти данные?Есть несколько вариантов: сохранить его в базе данных прикладного уровня, аппаратном зашифрованном кошельке, облачном HSM и т. Д.

Fabric-sdk предоставляет KVS для этого.Это необязательный выбор, вы можете использовать его или нет.Честно говоря, я не рекомендую использовать это в производственной системе.Если вы просто хотите что-то попробовать или протестировать, это хорошо, потому что это довольно просто.

По умолчанию fabirc-sdk-node будет использовать файловую систему KVS.Он хранит учетные данные на диске, это то, что вы упомянули в папке hfc-key-store.

Так что же произойдет, если KVS был украден?

Все записи украдены.Все сертификаты и частные ключи украдены.Злоумышленник может использовать эти сертификаты и privateKeys для посещения системы блокчейнов с идентификатором в этих сертификатах.Это катастрофа.

Для чего используется createUser ()?

Вместо сохранения этих регистраций в файловой системе.Лучший выбор для хранения в базе данных уровня приложений.Каждый раз, когда мы хотим посетить систему блокчейнов, мы можем сначала выполнить запрос из базы данных и получить сертификат и privateKey.Затем используйте интерфейс createUser() для создания нового пользовательского экземпляра.Этот экземпляр пользователя используется в качестве удостоверения для посещения системы блокчейна.

Наконец, позвольте мне объяснить поток транзакций в фабрике

У нас нет действительного сертификата пользователя и privateKey.Как отправить транзакцию в сеть Fabric?Как фабричный узел проверяет транзакцию и узнает, кто я?

  1. Каждая транзакция содержит личность пользователя.Если вы хотите отправить транзакцию по номеру userA, вам следует позвонить по номеру setUserContext(userA) перед дальнейшим подтверждением вызова.
  2. Предложение по транзакции содержит сертификат пользователя в заголовке сообщения.И до того, как транзакция будет отправлена ​​на устройство-узел, sdk будет использовать закрытый ключ текущего пользователя для подписания этого предложения по транзакции.
  3. На стороне партнера.когда одноранговый узел получает запрос об одобрении, одноранговый узел будет использовать корневой сертификат Fabric-CA для проверки сертификата в этом запросе, так что одноранговый узел будет знать, что этот запрос исходит от удостоверения, выданного известным центром сертификации, теперь сертификат заслуживает доверия.Затем узел проанализирует сертификат и получит открытый ключ удостоверения, а затем использует этот открытый ключ для проверки подписи транзакции (я описал выше, что tx был подписан закрытым ключом, а теперь он проверен открытым ключом),теперь транзакция является надежной.

Из потока транзакций мы узнали, что транзакция должна быть отправлена ​​с сертификатом пользователя и подписана его закрытым ключом.Вот почему мы разработали интерфейс setUserContext() в fabirc-sdk.

инструмент шифрования

Этот инструмент используется для генерации пар секретного / открытого ключа и соответствующих сертификатов при настройке системы.После этого нам нужен механизм динамического добавления / удаления идентификаторов.И решение может быть Fabric-CA.

Обратите внимание, Fabric-CA не является обязательным, вы можете использовать любой другой CA.

0 голосов
/ 23 октября 2018

Ваш вопрос состоит из нескольких частей;Я попытаюсь начать с самого начала.

  1. Fabric CA не требуется для запуска / работы одноранговых или заказывающих узлов Fabric.Механизм безопасности по умолчанию основан на стандартной PKI X509 с использованием эллиптических кривых (по умолчанию используется p256).Вы можете использовать сертификаты X509, выданные любыми способами.Фабрика ЦС предоставляется в качестве одной из таких реализаций.

  2. Фабрика ЦС имеет несколько API, но два основных из них - это Регистрация и Регистрация.Регистрация - это процесс выдачи сертификатов X509.Прежде чем вы сможете зарегистрировать их, вы должны сначала зарегистрировать пользователей / узлы.Когда Fabric CA запускается в первый раз, вы должны создать пользователя-администратора начальной загрузки.Этот пользователь автоматически регистрируется при запуске, но еще не зарегистрирован.Вы регистрируетесь в Fabric CA, генерируя закрытый ключ и запрос на подпись сертификата, и отправляете его, используя ID регистрации и Secret.Если это успешно, вы получите сертификат X509, подписанный Fabric CA.

  3. Для удобства SDK Fabric Node предоставляет пакет fabric-ca-client, который предоставляет API-оболочки для регистрациии регистрация пользователей с Fabric CA.Это позволяет вам получать и использовать учетные данные из Fabric CA

  4. Однако пакет Fabric-client не требует получения учетных данных из Fabric CA.Возможно, у вас есть собственный закрытый ключ и сертификат X509, выданный другим органом (или даже сгенерированный криптогеном).

  5. Fabric-client предоставляет «подключаемое» хранилище ключей для храненияполномочия.По умолчанию это хранилище ключей на основе файлов.

  6. Внутренне, клиент-фабрика фактически использует класс User для представления текущего пользователя.Это важно, так как есть несколько способов заполнить эту структуру:

    • createUser() - эта функция позволяет вам создать пользователя из ранее существующего частного / публичного (X509) пара ключей
    • User.setEnrollment() - это позволяет вам напрямую добавлять туда необходимую информацию в структуру ... это обычно используется с ответом от CertificateAuthority.enroll()
  7. Как только у вас есть объект User, вы должны указать Fabric-клиенту использовать его.Здесь вы используете Client.setUserContext().Вы передаете объект User, и по умолчанию это будет сохранено.
  8. Затем вы можете использовать Client.getUserContext() - который загружает пользовательскую информацию из настроенного хранилища ключей - для будущих запросов, когдавы запускаете свое клиентское приложение.

Что касается вашего вопроса о cryptogen, то нет никаких причин, по которым вы не можете использовать сгенерированные крипто-материалы в производстве ... просто, это инструмент, которыйбыл действительно разработан, чтобы помочь в разработке и тестировании для начальной загрузки сети.Это не инфраструктура PKI и не включает такие вещи, как отзыв сертификата.

Надеюсь, это поможет.

...