次の方法で共有


クライアント情報のテスト

概要

PlayReady テスト サーバーには、クライアントによって生成されたライセンス要求チャレンジからライセンス サーバーで使用できる情報を反映する特別な clientinfo 機能が含まれています。 この機能を使用すると、開発者はライセンス サーバーに送信されるクライアント情報を簡単に確認し、クライアント機能に基づいて適切なライセンス生成ロジックを構築できます。

クライアント情報機能

clientinfo パラメーターを使用して、ライセンス要求で送信されたクライアント情報を検査します。

テスト サーバーの URL:

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

SOAP アクション:

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

要求構造のサンプル

クライアント情報機能は、標準の PlayReady ライセンス取得要求を処理し、ライセンスではなくクライアントに関する詳細情報を返します。 一般的な要求の構造を次に示します。

<?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>

応答の例: Windows 10 Edge ブラウザー

Windows 10 で Microsoft Edge によって発行されたチャレンジの場合:

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=

応答の例: PlayReady 3.2 SL3000 クライアント

PlayReady 3.2 ベースの SL3000 クライアントによって発行されたチャレンジの場合:

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=

クライアント情報要素

基本的なクライアント情報

フィールド 説明 値の例
クライアント バージョン PlayReady クライアントのバージョン 10.0.16384.100113.2.0.4242
クライアント時間 クライアント システム時刻 10/01/2017 2:00:00 PM
プラットフォーム クライアント プラットフォーム識別子 WindowsOnX86OEM

サポートされている機能

特徴 説明
レシーバー クライアントはコンテンツの受信と暗号化解除を行うことができます
トランスミッター クライアントは他のデバイスにコンテンツを送信できます
AntiRollbackClock クライアントはロールバック防止クロック機能をサポートしています
RevocationLists クライアントは失効リストの処理をサポートしています
PlayReady3Features クライアントは PlayReady 3.0 以降の機能をサポートしています
SecureClock クライアントは、セキュリティで保護されたクロック機能をサポートしています

セキュリティ レベル情報

セキュリティ レベル 説明 使用例
SL150 ソフトウェア ベースの保護 基本的なコンテンツ保護
SL2000 ハードウェア ベースの保護 Standard Premium コンテンツ
SL3000 ハードウェア セキュリティ モジュール Ultra-Premium コンテンツ

証明書チェーン情報

チェーン内の各証明書には、次のものが用意されています。

  • ManufacturerName - デバイスの製造元
  • ModelName - デバイス モデル識別子
  • ModelNumber - 特定のモデル バージョン
  • DigestValue - 証明書のフィンガープリント
  • プラットフォーム - ハードウェア プラットフォームの種類

テスト シナリオ

クライアント機能の検出

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;
    }
}

セキュリティ レベルの検証

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'
    };
}

機能互換性テスト

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
    };
}

ライセンス サーバーの実装

ライセンス決定のためのクライアント情報の使用

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 ライセンス ロジック

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;
}

クライアント情報分析

Windows プラットフォーム分析

Windows 10 Edge クライアントの特性:

  • プラットホーム: WindowsOnX86
  • セキュリティ レベル: 2000 (SL2000)
  • 堅牢性バージョン: ハードウェア固有の値
  • 証明書チェーン: Microsoft が発行した証明書
  • 機能: Standard PlayReady 3.0 機能セット

OEM デバイス分析

カスタム OEM クライアントの特性:

  • プラットホーム: OEM
  • セキュリティ レベル: 3000 (SL3000)
  • 製造元: カスタム OEM 名
  • 証明書チェーン: OEM + Microsoft 証明書
  • 機能: 高度な PlayReady 3.0 以降の機能

ベスト プラクティス

クライアント情報の使用状況

  1. セキュリティ レベルの検証 - クライアントがコンテンツのセキュリティ要件を満たしていることを確認する
  2. 機能検出 - サポートされている機能に基づいてライセンスを調整する
  3. プラットフォームの最適化 - 特定のプラットフォームの設定を最適化する
  4. 証明書の検証 - 証明書チェーンの整合性を確認する
  5. 機能の照合 - コンテンツ要件をクライアントの機能に一致させる

ライセンス生成戦略

  1. 保守的な既定値 - 不明なクライアントに安全な既定値を使用する
  2. プログレッシブエンハンスメント - クライアント機能に基づいて機能を追加する
  3. セキュリティ優先 - 機能よりもセキュリティに優先順位を付ける
  4. プラットフォーム認識 - プラットフォーム固有の制限事項を考慮する
  5. 将来の互換性 - 前方互換性のための設計

サポート リソース

ビジネス クエリ

操作クエリ

テクニカル サポート

トレーニング情報


© Microsoft Corporation。 All rights reserved. 商標 | プライバシー