Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Azure Confidential Ledger wordt uitgevoerd op beveiligde enclaves met hardwaresteun die een sterke isolatie en beveiliging bieden voor uw gegevens. Voordat u gevoelige gegevens met het grootboek uitwisselt, moet u de echtheid van de grootboekknooppunten controleren om ervoor te zorgen dat u communiceert met legitieme exemplaren van azure Confidential Ledger en niet een kwaadwillende actor.
In dit artikel wordt het vertrouwensmodel achter verificatie van azure Confidential Ledger-knooppunten uitgelegd, wordt het proces voor het ophalen van service-id-certificaten beschreven en wordt uitgelegd hoe u de echtheid van knooppunten verifieert met behulp van SDK-code en Intel SGX-attestation.
Waarom grootboekknooppunten verifiëren?
Azure Confidential Ledger maakt gebruik van het TLS 1.3-protocol voor clientverbindingen, waarbij verbindingen worden beëindigd binnen door hardware ondersteunde beveiligings enclaves (Intel SGX-enclaves). Omdat de TLS-verbinding binnen de enclave wordt beëindigd, hebben noch Azure-beheerders noch anderen toegang tot de gegevens die onderweg zijn. De hardware dwingt deze garantie af.
TLS alleen bewijst echter niet dat het externe eindpunt een echt Azure Confidential Ledger-knooppunt is waarop vertrouwde code wordt uitgevoerd. Het verifiëren van grootboekknooppunten biedt extra zekerheid dat:
- De knooppunten worden uitgevoerd binnen legitieme Intel SGX-enclaves. De hardwareverklaring bewijst dat de uitvoeringsomgeving legitiem is.
- Op de knooppunten wordt vertrouwde, ongewijzigde code uitgevoerd. De MRENCLAVE-meting bevestigt de exacte code die in de enclave wordt uitgevoerd.
- Uw gegevens stromen alleen naar legitieme exemplaren van azure Confidential Ledger. Verificatie van certificaten voorkomt imitatie.
- Man-in-the-middle-aanvallen worden voorkomen. Door TLS te combineren met knooppuntverificatie wordt de kloof tussen transportversleuteling en eindpuntvertrouwen gesloten.
Inzicht in het vertrouwensmodel
Azure Confidential Ledger is gebaseerd op het Confidential Consortium Framework (CCF), waarmee een vertrouwensrelatie tot stand wordt gebracht via een keten van cryptografische bewijzen:
Certificaat voor netwerkidentiteit: elk exemplaar van het vertrouwelijke grootboek van Azure heeft een uniek netwerkidentiteitscertificaat (ook wel het service-id-certificaat genoemd). Dit certificaat fungeert als de basis van vertrouwen voor TLS-verbindingen met elk knooppunt in het grootboeknetwerk.
Knooppuntidentiteit: elk grootboekknooppunt heeft een eigen id-sleutelpaar. De openbare sleutel van het knooppunt wordt onderschreven door het netwerk-identiteitscertificaat, waardoor er een vertrouwensketen ontstaat van individuele knooppunten naar de algemene grootboekinstantie.
Intel SGX-attestatie: elk knooppunt genereert een Intel SGX-quote: een hardware-ondertekende attestatie die de cryptografische hash van de openbare sleutel van het knooppunt en de MRENCLAVE-waarde (een meting van de enclavecode) bevat. Dit citaat bewijst dat het knooppunt wordt uitgevoerd binnen een legitieme SGX-enclave met vertrouwde code.
Op consensus gebaseerde vertrouwensrelatie: Azure Confidential Ledger wordt uitgevoerd op drie of meer identieke exemplaren, elk in een toegewezen enclave met hardware-ondersteuning. De integriteit van het grootboek wordt gehandhaafd via blockchain op basis van consensus, dus een enkel gecompromitteerd knooppunt kan de grootboekstatus niet wijzigen.
Het service-id-certificaat ophalen
Het service-identiteitscertificaat is een netwerkidentiteit openbaar sleutelcertificaat dat fungeert als de basis van een vertrouwensrelatie (Certificeringsinstantie) voor TLS-verbindingen met het grootboek. U moet dit certificaat ophalen uit de Azure Confidential Ledger Identity-service, die wordt uitgevoerd op een bekend eindpunt, gescheiden van het grootboek zelf.
Azure CLI
curl https://identity.confidential-ledger.core.azure.com/ledgerIdentity/<ledger-name> \
--silent | jq '.ledgerTlsCertificate' | xargs echo -e > service_cert.pem
Vervang <ledger-name> door de naam van uw exemplaar van het vertrouwelijke grootboek.
Python
from azure.confidentialledger.certificate import ConfidentialLedgerCertificateClient
identity_url = "https://identity.confidential-ledger.core.azure.com"
ledger_name = "<ledger-name>"
identity_client = ConfidentialLedgerCertificateClient(identity_url)
network_identity = identity_client.get_ledger_identity(ledger_id=ledger_name)
ledger_tls_cert_file_name = "service_cert.pem"
with open(ledger_tls_cert_file_name, "w") as cert_file:
cert_file.write(network_identity["ledgerTlsCertificate"])
.NET
using Azure.Security.ConfidentialLedger;
var identityClient = new ConfidentialLedgerCertificateClient(
new Uri("https://identity.confidential-ledger.core.azure.com"));
string ledgerName = "<ledger-name>";
Azure.Response response = identityClient.GetLedgerIdentity(ledgerName);
var certificateResponse = System.Text.Json.JsonDocument.Parse(response.Content.ToString());
string serviceCert = certificateResponse.RootElement
.GetProperty("ledgerTlsCertificate").GetString();
File.WriteAllText("service_cert.pem", serviceCert);
Java
import com.azure.security.confidentialledger.certificate.ConfidentialLedgerCertificateClient;
import com.azure.security.confidentialledger.certificate.ConfidentialLedgerCertificateClientBuilder;
import com.azure.core.http.HttpClient;
import com.azure.core.http.rest.Response;
import com.azure.core.util.BinaryData;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
ConfidentialLedgerCertificateClient identityClient =
new ConfidentialLedgerCertificateClientBuilder()
.certificateEndpoint("https://identity.confidential-ledger.core.azure.com")
.credential(new DefaultAzureCredentialBuilder().build())
.httpClient(HttpClient.createDefault())
.buildClient();
String ledgerName = "<ledger-name>";
Response<BinaryData> certResponse = identityClient
.getLedgerIdentityWithResponse(ledgerName, null);
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonNode = mapper.readTree(certResponse.getValue().toBytes());
String serviceCert = jsonNode.get("ledgerTlsCertificate").asText();
Verbinding maken met behulp van het service-id-certificaat
Nadat u het dienstidentiteitscertificaat hebt opgehaald, gebruikt u het als de vertrouwde CA bij het maken van een vertrouwelijke grootboekclient. De SDK's gebruiken dit certificaat om de TLS-verbinding met het grootboekknooppunt te verifiëren.
Python
from azure.identity import DefaultAzureCredential
from azure.confidentialledger import ConfidentialLedgerClient
credential = DefaultAzureCredential()
ledger_client = ConfidentialLedgerClient(
endpoint="https://<ledger-name>.confidential-ledger.azure.com",
credential=credential,
ledger_certificate_path="service_cert.pem"
)
.NET
using Azure.Identity;
using Azure.Security.ConfidentialLedger;
var ledgerClient = new ConfidentialLedgerClient(
new Uri("https://<ledger-name>.confidential-ledger.azure.com"),
new DefaultAzureCredential());
Opmerking
De .NET SDK verwerkt certificaatverificatie intern. U hoeft het certificaatbestand van de service niet expliciet door te geven.
Java
import io.netty.handler.ssl.SslContext;
import io.netty.handler.ssl.SslContextBuilder;
import java.io.ByteArrayInputStream;
import java.nio.charset.StandardCharsets;
SslContext sslContext = SslContextBuilder.forClient()
.trustManager(new ByteArrayInputStream(
serviceCert.getBytes(StandardCharsets.UTF_8)))
.build();
reactor.netty.http.client.HttpClient reactorClient =
reactor.netty.http.client.HttpClient.create()
.secure(sslContextSpec -> sslContextSpec.sslContext(sslContext));
HttpClient httpClient = new NettyAsyncHttpClientBuilder(reactorClient)
.wiretap(true).build();
ConfidentialLedgerClient ledgerClient = new ConfidentialLedgerClientBuilder()
.credential(new DefaultAzureCredentialBuilder().build())
.httpClient(httpClient)
.ledgerEndpoint("https://<ledger-name>.confidential-ledger.azure.com")
.buildClient();
TypeScript
import ConfidentialLedger, { getLedgerIdentity }
from "@azure-rest/confidential-ledger";
import { DefaultAzureCredential } from "@azure/identity";
const ledgerIdentity = await getLedgerIdentity("<ledger-name>");
const ledgerClient = ConfidentialLedger(
"https://<ledger-name>.confidential-ledger.azure.com",
ledgerIdentity.ledgerIdentityCertificate,
new DefaultAzureCredential()
);
Intel SGX enclave attestation controleren
TLS-certificaatverificatie bevestigt dat u verbinding maakt met een legitiem grootboekexemplaar, maar het bewijst niet dat het knooppunt draait in een legitieme Intel SGX-enclave. Voor het hoogste zekerheidsniveau kunt u de Intel SGX-offerte controleren die wordt gepresenteerd door grootboekknooppunten.
De SGX-certificaat is een hardware-ondertekend attesteringsrapport dat het volgende bevat:
- De MRENCLAVE-waarde: Een meting van de code die in de enclave wordt uitgevoerd. Deze waarde identificeert het exacte binaire bestand dat in de enclave is geladen.
- De hash van de openbare sleutel van de identiteit van het knooppunt: de cryptografische hash (DER-gecodeerd) van de openbare sleutel van de identiteit van het knooppunt, ingesloten in het gegevensveld van het SGX-rapport.
- Platform attestation: de attestation-infrastructuur van Intel ondertekent de offerte en bewijst dat de enclave wordt uitgevoerd op legitieme Intel SGX-hardware.
Wanneer een knooppunt lid wordt van het Azure Confidential Ledger-netwerk, moet het een geldige quote presenteren. Het netwerk accepteert het knooppunt alleen als de offerte geldig is en de MRENCLAVE-waarde overeenkomt met een van de toegestane waarden in de controlebare governanceconfiguratie.
Een offerte voor een knooppunt controleren
U kunt knooppuntcitaten controleren met behulp van het verify_quote.sh script dat wordt geleverd met het CCF Python-pakket of de CCF-installatie. U kunt het oeverify hulpprogramma ook gebruiken vanuit de Open Enclave SDK.
Voorwaarden:
- Ubuntu 20.04-LTS 64-bits
- CCF of het CCF Python-pakket
- Open Enclave Host-verify SDK
- jq
Steps:
Download het service-identiteitscertificaat als u dat nog niet hebt gedaan:
curl https://identity.confidential-ledger.core.azure.com/ledgerIdentity/<ledger-name> \ --silent | jq '.ledgerTlsCertificate' | xargs echo -e > service_cert.pemVoer het verificatiescript uit:
/opt/ccf_virtual/bin/verify_quote.sh \ https://<ledger-name>.confidential-ledger.azure.com:443 \ --cacert service_cert.pem
Het script voert twee controles uit:
- Er wordt gecontroleerd of de cryptografische hash van de openbare sleutel van het knooppunt (DER-gecodeerd) overeenkomt met de SGX-rapportgegevens.
- Hiermee wordt gecontroleerd of de MRENCLAVE-waarde die aanwezig is in de offerte wordt vertrouwd.
Controleren op basis van een specifieke MRENCLAVE-waarde
U kunt de lijst met vertrouwde MRENCLAVE-waarden downloaden van het governance-eindpunt van het grootboek:
curl https://<ledger-name>.confidential-ledger.azure.com/node/code \
--cacert service_cert.pem --silent | jq
Als u wilt controleren of een knooppunt een specifieke versie van de vertrouwde code uitvoert, geeft u de mrenclave parameter op:
/opt/ccf_virtual/bin/verify_quote.sh \
https://<ledger-name>.confidential-ledger.azure.com:443 \
--cacert service_cert.pem \
--mrenclave <expected-mrenclave-value>
Indien opgegeven, moet de MRENCLAVE-waarde in de offerte exact overeenkomen.
Zie Vertrouwensrelatie tot stand brengen in het vertrouwelijke azure-grootboek voor stapsgewijze informatie over het proces voor offerteverificatie.
Beste praktijken
Haal altijd het service-identiteitscertificaat op uit de identiteitsservice. Verhard codeer het certificaat niet en sla het niet blijvend op in de cache. Haal het van
https://identity.confidential-ledger.core.azure.comen vernieuw het periodiek, aangezien servicecertificaten tijdens herstel na noodgevallen of onderhoud mogelijk worden vernieuwd.Gebruik door SDK geleverde verificatie. De Azure Confidential Ledger SDKs verwerken TLS-certificaatverificatie automatisch. Gebruik de SDK's waar mogelijk om te voorkomen dat logica voor het vastmaken van certificaten handmatig wordt geïmplementeerd.
SGX-offerteverificatie implementeren voor scenario's met hoge beveiliging. Voor workloads met de strengste beveiligingsvereisten implementeer SGX-quote verificatie om te bevestigen dat noden vertrouwde code uitvoeren in legitieme enclaves.
Controleer de service-goedkeuringsketen. Wanneer u transactiebevestigingen controleert, controleert u het
serviceEndorsementsveld. Als de service-identiteit is vernieuwd (bijvoorbeeld na een noodherstel), bevat dit veld de keten van eerdere servicecertificaten die nodig zijn om de vertrouwensrelatie terug te traceren naar het huidige certificaat.Inzicht in de implicaties van certificaatrotatie. Service-identiteitscertificaten kunnen worden gewijzigd tijdens herstel na noodgevallen of service-updates. Uw toepassing moet certificaatrotatie probleemloos verwerken door de service-id opnieuw op te halen uit het identiteitsservice-eindpunt wanneer TLS-verbindingsfouten optreden.
Volgende stappen
- Vertrouwensrelatie tot stand brengen met verificatie van SGX-offertes
- Azure Confidential Ledger-verificatie met Microsoft Entra-id
- Azure Confidential Ledger-architectuur
- Ontvangstbewijzen voor schrijftransacties van Azure Confidential Ledger
- Ontvangstbevestigingen voor schrijftransacties controleren