Freigeben über


Testen von Clientinformationen

Überblick

Der PlayReady Test Server enthält ein spezielles clientinfo Feature, das die informationen widerspiegelt, die dem Lizenzserver aus der vom Client generierten Lizenzanforderungsanforderung zur Verfügung stehen. Mit diesem Feature können Entwickler auf einfache Weise untersuchen, welche Clientinformationen an Lizenzserver übertragen werden, und basierend auf clientspezifischen Funktionen geeignete Logik für die Lizenzgenerierung erstellen.

Clientinfo-Feature

Verwenden Sie den clientinfo Parameter, um Clientinformationen zu prüfen, die in Lizenzanforderungen gesendet werden:

Url des Testservers:

http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(msg:clientinfo)

SOAP-Aktion:

http://schemas.microsoft.com/DRM/2007/03/protocols/AcquireLicense

Beispielanforderungsstruktur

Das Clientinformationsfeature verarbeitet standardmäßige PlayReady-Lizenzerwerbsanforderungen und gibt detaillierte Informationen zum Client anstelle einer Lizenz zurück. Dies ist die Struktur einer typischen Anforderung:

<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
               xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <AcquireLicense xmlns="http://schemas.microsoft.com/DRM/2007/03/protocols">
            <challenge>
                <Challenge xmlns="http://schemas.microsoft.com/DRM/2007/03/protocols/messages">
                    <LA xmlns="http://schemas.microsoft.com/DRM/2007/03/protocols"
                        Id="SignedData" xml:space="preserve">
                        <Version>1</Version>
                        <ContentHeader>
                            <WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader"
                                       version="4.0.0.0">
                                <DATA>
                                    <PROTECTINFO>
                                        <KEYLEN>16</KEYLEN>
                                        <ALGID>AESCTR</ALGID>
                                    </PROTECTINFO>
                                    <KID>JpbjtvscoUq8vU7xq6eEOg==</KID>
                                    <LA_URL>http://test.playready.microsoft.com/service/rightsmanager.asmx</LA_URL>
                                    <LUI_URL>http://test.playready.microsoft.com/service/getrights.html</LUI_URL>
                                </DATA>
                            </WRMHEADER>
                        </ContentHeader>
                        <CLIENTINFO>
                            <CLIENTVERSION>10.0.16384.10011</CLIENTVERSION>
                        </CLIENTINFO>
                        <RevocationLists>
                            <RevListInfo>
                                <ListID>ioydTlK2p0WXkWklprR5Hw==</ListID>
                                <Version>11</Version>
                            </RevListInfo>
                            <!-- Additional revocation lists... -->
                        </RevocationLists>
                        <LicenseNonce>YCBas7tAUmkjOcabdD4DuQ==</LicenseNonce>
                        <ClientTime>1488568844</ClientTime>
                        <EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#"
                                       Type="http://www.w3.org/2001/04/xmlenc#Element">
                            <!-- Encrypted client data... -->
                        </EncryptedData>
                    </LA>
                    <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
                        <!-- Digital signature... -->
                    </Signature>
                </Challenge>
            </challenge>
        </AcquireLicense>
    </soap:Body>
</soap:Envelope>

Beispielantwort: Windows 10 Edge-Browser

Für eine Von Microsoft Edge unter Windows 10 ausgegebene Herausforderung:

Client Info:
    Client Version: 10.0.16384.10011
    Client Time: 10/01/2017 2:00:00 PM

Supported Features:
    Receiver
    AntiRollbackClock
    RevocationLists
    PlayReady3Features

Device Certificate Info (Cert 0):
    Platform: WindowsOnX86
    Type: Device
    SecurityLevel: 2000
    RobustnessVersion: 100925543
    DigestValue: 04+2aK5sjv+m5/EUY9BIMFqe0ResBkL9wfuFepWDU9E=
    IssuerKey: h/k8EU71zsgAqa0niR1TnpKDC6dyOEgUGjybc3+s/EnUJWpkMtOwygoyCPp1nuRCFDvfoaaI78kb2fqGBI0tWg==
    Binding Key Type: 3

Certificate Chain:

↳ Cert 1:
    ManufacturerName: Microsoft
    ModelName: Windows
    ModelNumber: 6.4.0.103
    DigestValue: LLp1fynIs9tgDxDDU+8jFveBoQp+0x8fXnqyV9tk1Zc=
    Platform: WindowsOnX86

    ↳ Cert 2:
        ManufacturerName: Microsoft
        ModelName: PlayReady SL2000 Device Port- Windows Lib Codebase Version CA
        ModelNumber: 1.0.0.4
        DigestValue: Y3C0kjOxz3h/njYBKeApsvfPscwLcV1qAiTfAXXSLw4=

        ↳ Cert 3:
            ManufacturerName: Microsoft
            ModelName: PlayReady SL2000 Device Port - Windows Platform CA for x86/amd64
            ModelNumber: 1.0.0.3
            DigestValue: L62pDo9+gkd6LoLDbQwgxwtYldcuhSEog7GcJwtJ3CE=

            ↳ Cert 4:
                ManufacturerName: Microsoft
                ModelName: PlayReady SL2000 Device Port + Link CA
                ModelNumber: 1.0.0.1
                DigestValue: 7Q8z1rSr8I3AGkcf0BNoDgwS46nO0wD5m0WvYfFoTWQ=

