Генерация самоподписанного сертификата в соответствии с образцами HLF — Часть 1 — Создание каталога

Вы когда-нибудь чувствовали себя потерянными в криптоджунглях, пытаясь понять, как создать структуру каталогов сертификатов для вашего проекта Hyperledger Fabric? Не бойся, мой друг, потому что я здесь, чтобы провести тебя через пустыню!

Приведенный ниже пример кода используется для создания необходимой структуры каталогов, необходимой для процесса создания сертификата. Он создает базовую структуру сертификата организации, рекурсивную структуру узлов организации и рекурсивную структуру пользователей организации.

const fs = require('fs');

function CreateBaseOrganizationCertStructure(orgName, domain, nodeType) {
  const baseDirectories = [   
`crypto-config/${orgName}.${domain}`,    
`crypto-config/${orgName}.${domain}/msp`,    
`crypto-config/${orgName}.${domain}/msp/cacerts`,    
`crypto-config/${orgName}.${domain}/msp/tlscacerts`,    
`crypto-config/${orgName}.${domain}/users`,    
`crypto-config/${orgName}.${domain}/${nodeType}s`  
];

  for (let dir of baseDirectories) {
    try {
      fs.mkdirSync(dir, { recursive: true, mode: 0o755 });
    } catch (err) {
      return false;
    }
  }

  return true;
}
// [orgName: Org1] [nodeType: orderer, peer] [domain: example.com]

А кто не любит каталоги и файлы, верно? Я имею в виду, что в них не нравится? Они подобны строительным блокам современных технологий, строительным блокам нашей цифровой жизни.

const fs = require('fs');

function CreateRecursiveOrganizationNodeStructure(orgName, domain, nodeType, nodeCount) {
  const nodeDirectories = [
    `crypto-config/${orgName}.${domain}/${nodeType}s/`,
  ];

  for (let i = 0; i < nodeCount; i++) {
    let nodeName;
    if (nodeType === 'orderer') {
      nodeName = `${nodeType}${i}.${domain}`;
    } else {
      nodeName = `${nodeType}${i}.${orgName}.${domain}`;
    }
    nodeDirectories.push(`crypto-config/${orgName}.${domain}/${nodeType}s/${nodeName}`);
    nodeDirectories.push(`crypto-config/${orgName}.${domain}/${nodeType}s/${nodeName}/msp`);
    nodeDirectories.push(`crypto-config/${orgName}.${domain}/${nodeType}s/${nodeName}/msp/cacerts`);
    nodeDirectories.push(`crypto-config/${orgName}.${domain}/${nodeType}s/${nodeName}/msp/signcerts`);
    nodeDirectories.push(`crypto-config/${orgName}.${domain}/${nodeType}s/${nodeName}/msp/keystore`);
    nodeDirectories.push(`crypto-config/${orgName}.${domain}/${nodeType}s/${nodeName}/tls`);
  }

  for (let dir of nodeDirectories) {
    try {
      fs.mkdirSync(dir, { recursive: true, mode: 0o755 });
    } catch (err) {
      return false;
    }
  }

  return true;
}
// [nodeType: orderer, peer] [ domain: example.com] [nodeCount: 2]

const fs = require('fs');

