Adicionar Organizações com Certificados de Terceiros à Rede
Este tópico contém informações sobre a associação de organizações que usam certificados de terceiros a uma rede do Oracle Blockchain Platform.
Workflow Típico para Participar de uma Organização com Certificados de Terceiros em uma Rede do Oracle Blockchain Platform
A organização com certificados emitidos por uma autoridade de certificação (CA) de terceiros pode ingressar na rede do Oracle Blockchain Platform como participantes.
Organizações somente para clientes
Esses participantes são organizações somente para clientes e não têm colegas ou solicitantes. Eles não podem criar canais, unir pares ou instalar chaincode.
- Implante, chame e consulte o chaincode se ele for um administrador da organização cliente.
- Chame e consulte o chaincode se eles não forem administradores de uma organização cliente.
- O proprietário do chaincode que instala o chaincode nos pares pode decidir quem pode implantar o chaincode usando o comando da política de instanciação
peer chaincode package -i
do Hyperledger Fabric para definir a política de instanciação do chaincode. - O instanciador de chaincode pode usar o comando de política de endosso
peer chaincode instantiate -P
do Hyperledger Fabric para definir a política de endosso que controla quem pode chamar o chaincode. - O proprietário do canal pode decidir quem pode chamar ou consultar um chaincode definindo a proposta do canal e a lista de controle de acesso de consulta. Consulte Listas de Controle de Acesso do Hyperledger Fabric.
Fluxo de Trabalho
Estas são as tarefas que uma organização com certificados de terceiros e o fundador do Oracle Blockchain Platform precisam executar para ingressar na organização em uma rede do Oracle Blockchain Platform.
Tarefa | Quem faz isso? | Descrição | Mais informações |
---|---|---|---|
Obtenha os certificados de terceiros | Organização de certificados de terceiros (participante) | Vá para o servidor CA de terceiros e gere os arquivos de certificados necessários. Formate os arquivos conforme necessário para importação na rede. | Requisitos de Certificado de Terceiros |
Criar o arquivo de certificados para importação | Organização de certificados de terceiros (participante) | Localize as informações de certificado Admin e CA do participante e use-as para compor um arquivo de certificados JSON. | Criar o Arquivo de Certificados de Terceiros de uma Organização |
Fazer upload de um arquivo de certificado para a organização de terceiros (participante) | Organização fundadora | Use a console para carregar e importar o arquivo de certificado do participante para adicionar o participante à rede. | Importar Certificados para Adicionar Organizações à Rede |
Exporte as configurações do serviço de pedido do fundador da rede e forneça-as à organização de terceiros (participante) | Organização fundadora | Envie as configurações de serviços de pedido do fundador para um arquivo JSON e envie o arquivo para o participante.
Abra o arquivo de configurações do serviço de pedido e encontre o endereço e a porta do serviço de pedido e entregue-os ao participante. Por exemplo:
|
Junte-se aos OSNs Participantes ou Escalonados ao Serviço de Pedidos do Fundador |
Criar o canal | Fundador | Crie um novo canal e adicione o participante a ele. | Criar um Canal |
Instalar e implantar o chaincode | Fundador | Na instância do fundador, faça upload, instale e implante o chaincode. Escolha os pares de rede nos quais instalar o chaincode. |
|
Configurar o ambiente da organização de terceiros (participante) | Organização de certificados de terceiros (participante) | Para consultar ou chamar chaincodes, o participante deve:
|
Preparar o Ambiente de Terceiros para Usar a Rede do Oracle Blockchain Platform |
Requisitos de Certificado de Terceiros
Para ingressar com êxito na rede, uma organização deve gerar os certificados de terceiros necessários. As informações nesses certificados são usadas para criar o arquivo de certificados da organização, que é importado para a instância do fundador.
Quais Certificados as Organizações Precisam Fornecer?
Você deve gerar os seguintes certificados do seu servidor de CA:
- Certificado Público do Cliente
- Certificado Raiz da CA
Quais São os Requisitos para Esses Certificados?
Os certificados devem atender aos seguintes requisitos:
- Ao gerar a chave privada, você deve usar o Algoritmo de Assinatura Digital da Curva Elíptica (ECDSA). Esse algoritmo é o único algoritmo aceito para chaves MSP do Fabric.
- O Identificador de Chave de Assunto (SKI) é obrigatório e você deve indicá-lo como extensões x509 no arquivo de extensão.
- Você deve converter os arquivos de chave do .key para o formato .pem.
- Você deve converter os certificados do .crt para o formato .pem.
Criando os Certificados
Para criar seus certificados usando OpenSSL:
- Criar um certificado/chave de CA autoassinado:
Nosso arquivoopenssl ecparam -name prime256v1 -genkey -out ca.key openssl pkcs8 -topk8 -inform PEM -in ca.key -outform pem -nocrypt -out ca-key.pem openssl req -new -key ca-key.pem -out ca.csr openssl x509 -req -days 365 -in ca.csr -signkey ca-key.pem -out ca.crt -extensions x509_ext -extfile opensslca.conf openssl x509 -in ca.crt -out ca.pem -outform PEM
opensslca.conf
de exemplo:[ req ] default_bits = 2048 distinguished_name = subject req_extensions = req_ext x509_extensions = x509_ext string_mask = utf8only [ subject ] countryName = CN #countryName_default = US stateOrProvinceName = Beijing #stateOrProvinceName_default = NY localityName = Beijing #localityName_default = New York organizationName = thirdpartyca, LLC #organizationName_default = Example, LLC # Use a friendly name here because its presented to the user. The server's DNS # names are placed in Subject Alternate Names. Plus, DNS names here is deprecated # by both IETF and CA/Browser Forums. If you place a DNS name here, then you # must include the DNS name in the SAN too (otherwise, Chrome and others that # strictly follow the CA/Browser Baseline Requirements will fail). commonName = thirdpartyca #commonName_default = Example Company emailAddress = ca@thirdpartyca.com # Section x509_ext is used when generating a self-signed certificate. I.e., openssl req -x509 ... [ x509_ext ] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer # You only need digitalSignature below. *If* you don't allow # RSA Key transport (i.e., you use ephemeral cipher suites), then # omit keyEncipherment because that's key transport. basicConstraints = CA:TRUE keyUsage = Certificate Sign, CRL Sign, digitalSignature, keyEncipherment subjectAltName = @alternate_names nsComment = "OpenSSL Generated Certificate" # RFC 5280, Section 4.2.1.12 makes EKU optional # CA/Browser Baseline Requirements, Appendix (B)(3)(G) makes me confused # In either case, you probably only need serverAuth. # extendedKeyUsage = serverAuth, clientAuth # Section req_ext is used when generating a certificate signing request. I.e., openssl req ... [ req_ext ] subjectKeyIdentifier = hash basicConstraints = CA:FALSE keyUsage = digitalSignature, keyEncipherment subjectAltName = @alternate_names nsComment = "OpenSSL Generated Certificate" # RFC 5280, Section 4.2.1.12 makes EKU optional # CA/Browser Baseline Requirements, Appendix (B)(3)(G) makes me confused # In either case, you probably only need serverAuth. # extendedKeyUsage = serverAuth, clientAuth [ alternate_names ] DNS.1 = localhost DNS.2 = thirdpartyca.com #DNS.3 = mail.example.com #DNS.4 = ftp.example.com # Add these if you need them. But usually you don't want them or # need them in production. You may need them for development. # DNS.5 = localhost # DNS.6 = localhost.localdomain # DNS.7 = 127.0.0.1
- Crie um certificado/chave de usuário usando a chave CA acima:
Nosso arquivoopenssl ecparam -name prime256v1 -genkey -out user.key openssl pkcs8 -topk8 -inform PEM -in user.key -outform pem -nocrypt -out user-key.pem openssl req -new -key user-key.pem -out user.csr openssl x509 -req -days 365 -sha256 -CA ca.pem -CAkey ca-key.pem -CAserial ca.srl -CAcreateserial -in user.csr -out user.crt -extensions x509_ext -extfile openssl.conf openssl x509 -in user.crt -out user.pem -outform PEM
openssl.conf
de exemplo:[ req ] default_bits = 2048 default_keyfile = tls-key.pem distinguished_name = subject req_extensions = req_ext x509_extensions = x509_ext string_mask = utf8only # The Subject DN can be formed using X501 or RFC 4514 (see RFC 4519 for a description). # Its sort of a mashup. For example, RFC 4514 does not provide emailAddress. [ subject ] countryName = CN #countryName_default = US stateOrProvinceName = Beijing #stateOrProvinceName_default = NY localityName = Beijing #localityName_default = New York organizationName = thirdpartyca, LLC #organizationName_default = Example, LLC # Use a friendly name here because its presented to the user. The server's DNS # names are placed in Subject Alternate Names. Plus, DNS names here is deprecated # by both IETF and CA/Browser Forums. If you place a DNS name here, then you # must include the DNS name in the SAN too (otherwise, Chrome and others that # strictly follow the CA/Browser Baseline Requirements will fail). commonName = admin@thirdpartyca.com #commonName_default = Example Company emailAddress = admin@thirdpartyca.com #emailAddress_default = test@example.com # Section x509_ext is used when generating a self-signed certificate. I.e., openssl req -x509 ... [ x509_ext ] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer # You only need digitalSignature below. *If* you don't allow # RSA Key transport (i.e., you use ephemeral cipher suites), then # omit keyEncipherment because that's key transport. basicConstraints = CA:FALSE keyUsage = digitalSignature, keyEncipherment subjectAltName = @alternate_names nsComment = "OpenSSL Generated Certificate" # RFC 5280, Section 4.2.1.12 makes EKU optional # CA/Browser Baseline Requirements, Appendix (B)(3)(G) makes me confused # In either case, you probably only need serverAuth. #extendedKeyUsage = Any Extended Key Usage #extendedKeyUsage = serverAuth, clientAuth # Section req_ext is used when generating a certificate signing request. I.e., openssl req ... [ x509_ca_ext ] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer # You only need digitalSignature below. *If* you don't allow # RSA Key transport (i.e., you use ephemeral cipher suites), then # omit keyEncipherment because that's key transport. basicConstraints = CA:TRUE keyUsage = Certificate Sign, CRL Sign, digitalSignature, keyEncipherment subjectAltName = @alternate_names nsComment = "OpenSSL Generated Certificate" # RFC 5280, Section 4.2.1.12 makes EKU optional # CA/Browser Baseline Requirements, Appendix (B)(3)(G) makes me confused # In either case, you probably only need serverAuth. #extendedKeyUsage = Any Extended Key Usage extendedKeyUsage = serverAuth, clientAuth # Section req_ext is used when generating a certificate signing request. I.e., openssl req ... [ req_ext ] subjectKeyIdentifier = hash basicConstraints = CA:FALSE keyUsage = digitalSignature, keyEncipherment subjectAltName = @alternate_names nsComment = "OpenSSL Generated Certificate" # RFC 5280, Section 4.2.1.12 makes EKU optional # CA/Browser Baseline Requirements, Appendix (B)(3)(G) makes me confused # In either case, you probably only need serverAuth. #extendedKeyUsage = Any Extended Key Usage #extendedKeyUsage = serverAuth, clientAuth [ alternate_names ] DNS.1 = localhost DNS.3 = 127.0.0.1 DNS.4 = 0.0.0.0 # Add these if you need them. But usually you don't want them or # need them in production. You may need them for development. # DNS.5 = localhost # DNS.6 = localhost.localdomain # DNS.7 = 127.0.0.1 # IPv6 localhost # DNS.8 = ::1
- Os seguintes comandos criptógenos são usados para criar o material da chave do Hyperledger Fabric:
Nosso arquivocryptogen generate --config=./crypto-config.yaml
crypto-config.yaml
de exemplo:# Copyright IBM Corp. All Rights Reserved. # # SPDX-License-Identifier: Apache-2.0 # # --------------------------------------------------------------------------- # "PeerOrgs" - Definition of organizations managing peer nodes # --------------------------------------------------------------------------- PeerOrgs: # --------------------------------------------------------------------------- # Org1 # --------------------------------------------------------------------------- - Name: Org1 Domain: org1.example.com EnableNodeOUs: true # --------------------------------------------------------------------------- # "Specs" # --------------------------------------------------------------------------- # Uncomment this section to enable the explicit definition of hosts in your # configuration. Most users will want to use Template, below # # Specs is an array of Spec entries. Each Spec entry consists of two fields: # - Hostname: (Required) The desired hostname, sans the domain. # - CommonName: (Optional) Specifies the template or explicit override for # the CN. By default, this is the template: # # "{{.Hostname}}.{{.Domain}}" # # which obtains its values from the Spec.Hostname and # Org.Domain, respectively. # --------------------------------------------------------------------------- # Specs: # - Hostname: foo # implicitly "foo.org1.example.com" # CommonName: foo27.org5.example.com # overrides Hostname-based FQDN set above # - Hostname: bar # - Hostname: baz # --------------------------------------------------------------------------- # "Template" # --------------------------------------------------------------------------- # Allows for the definition of 1 or more hosts that are created sequentially # from a template. By default, this looks like "peer%d" from 0 to Count-1. # You may override the number of nodes (Count), the starting index (Start) # or the template used to construct the name (Hostname). # # Note: Template and Specs are not mutually exclusive. You may define both # sections and the aggregate nodes will be created for you. Take care with # name collisions # --------------------------------------------------------------------------- Template: Count: 2 # Start: 5 # Hostname: {{.Prefix}}{{.Index}} # default # --------------------------------------------------------------------------- # "Users" # --------------------------------------------------------------------------- # Count: The number of user accounts _in addition_ to Admin # --------------------------------------------------------------------------- Users: Count: 1 # --------------------------------------------------------------------------- # Org2: See "Org1" for full specification # --------------------------------------------------------------------------- - Name: Org2 Domain: org2.example.com EnableNodeOUs: true Template: Count: 2 Users: Count: 1
O Que Vem a Seguir?
Depois de confirmar que você gerou e atualizou os arquivos apropriados, você poderá criar o arquivo de certificados para importação na rede do Oracle Blockchain Platform. Consulte Criar o Arquivo de Certificados de Terceiros de uma Organização.
Criar o Arquivo de Certificados de Terceiros de uma Organização
Para ingressar em uma rede do Oracle Blockchain Platform, a organização deve gravar um arquivo de certificados contendo suas informações de admincert e cacert. O fundador da rede importa esse arquivo para adicionar a organização à rede.
Vá para os arquivos de certificados que você gerou do servidor de CA para encontrar as informações necessárias para criar o arquivo de certificados. Consulte Requisitos de Certificado de Terceiros.
O arquivo de certificados deve estar escrito em JSON e conter os seguintes campos:
- mspid - Especifica o nome da organização.
- tipo - Indica que a organização é um participante da rede. Esse valor deve ser Participante.
- admincert - Contém o conteúdo do arquivo de certificados administrativos da organização. Ao copiar as informações de certificados para o arquivo JSON, você deve substituir cada nova linha por \n.
- cacert - Contém o conteúdo do arquivo de certificados CA da organização. Ao copiar as informações de certificados para o arquivo JSON, você deve substituir cada nova linha por \n.
{
"mspID": "examplemspID",
"type": "Participant",
"certs": {
"admincert": "-----BEGIN CERTIFICATE-----\nexample_certificate\nexample_certificate==\n-----END CERTIFICATE-----\n",
"cacert": "-----BEGIN CERTIFICATE-----\nexample_certificate\nexample_certificate==\n-----END CERTIFICATE-----\n"
}
}
Preparar o Ambiente de Terceiros para Usar a Rede do Oracle Blockchain Platform
Você deve configurar o ambiente da organização de terceiros para que ela possa usar a rede do Oracle Blockchain Platform.
Confirme se as tarefas de pré-requisito a seguir foram concluídas. Para obter informações, consulte Workflow Típico para Participar de uma Organização com Certificados de Terceiros em uma Rede do Oracle Blockchain Platform.
- O arquivo de certificado da organização de terceiros foi criado e enviado ao fundador da rede do Oracle Blockchain Platform.
- O fundador da rede fez upload do arquivo de certificados para adicionar a organização de terceiros à rede.
- O fundador da rede exportou as configurações do serviço do solicitante e deu o endereço e a porta do serviço para a organização de terceiros e a organização as adicionou ao ambiente.
- O fundador da rede criou um novo canal e adicionou a organização de terceiros a ele.
- O fundador da rede instalou e instanciou o chaincode.
Configurar o Ambiente da organização
Para que a organização de terceiros possa usar com sucesso a rede do Oracle Blockchain Platform, ela deve configurar seu ambiente para usar a CLI ou SDKs do Hyperledger Fabric. Consulte a documentação do Hyperledger Fabric.
Instalar o Chaincode
A organização de terceiros deve instalar o chaincode nos pares. Esses pares devem ser unidos ao canal para que o chaincode possa ser chamado.
Implantar o Chaincode
Se necessário, as organizações de terceiros podem implantar o chaincode no canal. Por exemplo:
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_TLS_ROOTCERT_FILE=$PWD/tls-ca.pem
export CORE_PEER_MSPCONFIGPATH=$PWD/crypto-config/peerOrganizations/customerorg1.com/users/Admin@customerorg1.com/msp
export CORE_PEER_LOCALMSPID="customerorg1"
### gets channel name from input###
CHANNEL_NAME=$1
echo "######### going to instantiate chaincode on channel ${CHANNEL_NAME} ##########"
CORE_PEER_ADDRESS=${peer_host}:${port} peer chaincode instantiate
-o ${peer_host}:${port} --tls $CORE_PEER_TLS_ENABLED --cafile
./tls-ca.pem -C ${CHANNEL_NAME} -n obcs-example02 -v v0 -c '{"Args":["init","a","100","b","200"]}'
Chamar o Chaincode
Organizações de terceiros usam a CLI ou SDKs do Hyperledger Fabric para chamar o chaincode. Por exemplo:
export CORE_PEER_TLS_ENABLED=true
export CORE_PEER_TLS_ROOTCERT_FILE=$PWD/tls-ca.pem
export CORE_PEER_MSPCONFIGPATH=$PWD/crypto-config/peerOrganizations/customerorg1.com/users/User1@customerorg1.com/msp
export CORE_PEER_LOCALMSPID="customerorg1"
### gets channel name from input ###
CHANNEL_NAME=$1
#### do query or invoke on chaincode ####
CORE_PEER_ADDRESS=${peer_host}:${port} peer chaincode query -C
${CHANNEL_NAME} -n $2 -c '{"Args":["query","a"]}'
CORE_PEER_ADDRESS=${peer_host}:${port} peer chaincode invoke -o
${peer_host}:${port} --tls $CORE_PEER_TLS_ENABLED --cafile ./tls-
ca.pem -C ${CHANNEL_NAME} -n $2 -c '{"Args":["invoke","a","b","10"]}'