Zum Inhalt springen

Certificate Management Protocol

aus Wikipedia, der freien Enzyklopädie
CMP (Certificate Management Protocol)
Familie: unbekannt
Einsatzgebiet: Zertifikatsverwaltung
Neueste Version: cmp2021(3)
OID der neuesten Version: 1.3.6.1.5.5.7.0.16
TCP/UDP-Port: 80 (http), 443 (https), 829 (pkix-3-ca-ra)
CMP im TCP/IP-Protokollstapel:
Anwendung CMP CMP
HTTP HTTPS CoAP SMTP
Transport TCP
Internet IP (IPv4, IPv6)
Netz-Zugang Ethernet Token
Bus
Token
Ring
FDDI
Vorgeschlagener Standard:

RFC 9810 (CMP, 2025)<ref name="RFC9810" />

Obsoleter Standard:

RFC 4210 (CMP, 2005)<ref name="RFC4210" />
RFC 2510 (CMP, 1999)<ref name="RFC2510" />

Das Certificate Management Protocol (CMP, englisch für „Zertifikats-Verwaltungsprotokoll“) ist ein Protokoll von der IETF zur Verwaltung digitaler Zertifikate nach dem Standard X.509 in einer Public-Key-Infrastruktur (PKI). Das Protokoll regelt hierbei die Interaktion zwischen PKI-Klienten (Nutzern bzw. von ihnen verwendeten Anwendungen) oder PKI-Komponenten, die X.509-Zertifikate beantragen oder verwalten möchten, und PKI-Komponenten wie einer Registrierungsstelle (RA) oder Zertifizierungsstelle (CA).

Nachrichtentypen

Eine CMP Nachricht kann einem der folgenden Typen entsprechen:

  • Initialisierungs-Anforderung
  • Initialisierungs-Antwort
  • Zertifizierungs-Anforderung
  • Zertifizierungs-Antwort
  • PKCS #10 Zertifizierungs-Anforderung
  • Beweis des Schlüsselbesitzes-Aufgabe
  • Beweis des Schlüsselbesitzes-Antwort
  • Aktualisierungs-Anfrage
  • Aktualisierungs-Antwort
  • Schlüssel-Wiederherstellungs-Anfrage
  • Schlüssel-Wiederherstellungs-Antwort
  • Widerruf-Anforderung
  • Widerruf-Antwort
  • Kreuz-Zertifizierungs-Anforderung
  • Kreuz-Zertifizierungs-Antwort
  • CA-Schlüssel-Aktualisierungs-Bekanntgabe
  • Zertifikats-Bekanntgabe
  • Widerruf-Bekanntgabe
  • CRL-Bekanntgabe
  • Bestätigung
  • Verschachtelte Nachricht
  • Allgemeine Nachricht
  • Allgemeine Antwort
  • Fehler-Nachricht
  • Zertifikats-Bestätigung
  • Abfrage-Anfrage
  • Abfrage-Antwort

Nachrichtenformat

CMP-Nachrichten sind DER-kodierte Datenstrukturen, die in ASN.1 definiert sind. Der Grundaufbau besteht aus einem Header, dessen Inhalt den meisten Nachrichtentypen gemein ist, und aus einem Body (Nachrichtenrumpf), der Informationen enthält, die für den jeweiligen Typ spezifisch sind. Außerdem können optional noch Daten zum Schutz der Integrität und Authentizität sowie zusätzliche, für den Empfänger eventuell nützliche Zertifikate in einer Nachricht enthalten sein.

Der Body der Anforderungstypen für Initialisierung, Zertifizierung, Schlüssel Aktualisierung, Schlüssel Wiederherstellung und Kreuz-Zertifizierung entspricht dem in RFC 4211<ref name="RFC4211" /> definierten Certificate Request Message Format (CRMF, deutsch Zertifikats-Anforderungs-Nachrichtenformat). Die Formate der restlichen Nachrichten sind im RFC 9810 beschrieben,<ref name="RFC9810" /> welches CMP definiert.