Beispielantwort: PlayReady 3.2 SL3000-Client

Für eine Herausforderung, die von einem playReady 3.2-basierten SL3000-Client ausgegeben wird:

Client Info:
    Client Version: 3.2.0.4242
    Client Time: 10/01/2017 2:00:00 PM

Supported Features:
    SecureClock
    RevocationLists
    Receiver
    Transmitter
    PlayReady3Features

Device Certificate Info (Cert 0):
    Platform: OEM
    Type: Device
    SecurityLevel: 3000
    RobustnessVersion: 0
    ManufacturerName: Contoso
    ModelName: Cool Device Name
    ModelNumber: Cool Device Name
    DigestValue: IOSxDmGiRlX+dUf62sohHj/IB0qRKSkV7wz7sbZ3HSo=
    IssuerKey: UlT6XXcgAMzaVAJN9JLJVomCFwppjoqgMMcT748yX27D053iiEP69pjEBnTxWiSEVXj76/e2wDImTgQDtbLTVg==
    Binding Key Type: 3

Certificate Chain:

↳ Cert 1:
    ManufacturerName: Contoso
    ModelName: Cool Device Name
    ModelNumber: ABC-XYZ-123
    DigestValue: rmnxSlpuh9WTlXa6ACLcSJDnPVtoS5/2P1wa/kEgs1M=

    ↳ Cert 2:
        ManufacturerName: Contoso
        DigestValue: 5H3YVzR9EhHVnsseOJmO/ZCrX10Z8bOx9PDhKOhrxe4=

        ↳ Cert 3:
            ManufacturerName: Microsoft
            ModelName: PlayReady SL3000 Device Port + Link CA
            ModelNumber: 1.0.0.1
            DigestValue: bk7YOJRioSgnzjpZgLasowaL96LFIBHDx6B0z+JoDPE=

Clientinformationselemente

Grundlegende Clientinformationen

Feld BESCHREIBUNG Beispielwerte
Clientversion PlayReady-Clientversion 10.0.16384.10011, 3.2.0.4242
Clientzeit Clientsystemzeit 10/01/2017 2:00:00 PM
Plattform Clientplattform-ID WindowsOnX86, OEM

Unterstützte Features

Merkmal BESCHREIBUNG
Empfänger- Client kann Inhalte empfangen und entschlüsseln
Sender Der Client kann Inhalte an andere Geräte übertragen.
AntiRollbackClock Client unterstützt Antirollbackuhrfunktionen
RevocationLists Client unterstützt die Verarbeitung von Sperrlisten
PlayReady3Features Client unterstützt PlayReady 3.0+-Features
SecureClock Client unterstützt sichere Uhrfunktionen

Informationen zur Sicherheitsstufe

Sicherheitsstufe BESCHREIBUNG Anwendungsfälle
SL150 Softwarebasierter Schutz Grundlegender Inhaltsschutz
SL2000 Hardwarebasierter Schutz Standard Premium-Inhalte
SL3000 Hardwaresicherheitsmodul Ultra-Premium-Inhalte

Zertifikatketteninformationen

Jedes Zertifikat in der Kette bietet Folgendes:

  • ManufacturerName - Gerätehersteller
  • ModelName – Gerätemodellbezeichner
  • ModelNumber – Bestimmte Modellversion
  • DigestValue – Zertifikatfingerabdrücke
  • Plattform – Hardwareplattformtyp

Testszenarien

Erkennung von Clientfunktionen

async function detectClientCapabilities() {
    const clientInfoUrl = 'http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(msg:clientinfo)';
    
    try {
        const response = await sendLicenseRequest(clientInfoUrl);
        const clientInfo = parseClientInfoResponse(response);
        
        return {
            version: clientInfo.clientVersion,
            securityLevel: clientInfo.deviceCert.securityLevel,
            features: clientInfo.supportedFeatures,
            platform: clientInfo.deviceCert.platform,
            manufacturer: clientInfo.certificateChain[0].manufacturerName
        };
    } catch (error) {
        console.error('Failed to detect client capabilities:', error);
        return null;
    }
}

Überprüfung auf Sicherheitsebene

async function validateSecurityLevel(requiredLevel) {
    const clientInfo = await detectClientCapabilities();
    
    if (!clientInfo) {
        return { valid: false, reason: 'Could not detect client capabilities' };
    }
    
    const clientLevel = parseInt(clientInfo.securityLevel);
    const required = parseInt(requiredLevel);
    
    return {
        valid: clientLevel >= required,
        clientLevel: clientLevel,
        requiredLevel: required,
        reason: clientLevel >= required ? 'Security level sufficient' : 'Security level insufficient'
    };
}

Featurekompatibilitätstests

