Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Обзор
Тестовый сервер PlayReady включает в себя специальную clientinfo функцию, которая отражает информацию, доступную серверу лицензирования, из запроса лицензии, созданного клиентом. Эта функция позволяет разработчикам легко изучить сведения о клиентах, передаваемые на серверы лицензий, и создать соответствующую логику создания лицензий на основе возможностей клиента. Обратите внимание, что ожидаемое поведение для тестового сервера PlayReady для ответа со строкой сбоя, указывающей, что это ошибка конкретного сервера (0x8004c604) с clientinfo данными в CustomData поле ответа на ошибку.
Функция сведений о клиенте
Используйте параметр для проверки сведений 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>https://test.playready.microsoft.com/service/rightsmanager.asmx</LA_URL>
<LUI_URL>https://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
Для вызова, выданного Microsoft Edge в Windows 10:
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
Для вызова, выданного клиентом SL3000 на основе PlayReady 3.2:
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.10011, 3.2.0.4242 |
| Время клиента | Время клиентской системы | 10/01/2017 2:00:00 PM |
| Платформа | Идентификатор клиентской платформы |
WindowsOnX86, OEM |
Поддерживаемые возможности
| Функция | Описание |
|---|---|
| приёмник | Клиент может получать и расшифровывать содержимое |
| Передатчик | Клиент может передавать содержимое другим устройствам |
| AntiRollbackClock | Клиент поддерживает функции защиты отката часов |
| Списки отзыва | Клиент поддерживает обработку списка отзыва |
| PlayReady3Features | Клиент поддерживает функции PlayReady 3.0+ |
| SecureClock | Клиент поддерживает безопасные функции часов |
Сведения о уровне безопасности
| Уровень безопасности | Описание | Варианты использования |
|---|---|---|
| SL150 | Защита на основе программного обеспечения | Базовая защита содержимого |
| SL2000 | Защита на основе оборудования | Содержимое уровня "Стандартный" категории "Премиум" |
| SL3000 | Аппаратный модуль безопасности | Содержимое категории "Премиум" |
Сведения о цепочке сертификатов
Каждый сертификат в цепочке предоставляет:
- 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) - Версия надежности: значение для конкретного оборудования
- Цепочка сертификатов: выданные корпорацией Майкрософт сертификаты
- Функции: стандартный набор функций PlayReady 3.0
Анализ устройств OEM
Пользовательские характеристики клиента OEM:
- Платформа:
OEM - Уровень безопасности:
3000(SL3000) - Производитель: Пользовательское имя OEM
- Цепочка сертификатов: OEM + Сертификаты Майкрософт
- Функции: Расширенные функции PlayReady 3.0+
Лучшие практики
Использование сведений о клиентах
- Проверка уровня безопасности . Проверка соответствия клиента требованиям к безопасности содержимого
- Обнаружение функций . Настройка лицензии на основе поддерживаемых функций
- Оптимизация платформы — оптимизация параметров для конкретных платформ
- Проверка сертификата — проверка целостности цепочки сертификатов
- Сопоставление возможностей . Соответствие требованиям к содержимому с клиентскими возможностями
Стратегия создания лицензий
- Консервативные значения по умолчанию— использование безопасных значений по умолчанию для неизвестных клиентов
- Прогрессивное улучшение . Добавление функций на основе возможностей клиента
- Безопасность в первую очередь — приоритет безопасности над функциями
- Осведомленность о платформе . Рассмотрите ограничения, связанные с платформой
- Будущая совместимость — проектирование для обеспечения совместимости вперед
Сопутствующая документация
- Служба тестового сервера PlayReady — функции основного тестового сервера
- Синтаксис строки запроса — справочник по синтаксису параметров
- Тестирование выходных данных — тестирование защиты выходных данных
- Тестовые серверы PlayReady — полная документация по серверу