function createRecursiveOrganizationUserStructure(orgName, domain, userCount) {
  const nodeDirectories = [
    `crypto-config/${orgName}.${domain}/users`,
    `crypto-config/${orgName}.${domain}/users/admin.${orgName}.${domain}/msp/`,
    `crypto-config/${orgName}.${domain}/users/admin.${orgName}.${domain}/msp/cacerts`,
    `crypto-config/${orgName}.${domain}/users/admin.${orgName}.${domain}/msp/signcerts`,
    `crypto-config/${orgName}.${domain}/users/admin.${orgName}.${domain}/msp/keystore`,
    `crypto-config/${orgName}.${domain}/users/admin.${orgName}.${domain}/tls/`,
  ];

  for (let i = 0; i < userCount; i++) {
    nodeDirectories.push(`crypto-config/${orgName}.${domain}/users/user${i}.${orgName}.${domain}`);
    nodeDirectories.push(`crypto-config/${orgName}.${domain}/users/user${i}.${orgName}.${domain}/msp/`);
    nodeDirectories.push(`crypto-config/${orgName}.${domain}/users/user${i}.${orgName}.${domain}/msp/cacerts`);
    nodeDirectories.push(`crypto-config/${orgName}.${domain}/users/user${i}.${orgName}.${domain}/msp/signcerts`);
    nodeDirectories.push(`crypto-config/${orgName}.${domain}/users/user${i}.${orgName}.${domain}/msp/keystore`);
    nodeDirectories.push(`crypto-config/${orgName}.${domain}/users/user${i}.${orgName}.${domain}/tls/`);
  }

  for (const dir of nodeDirectories) {
    try {
      fs.mkdirSync(dir, { recursive: true, mode: 0o755 });
    } catch (err) {
      return false;
    }
  }

  return true;
}
// [nodeType: orderer, peer]  [domain: example.com]  [userCount: number of users per organization */]

И давайте не будем забывать о пользователе-администраторе, самом важном госте из всех. Эта функция даже дает пользователю-администратору собственный каталог со специальным именем «admin». Это как расстелить красную ковровую дорожку для королевской семьи!


async function main() {
  const ca = await createCA('my-ca', 'mydomain.com');
  if (ca) {
    console.log('CA created successfully!');
  } else {
    console.error('Error creating CA');
    return;
  }

  const org = await createOrg('my-org', 'mydomain.com', 'my-ca', 'ca.mydomain.com');
  if (org) {
    console.log('Organization created successfully!');
  } else {
    console.error('Error creating organization');
    return;
  }

  const userStructureCreated = createRecursiveOrganizationUserStructure('my-org', 'mydomain.com', 5);
  if (userStructureCreated) {
    console.log('User structure created successfully!');
  } else {
    console.error('Error creating user structure');
    return;
  }
}

main();

Итак, у вас есть это, люди. Создание самозаверяющих сертификатов для вашего проекта Hyperledger Fabric похоже на строительство дома для вашей цифровой семьи с уникальными именами, личностями и гостевыми комнатами.

Suggested posts

Мои наиболее используемые ресурсы кодирования

Мои наиболее используемые ресурсы кодирования

На этой неделе я получил электронное письмо от участника ежедневного списка рассылки. Они хотели знать: какие ресурсы вы посещаете ежедневно, еженедельно и ежемесячно? Отличный вопрос! Я рад поделиться некоторыми мыслями о моем рабочем процессе и основных ресурсах, которые я использую.

Серия Lit library - 1: Глубокое погружение в библиотеку lit-html

Серия Lit library - 1: Глубокое погружение в библиотеку lit-html

Цель этой серии блогов — углубиться в библиотеку Lit и получить всестороннее представление о ее уникальных функциях и о том, чем она отличается от других библиотек и фреймворков на рынке. Серия разделена на три части, охватывающие такие темы, как 1.

Related posts

Почему некоторые фрилансеры притворяются своей жизнью

Почему некоторые фрилансеры притворяются своей жизнью

Недавно я был в Linkedin, крупнейшей в мире профессиональной социальной сети, и нашел посты дизайнеров-фрилансеров, за которыми я следил и которые привлекли мое внимание. Все они публиковали фотографии из самолетов, на пляже со своими ноутбуками, из бассейнов и офисов с потрясающими видами.

Революция на рабочем месте: ведущие эксперты обсуждают гибридную и удаленную работу

Революция на рабочем месте: ведущие эксперты обсуждают гибридную и удаленную работу

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

Опасные разговоры

Опасные разговоры

Если мы хотим продолжать процветать на этой планете, нам придется вести опасные разговоры. Те, которые бросают вызов тому, что мы сделали, что мы делаем и что мы в настоящее время собираемся продолжать делать (или планируем делать).

Архив этой угрозы: Том 7 Черный Баста

Архив этой угрозы: Том 7 Черный Баста

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