async function testFeatureCompatibility(requiredFeatures) {
    const clientInfo = await detectClientCapabilities();
    
    if (!clientInfo) {
        return { compatible: false, reason: 'Could not detect client features' };
    }
    
    const missingFeatures = requiredFeatures.filter(
        feature => !clientInfo.features.includes(feature)
    );
    
    return {
        compatible: missingFeatures.length === 0,
        supportedFeatures: clientInfo.features,
        missingFeatures: missingFeatures,
        requiredFeatures: requiredFeatures
    };
}

Lizenzserverimplementierung

Verwenden von Clientinformationen für Lizenzentscheidungen

public class ClientInfoBasedLicenseHandler
{
    public LicenseResponse GenerateLicense(LicenseRequest request)
    {
        var clientInfo = ExtractClientInfo(request.Challenge);
        
        // Determine security level
        var securityLevel = GetSecurityLevel(clientInfo);
        
        // Check feature support
        var supportedFeatures = GetSupportedFeatures(clientInfo);
        
        // Build license based on client capabilities
        var license = new LicenseBuilder()
            .WithSecurityLevel(securityLevel)
            .WithFeatures(supportedFeatures)
            .WithOutputProtections(GetOutputProtections(securityLevel))
            .Build();
            
        return new LicenseResponse(license);
    }
    
    private SecurityLevel GetSecurityLevel(ClientInfo clientInfo)
    {
        switch (clientInfo.DeviceCertificate.SecurityLevel)
        {
            case 3000:
                return SecurityLevel.SL3000;
            case 2000:
                return SecurityLevel.SL2000;
            default:
                return SecurityLevel.SL150;
        }
    }
    
    private List<string> GetSupportedFeatures(ClientInfo clientInfo)
    {
        var features = new List<string>();
        
        if (clientInfo.SupportedFeatures.Contains("PlayReady3Features"))
        {
            features.Add("AdvancedOutputProtection");
            features.Add("SecureStop");
        }
        
        if (clientInfo.SupportedFeatures.Contains("SecureClock"))
        {
            features.Add("AntiRollback");
        }
        
        return features;
    }
}

Platform-Specific Lizenzlogik

public OutputProtectionLevels DetermineOutputProtections(ClientInfo clientInfo)
{
    var protections = new OutputProtectionLevels();
    
    // Adjust based on platform
    switch (clientInfo.Platform.ToLower())
    {
        case "windowsonx86":
        case "windowsonx64":
            protections.CompressedDigitalVideo = 270;
            protections.UncompressedDigitalVideo = 270;
            break;
            
        case "oem":
            // Custom OEM device - check manufacturer
            if (IsHighSecurityOEM(clientInfo.ManufacturerName))
            {
                protections.CompressedDigitalVideo = 270;
                protections.UncompressedDigitalVideo = 270;
            }
            else
            {
                protections.CompressedDigitalVideo = 200;
                protections.UncompressedDigitalVideo = 200;
            }
            break;
            
        default:
            // Conservative defaults for unknown platforms
            protections.CompressedDigitalVideo = 150;
            protections.UncompressedDigitalVideo = 150;
            break;
    }
    
    return protections;
}

Clientinformationsanalyse

Windows-Plattformanalyse

Windows 10 Edge-Clientmerkmale:

  • Bahnsteig: WindowsOnX86
  • Sicherheitsstufe: 2000 (SL2000)
  • Robuste Version: Hardwarespezifischer Wert
  • Zertifikatkette: von Microsoft ausgestellte Zertifikate
  • Features: Standardmäßiger PlayReady 3.0-Featuresatz

OEM-Geräteanalyse

Benutzerdefinierte OEM-Clientmerkmale:

  • Bahnsteig: OEM
  • Sicherheitsstufe: 3000 (SL3000)
  • Hersteller: Benutzerdefinierter OEM-Name
  • Zertifikatkette: OEM + Microsoft-Zertifikate
  • Features: Erweiterte PlayReady 3.0+-Features

Bewährte Methoden

Clientinformationsnutzung

  1. Überprüfung auf Sicherheitsstufe – Überprüfen, ob der Client die Anforderungen an die Inhaltssicherheit erfüllt
  2. Featureerkennung – Anpassen der Lizenz basierend auf unterstützten Features
  3. Plattformoptimierung – Optimieren von Einstellungen für bestimmte Plattformen
  4. Zertifikatüberprüfung – Überprüfen der Integrität der Zertifikatkette
  5. Funktionsabgleich – Abgleichen von Inhaltsanforderungen an Clientfunktionen

Strategie für die Lizenzgenerierung

  1. Konservative Standardwerte – Sichere Standardwerte für unbekannte Clients verwenden
  2. Progressive Erweiterung – Hinzufügen von Features basierend auf Clientfunktionen
  3. Sicherheit zuerst – Priorisieren der Sicherheit gegenüber Funktionen
  4. Plattformbewusstsein – Berücksichtigen plattformspezifischer Einschränkungen
  5. Zukünftige Kompatibilität – Design zur Vorwärtskompatibilität

Supportressourcen

Geschäftsabfragen

Operations-Abfragen

Technischer Support

Schulungsinformationen


© Microsoft Corporation. Alle Rechte vorbehalten. Handelsmarken | Privatsphäre