Transport

Für den Transport von CMP-Nachrichten gibt es viele Möglichkeiten, insbesondere:

  • In HTTP-Nachrichten gekapselt, optional zusätzlich über TLS abgesichert (HTTPS), siehe RFC 9811.<ref name="RFC9811" />
  • In CoAP-Nachrichten gekapselt, ggf. zusätzlich über DTLS abgesichert, siehe RFC 9482.<ref name="RFC9482" />
  • Über TCP oder jedes andere zuverlässige, verbindungsorientierte Transportprotokoll.
  • In Dateien, z. B. über FTP oder SCP.
  • Per E-Mail, wobei der MIME-Kodierungsstandard benutzt wird.

Der in HTTP gekapselte Transport ist am üblichsten.<ref><templatestyles src="Webarchiv/styles.css" />{{#if:20070930024511

      | {{#ifeq: 20070930024511 | *
    | Vorlage:Webarchiv/Wartung/Stern{{#if: Re: CMP – RFC??? | {{#invoke:WLink|getEscapedTitle|Re: CMP – RFC???}} | {{#invoke:Webarchiv|getdomain|http://osdir.com/ml/encryption.cryptlib/2005-11/msg00054.html}} }} (Archivversionen)
    | {{#iferror: {{#time: j. F Y|20070930024511}}
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/DatumDer Wert des Parameters {{#if: wayback | wayback | Datum }} muss ein gültiger Zeitstempel der Form YYYYMMDDHHMMSS sein!
         | {{#if: Re: CMP – RFC??? | {{#invoke:WLink|getEscapedTitle|Re: CMP – RFC???}} | {{#invoke:Webarchiv|getdomain|http://osdir.com/ml/encryption.cryptlib/2005-11/msg00054.html}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer }} vom {{#time: j. F Y|20070930024511}} im Internet Archive{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
      }}
  }}
      | {{#if:
          | {{#iferror: {{#time: j. F Y|{{{webciteID}}}}}
    | {{#switch: {{#invoke:Str|len|{{{webciteID}}}}}
       | 16= {{#if: Re: CMP – RFC??? | {{#invoke:WLink|getEscapedTitle|Re: CMP – RFC???}} | {{#invoke:Webarchiv|getdomain|http://osdir.com/ml/encryption.cryptlib/2005-11/msg00054.html}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer }} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{{webciteID}}}|1|10}}/86400}} }} days}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
       | 9 = {{#if: Re: CMP – RFC??? | {{#invoke:WLink|getEscapedTitle|Re: CMP – RFC???}} | {{#invoke:Webarchiv|getdomain|http://osdir.com/ml/encryption.cryptlib/2005-11/msg00054.html}} }} {{#ifeq:  | [] | [ | ( }}Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer}} vom {{#time: j. F Y| 19700101000000 + {{#expr: floor {{#expr: {{#invoke:Str|sub|{{#invoke:Expr|base62|{{{webciteID}}}}}|1|10}}/86400}} }} days}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
       | #default= Der Wert des Parameters {{#if: webciteID | webciteID | ID }} muss entweder ein Zeitstempel der Form YYYYMMDDHHMMSS oder ein Schüsselwert mit 9 Zeichen oder eine 16-stellige Zahl sein!Vorlage:Webarchiv/Wartung/webcitation{{#if:  || }}
      }}
    | c|{{{webciteID}}}}} {{#if: Re: CMP – RFC??? | {{#invoke:WLink|getEscapedTitle|Re: CMP – RFC???}} | {{#invoke:Webarchiv|getdomain|http://osdir.com/ml/encryption.cryptlib/2005-11/msg00054.html}} }} (Memento{{#if: {{#if:  | {{{archiv-bot}}} |  }} |  des Vorlage:Referrer}} vom {{#time: j. F Y|{{{webciteID}}}}} auf WebCite{{#if:  | ;  }}{{#ifeq:  | [] | ] | ) }}
  }}
          | {{#if: 
              | Vorlage:Webarchiv/Today
              | {{#if:
                      | Vorlage:Webarchiv/Generisch
                      | {{#if: Re: CMP – RFC??? | {{#invoke:WLink|getEscapedTitle|Re: CMP – RFC???}} | {{#invoke:Webarchiv|getdomain|http://osdir.com/ml/encryption.cryptlib/2005-11/msg00054.html}} }}  
                 }}}}}}}}{{#if:
    | Vorlage:Webarchiv/archiv-bot
  }}{{#invoke:TemplatePar|check
     |all      = url=
     |opt      = text= wayback= webciteID= archive-is= archive-today= archiv-url= archiv-datum= ()= archiv-bot= format= original=
     |cat      = Wikipedia:Vorlagenfehler/Vorlage:Webarchiv
     |errNS    = 0
     |template = Vorlage:Webarchiv
     |format   = *
     |preview  = 1
  }}{{#ifexpr: {{#if:20070930024511|1|0}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}}{{#if:|+1}} <> 1
    | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Genau einer der Parameter 'wayback', 'webciteID', 'archive-today', 'archive-is' oder 'archiv-url' muss angegeben werden.|1}}
  }}{{#if: 
    | {{#switch: {{#invoke:Webarchiv|getdomain|{{{archiv-url}}}}}
        | web.archive.org = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von Internet Archive erkannt, bitte Parameter 'wayback' benutzen.|1}} 
        | webcitation.org = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von WebCite erkannt, bitte Parameter 'webciteID' benutzen.|1}} 
        | archive.today |archive.is |archive.ph |archive.fo |archive.li |archive.md |archive.vn = 
          {{#if:  || }}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Im Parameter 'archiv-url' wurde URL von archive.today erkannt, bitte Parameter 'archive-today' benutzen.|1}}
      }}{{#if: 
         | {{#iferror: {{#iferror:{{#invoke:Vorlage:FormatDate|Execute}}|}}
             | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Wert des Parameter 'archiv-datum' ist ungültig oder hat ein ungültiges Format.|1}}
          |  }} 
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Pflichtparameter 'archiv-datum' wurde nicht angegeben.|1}}
      }}
    | {{#if: 
         | {{#if:  || }}Vorlage:Webarchiv/Wartung/Parameter{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Der Parameter 'archiv-datum' ist nur in Verbindung mit 'archiv-url' angebbar.|1}}
      }}
  }}{{#if:{{#invoke:URLutil|isHostPathResource|http://osdir.com/ml/encryption.cryptlib/2005-11/msg00054.html}}
    || {{#if:  || }}
  }}{{#if: Re: CMP – RFC???
    | {{#if: {{#invoke:WLink|isBracketedLink|Re: CMP – RFC???}}
        | {{#if:  || }}
      }}
    | {{#if:  || }}Vorlage:Webarchiv/Wartung/Linktext_fehlt
  }}{{#switch: 
    |addlarchives|addlpages= {{#if:  || }}{{#if: 1 |Vorlage:Webarchiv/Wartung/Parameter}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: enWP-Wert im Parameter 'format'.|1}}
  }}{{#ifeq: {{#invoke:Str|find|http://osdir.com/ml/encryption.cryptlib/2005-11/msg00054.html%7Carchiv}} |-1
    || {{#ifeq: {{#invoke:Str|find|{{#invoke:Str|cropleft|http://osdir.com/ml/encryption.cryptlib/2005-11/msg00054.html%7C4}}%7Chttp}} |-1
         || {{#switch: {{#invoke:Webarchiv|getdomain|http://osdir.com/ml/encryption.cryptlib/2005-11/msg00054.html }}
              | abendblatt.de | daserste.ndr.de | inarchive.com | webcitation.org = 
              | #default = {{#if:  || }}{{#if: 1 |Vorlage:Webarchiv/Wartung/URL}}{{#invoke:TemplUtl|failure| Fehler bei Vorlage:Webarchiv: Archiv-URL im Parameter 'url' anstatt URL der Originalquelle. Entferne den vor der Original-URL stehenden Mementobestandteil und setze den Archivierungszeitstempel in den Parameter 'wayback', 'webciteID', 'archive.today' oder 'archive-is' ein, sofern nicht bereits befüllt.|1}}
            }} 
       }}
  }} osdir.com (englisch).</ref>

Der Content-Type für CMP ist application/pkixcmp. In veralteten Versionen wurde application/x-pkixcmp verwendet.

Implementierungen

  • OpenSSL ab Version 3.0 implementiert eine Vielzahl von CMP-Features in C und bietet ein Kommandozeilen-Tool für einen CMP-Client.<ref>CMP client support in OpenSSL 3.0. openssl.org (englisch).</ref> Der sogenannte generic CMP client<ref>github.com/siemens/gencmpclient</ref> bietet darauf aufbauend eine relativ einfach nutzbare Programmierschnittstelle ({{#invoke:Vorlage:lang|full|CODE=en|SCRIPTING=Latn|SERVICE=englisch}}), die dem leichtgewichtigen CMP-Profil folgt, welches in RFC 9483<ref name="RFC9483" /> definiert ist.
  • BouncyCastle unterstützt CMP-Nachrichten für Java und C#.
  • Die Bibliothek cryptlib implementiert CMPv2 in C.
  • Diverse CA-Produkte unterstützen die wichtigsten Teile von CMPv2, etwa die in Java geschriebene EJBCA der Firma Keyfactor, der Certifier der finnischen Firma Insta, die Entrust Certificate Authority, der Nexus Certificate Manager, der DigiCert Device Trust Manager und die IBM z/OS PKI Services.

Geschichte

  • CMP Version 1 wurde in RFC 2510 (CMP, 1999)<ref name="RFC2510" /> spezifiziert.
  • CMPv2 wurde in RFC 4210 (CMP, 2005)<ref name="RFC4210" /> spezifiziert.
  • CMPv3 wurde zunächst in RFC 9480 (CMP, 2023)<ref name="RFC9480" /> als Erweiterung von RFC 4210 spezifiziert, dann aber im Juli 2025 als eigenständiges Dokument herausgebracht RFC 9810<ref name="RFC9810" /> Dort wurden auch diverse meist kleinere Erweiterungen eingefügt, insbesondere die Unterstützung von KEM-Schlüsselmaterial.

Die Spezifikation des HTTP-Transfers für CMP in RFC 6712 (CMP, 2012)<ref name="RFC6712" /> wurde im Juli 2025 aktualisiert zu RFC 9811.<ref name="RFC9811" />

Im November 2023 wurde ein leichtgewichtiges CMP-Profil für industrielle Anwendungen als RFC 9483<ref name="RFC9483" /> veröffentlicht, ebenso eine Spezifikation zur Nutzung von Kryptoalgorithmen in CMP als RFC 9481<ref name="RFC9481" /> und zum Transport von CMP-Nachrichten über CoAP als RFC 9482.<ref name="RFC9482" />

Normen und Standards

Einzelnachweise

<references> <ref name="RFC2510"> Vorlage:RFC-Internet </ref> <ref name="RFC4210"> Vorlage:RFC-Internet </ref> <ref name="RFC4211"> Vorlage:RFC-Internet </ref> <ref name="RFC6712"> Vorlage:RFC-Internet </ref> <ref name="RFC9480"> Vorlage:RFC-Internet </ref> <ref name="RFC9481"> Vorlage:RFC-Internet </ref> <ref name="RFC9482"> Vorlage:RFC-Internet </ref> <ref name="RFC9483"> Vorlage:RFC-Internet </ref> <ref name="RFC9810"> Vorlage:RFC-Internet </ref> <ref name="RFC9811"> Vorlage:RFC-Internet </ref> </references>