Add Certificate Management support over Azure IoT Hub#1223
Open
ewertons wants to merge 19 commits intofeature/iot-csr-previewfrom
Open
Add Certificate Management support over Azure IoT Hub#1223ewertons wants to merge 19 commits intofeature/iot-csr-previewfrom
ewertons wants to merge 19 commits intofeature/iot-csr-previewfrom
Conversation
There was a problem hiding this comment.
Pull request overview
Adds end-to-end certificate management support by enabling DPS registration with a CSR (to obtain an issued device cert) and enabling IoT Hub certificate re-issuance over MQTT, along with samples and supporting dev utilities.
Changes:
- Extend DPS provisioning pipeline to optionally include a CSR in registration payload and surface the issued certificate chain on the registration result.
- Add IoT Hub MQTT support for certificate issuance operations (CSR request/response correlation, topics, client APIs).
- Add certificate management samples/docs and dev utility helpers for provisioning service operations.
Reviewed changes
Copilot reviewed 55 out of 410 changed files in this pull request and generated 17 comments.
Show a summary per file
| File | Description |
|---|---|
| scripts/dps_cert_mgmt/service_api_tokengen.py | Adds a helper script to generate DPS service SAS tokens |
| scripts/dps_cert_mgmt/device_api_tokengen.py | Adds a helper script to generate DPS device SAS tokens |
| scripts/create_x509_chain_crypto.py | Adds extra console output during pipeline cert generation |
| samples/pnp/simple_thermostat.py | Tweaks reboot handler input validation |
| samples/cert-mgmt/certificate_management.md | New documentation for certificate management sample/config |
| samples/cert-mgmt/certificate_issuance.py | New sample demonstrating DPS cert issuance + IoT Hub re-issuance |
| samples/async-hub-scenarios/provision_x509.py | Align env var names with provisioning sample conventions |
| requirements_test.txt | Adjust test dependencies for provisioning e2e/dev utils |
| dev_utils/dev_utils/provisioningservice/utils/sastoken.py | Adds SAS token helper for provisioning service client |
| dev_utils/dev_utils/provisioningservice/utils/connection_string.py | Adds connection string parsing/validation utility |
| dev_utils/dev_utils/provisioningservice/utils/auth.py | Adds msrest Authentication adapter for connection strings |
| dev_utils/dev_utils/provisioningservice/utils/init.py | Initializes provisioningservice utils package |
| dev_utils/dev_utils/provisioningservice/protocol/version.py | Adds API version constant for generated protocol layer |
| dev_utils/dev_utils/provisioningservice/protocol/models/x509_certificates.py | Generated model for X509Certificates |
| dev_utils/dev_utils/provisioningservice/protocol/models/x509_certificate_with_info.py | Generated model for X509CertificateWithInfo |
| dev_utils/dev_utils/provisioningservice/protocol/models/x509_certificate_info.py | Generated model for X509CertificateInfo |
| dev_utils/dev_utils/provisioningservice/protocol/models/x509_ca_references.py | Generated model for X509CAReferences |
| dev_utils/dev_utils/provisioningservice/protocol/models/x509_attestation.py | Generated model for X509Attestation |
| dev_utils/dev_utils/provisioningservice/protocol/models/twin_collection.py | Placeholder/commented generated model for TwinCollection |
| dev_utils/dev_utils/provisioningservice/protocol/models/tpm_attestation.py | Generated model for TpmAttestation |
| dev_utils/dev_utils/provisioningservice/protocol/models/symmetric_key_attestation.py | Generated model for SymmetricKeyAttestation |
| dev_utils/dev_utils/provisioningservice/protocol/models/reprovision_policy.py | Generated model for ReprovisionPolicy |
| dev_utils/dev_utils/provisioningservice/protocol/models/provisioning_service_error_details.py | Generated error model + exception type |
| dev_utils/dev_utils/provisioningservice/protocol/models/metadata.py | Generated model for Metadata |
| dev_utils/dev_utils/provisioningservice/protocol/models/initial_twin_properties.py | Generated model for InitialTwinProperties |
| dev_utils/dev_utils/provisioningservice/protocol/models/initial_twin.py | Generated model for InitialTwin |
| dev_utils/dev_utils/provisioningservice/protocol/models/individual_enrollment.py | Generated model for IndividualEnrollment incl. cert issuance policy |
| dev_utils/dev_utils/provisioningservice/protocol/models/enrollment_group.py | Generated model for EnrollmentGroup incl. cert issuance policy |
| dev_utils/dev_utils/provisioningservice/protocol/models/device_registration_state.py | Generated model for DeviceRegistrationState |
| dev_utils/dev_utils/provisioningservice/protocol/models/custom_allocation_definition.py | Generated model for CustomAllocationDefinition |
| dev_utils/dev_utils/provisioningservice/protocol/models/client_certificate_issuance_policy.py | Generated model for clientCertificateIssuancePolicy |
| dev_utils/dev_utils/provisioningservice/protocol/models/attestation_mechanism.py | Generated model for AttestationMechanism |
| dev_utils/dev_utils/provisioningservice/protocol/models/init.py | Exposes generated models via package init |
| dev_utils/dev_utils/provisioningservice/protocol/init.py | Exposes protocol version |
| dev_utils/dev_utils/provisioningservice/client.py | Adds provisioning service client based on msrest + generated models |
| azure-iot-device/azure/iot/device/provisioning/provisioning_device_client.py | Passes CSR through to pipeline register operation |
| azure-iot-device/azure/iot/device/provisioning/pipeline/pipeline_stages_provisioning.py | Adds CSR to DPS registration payload and maps issued cert chain |
| azure-iot-device/azure/iot/device/provisioning/pipeline/pipeline_ops_provisioning.py | Extends RegisterOperation with client CSR field |
| azure-iot-device/azure/iot/device/provisioning/pipeline/mqtt_pipeline.py | Extends pipeline register API to accept CSR |
| azure-iot-device/azure/iot/device/provisioning/models/registration_result.py | Surfaced issued client certificate chain on registration state |
| azure-iot-device/azure/iot/device/provisioning/aio/async_provisioning_device_client.py | Async register now passes CSR into pipeline |
| azure-iot-device/azure/iot/device/provisioning/abstract_provisioning_device_client.py | Adds client_certificate_signing_request property on client |
| azure-iot-device/azure/iot/device/iothub/sync_clients.py | Adds sync client API to send CSR to IoT Hub and receive response |
| azure-iot-device/azure/iot/device/iothub/pipeline/pipeline_stages_iothub_mqtt.py | Adds MQTT translation for CSR request/response topics |
| azure-iot-device/azure/iot/device/iothub/pipeline/pipeline_stages_iothub.py | Adds request/response correlation stage for CSR operations |
| azure-iot-device/azure/iot/device/iothub/pipeline/pipeline_ops_iothub.py | Adds pipeline operation type for CSR requests |
| azure-iot-device/azure/iot/device/iothub/pipeline/pipeline_events_iothub.py | Adds pipeline event type for CSR responses |
| azure-iot-device/azure/iot/device/iothub/pipeline/mqtt_topic_iothub.py | Adds topic helpers for CSR publish/subscribe and parsing |
| azure-iot-device/azure/iot/device/iothub/pipeline/mqtt_pipeline.py | Adds CSR feature flag + pipeline API to send CSR |
| azure-iot-device/azure/iot/device/iothub/pipeline/constant.py | Adds CSR feature constant |
| azure-iot-device/azure/iot/device/iothub/models/certificate_signing_request.py | Adds CSR request/response model objects |
| azure-iot-device/azure/iot/device/iothub/models/init.py | Exposes CSR request/response models |
| azure-iot-device/azure/iot/device/iothub/aio/async_clients.py | Adds async client API to send CSR to IoT Hub |
| azure-iot-device/azure/iot/device/iothub/abstract_clients.py | Adds abstract CSR API for IoTHub clients |
| azure-iot-device/azure/iot/device/constant.py | Updates API version constants for IoT Hub/DPS |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
dev_utils/dev_utils/provisioningservice/protocol/models/twin_collection.py
Show resolved
Hide resolved
bcd2bb8 to
1ff01c1
Compare
1ff01c1 to
340d97a
Compare
Member
cartertinney
left a comment
There was a problem hiding this comment.
Some initial comments about API. As per our discussion, I'll look deeper at implementation.
azure-iot-device/azure/iot/device/iothub/models/certificate_signing_request.py
Show resolved
Hide resolved
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Thank you for helping us improve the Azure IoT Python SDK!
Need Support
Here's a little checklist of things that will help it make its way to the repository: Note that you don't have to check all the boxes, we can help you with that.
This being said, the more you do, the quicker it'll go through our gated build!
-->
Checklist
devdocfolder and added or modified requirements.