Azure Industrial IoT OPC Vault Service
Перейти к файлу
Martin Regen 37be27cbab Set theme jekyll-theme-slate 2019-02-11 13:59:46 +01:00
.github Refactor Rest API and CosmosDB, unit tests (#31) 2019-02-01 13:47:38 +01:00
api-csharp Implement CRL and AIA extension (#35) 2019-02-11 13:53:34 +01:00
app Implement CRL and AIA extension (#35) 2019-02-11 13:53:34 +01:00
deploy Implement CRL and AIA extension (#35) 2019-02-11 13:53:34 +01:00
docs Set theme jekyll-theme-slate 2019-02-11 13:59:46 +01:00
module Swagger cleanup and docs (#32) 2019-02-04 14:54:20 +01:00
src Implement CRL and AIA extension (#35) 2019-02-11 13:53:34 +01:00
tests Implement CRL and AIA extension (#35) 2019-02-11 13:53:34 +01:00
.dockerignore Base version of gdsvault service (#3) 2018-08-03 16:36:57 +02:00
.editorconfig Create new key pair for app cert in KeyVault (#24) 2018-12-21 11:38:50 +01:00
.gitattributes Base version of gdsvault service (#3) 2018-08-03 16:36:57 +02:00
.gitignore Base version of gdsvault service (#3) 2018-08-03 16:36:57 +02:00
CONTRIBUTING.md Base version of gdsvault service (#3) 2018-08-03 16:36:57 +02:00
DEVELOPMENT.md Base version of gdsvault service (#3) 2018-08-03 16:36:57 +02:00
Directory.Build.props Create new key pair for app cert in KeyVault (#24) 2018-12-21 11:38:50 +01:00
Dockerfile Fix docker and store PK in KeyVault only (#27) 2019-01-23 10:14:29 +01:00
Dockerfile.Windows Fix docker and store PK in KeyVault only (#27) 2019-01-23 10:14:29 +01:00
Dockerfile.Windows-Server2016 Fix docker and store PK in KeyVault only (#27) 2019-01-23 10:14:29 +01:00
Dockerfile.app Fix docker and store PK in KeyVault only (#27) 2019-01-23 10:14:29 +01:00
Dockerfile.module Fix docker and store PK in KeyVault only (#27) 2019-01-23 10:14:29 +01:00
NuGet.Config Fix docker and store PK in KeyVault only (#27) 2019-01-23 10:14:29 +01:00
README.md Doc update and app issues found in testing (#34) 2019-02-07 23:18:10 +01:00
azure-iiot-opc-vault-service-develop.sln doc updates (#33) 2019-02-05 17:26:11 +01:00
azure-iiot-opc-vault-service.sln Swagger cleanup and docs (#32) 2019-02-04 14:54:20 +01:00
common.props Create new key pair for app cert in KeyVault (#24) 2018-12-21 11:38:50 +01:00
license.txt Fix docker and store PK in KeyVault only (#27) 2019-01-23 10:14:29 +01:00
project.props Create new key pair for app cert in KeyVault (#24) 2018-12-21 11:38:50 +01:00
thirdpartynotices.txt Create new key pair for app cert in KeyVault (#24) 2018-12-21 11:38:50 +01:00
version.props Create new key pair for app cert in KeyVault (#24) 2018-12-21 11:38:50 +01:00

README.md

Azure Industrial IoT Services

Build status

OPC Unified Architecture (OPC UA) Certificate Management Service

An overview about the OPC Vault certificate microservice is here.

The certificate management service for OPC UA facilitates a CA certificate cloud service for OPC UA devices based on Azure Key Vault and CosmosDB, a ASP.Net Core web application front end and a OPC UA GDS server based on .Net Standard.

The implementation follows the GDS Certificate Management Services as described in the OPC UA specification Part 12.

The CA certificates are stored in a HSM backed Azure Key Vault, which is also used to sign issued certificates.

A web management application front end and a local OPC UA GDS server allow for easy connection to the services secured by Azure AD.

This repository contains the following:

This repo contains all components required to run a CA in the Azure cloud for your OPC UA environment:

  • ASP.Net Core Certificate Management Microservice to manage certificates with Azure Key Vault and CosmosDB.
  • ASP.Net Core Sample Application as user interface for the Certificate Management Service.
  • OPC UA .Net Standard GDS Server for local OPC UA device connectivity to the cloud Certificate Management Service.

A Powershell deployment script automatically builds and deploys the services to your subscription. By default, security is configured for a production system.

Certificate Management Microservice Features

  • Production ready certificate microservice based on C# with ASP.Net Core 2.1.
  • Uses Azure Key Vault as CA certificate store, key pair generator and certificate signer backed by FIPS 140-2 Level 2 validated HSMs.
  • Uses Cosmos DB as application and certificate request database. Open database interface to integrate with other database services.
  • Secured by AzureAD role based access with separation of Reader, Writer, Approver and Administrator roles.
  • Exposes Rest API (with Swagger UI) to easily integrate certificate microservice in other cloud services.
  • Support for RSA certificates with a SHA256 signature and keys with a length of 2048, 3072 or 4096 bits.
  • Support to sign certificates created with new key pairs from Azure Key Vault or by using Certificate Signing Requests (CSR).
  • Key Pairs and signed certificates with extensions follow requirements and guidelines as specified in the OPC UA GDS Certificate Management Services, Part 12.
  • The CA has full CRL support with revocation of unregistered OPC UA applications.
  • Uses on behalf tokens to access Azure Key Vault to validate user permissions at KeyVault level in addition to the validation at the microservice Rest API.
  • Busines logic ensures secure workflow with assigned user roles and the validation of certificate requests against the application database.
  • Follows Microsoft SDL guidelines for public-key infrastructure.
  • Leverages OPC UA .NetStandard GDS Server Common libraries.
  • Uses Azure Key Vault versioning and auditing to track CA certificate access and CRL history.

Web Certificate Management Sample Features

  • Sample code is based on the certificate management microservice Rest API using C# with ASP.Net Core 2.1.
  • Workflow to secure a OPC UA application with a CA signed certificate: Register an OPC UA application, request a certificate or key pair, generate the signed certificate and download it.
  • Secure workflow to unregister and revoke a OPC UA application including CRL updates.
  • Forms to manage OPC UA applications and certificate requests.
  • CA certificate management for the Administrator role to configure CA cert lifetime and subject name.
  • Renewal of a CA certificates.
  • Create key pairs and sign certificates with a CSR validated with application database information.
  • Upload CSR for signing requests as file or base64 string.
  • Binary and base64 download of certificates and keys as PFX, PEM and DER.
  • Issues consolidated CRL updates for multiple unregistered applications in a single step.
  • Accesses the microservice on behalf of the user to be able to execute protected functions in Azure Key Vault (e.g. signing rights for Approver).

On premise Global Discovery Server (GDS) with cloud integration

  • Based on the GDS server common library of the OPC UA .NetStandard SDK.
  • Implements OPC UA Discovery and Certificate management services by connecting to the microservice.
  • Executes in a docker container or as a .Net Core 2.0 application on Windows or Linux.
  • Implements namespace of OPC UA GDS Discovery and Certificate Management Services V1.04, Part 12.
  • Note: At this time the server can only act in a reader role with limited functionality due to the lack of user OAuth2 authentication support in the .NetStandard SDK.
  • For development purposes and testing, the AzureAD registration can be enabled for a 'Writer' role to allow to create certificate requests and to update applications, but this configuration is not recommended for use in production deployments.

Overview on the OPC Vault microservice

An overview about the service is here.

Build and Deploy the service to Azure

The documentation how to build and deploy the service is here.

Manage certificates with the Web Sample Application

The documentation how to manage certificates with the Web sample application is here.

Secure the Certificate service

Guidelines how to run a secure certificate service are here.

Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.microsoft.com.

When you submit a pull request, a CLA-bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.

Give Feedback

Please enter issues, bugs, or suggestions for any of the components and services as GitHub Issues here.

Contribute

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.

If you want/plan to contribute, we ask you to sign a CLA (Contribution License Agreement) and follow the project 's code submission guidelines. A friendly bot will remind you about it when you submit a pull-request. ​ 

License

Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT License.