← WebRTC 1.0 Spesifikasyonu

Eşler Arası Bağlantılar

W3C WebRTC 1.0 Spesifikasyonu — Türkçe Çeviri

4. Eşler arası bağlantılar

4.9 Sertifika Yönetimi

RTCPeerConnection örneklerinin eşlerle kimlik doğrulamak için kullandığı sertifikalar RTCCertificate arayüzünü kullanır. Bu nesneler, uygulamalar tarafından generateCertificate yöntemi kullanılarak açıkça üretilebilir ve yeni bir RTCPeerConnection örneği oluşturulurken RTCConfiguration içinde sağlanabilir.

Burada sağlanan açık sertifika yönetimi işlevleri isteğe bağlıdır. Bir uygulama RTCPeerConnection oluştururken certificates yapılandırma seçeneğini sağlamazsa, kullanıcı aracısı tarafından yeni bir sertifika kümesi MUST üretilmelidir. Bu küme, P-256 eğrisi üzerinde özel anahtara sahip bir ECDSA sertifikası ve SHA-256 karma ile bir imza MUST içermelidir.

WebIDLpartial interface RTCPeerConnection {
                          static Promise<RTCCertificate>
                              generateCertificate(AlgorithmIdentifier keygenAlgorithm);
                        };

Yöntemler

generateCertificate · statik

generateCertificate işlevi, kullanıcı aracısının bir X.509 sertifikası [X509V3] ve buna karşılık gelen bir özel anahtar oluşturmasına neden olur. Bilgilere bir tutamaç, RTCCertificate arayüzü biçiminde sağlanır. Döndürülen RTCCertificate, RTCPeerConnection tarafından kurulan DTLS oturumlarında sunulan sertifikayı denetlemek için kullanılabilir.

keygenAlgorithm bağımsız değişkeni, sertifikayla ilişkili özel anahtarın nasıl

üretileceğini denetlemek için kullanılır. keygenAlgorithm bağımsız değişkeni, WebCrypto [WebCryptoAPI] AlgorithmIdentifier türünü kullanır.

Aşağıdaki değerler bir kullanıcı aracısı tarafından MUST desteklenmelidir: { name: "RSASSA-PKCS1-v1_5", modulusLength: 2048, publicExponent: new Uint8Array([1, 0, 1]), hash: "SHA-256" } ve { name: "ECDSA", namedCurve: "P-256" }.

Bir kullanıcı aracısının kabul edeceği küçük ya da hatta sabit bir değer kümesine sahip olması beklenir.

Bu süreçle üretilen sertifika ayrıca bir imza içerir. Bu imzanın geçerliliği yalnızca uyumluluk nedenleriyle önemlidir. RTCPeerConnection tarafından yalnızca açık anahtar ve ortaya çıkan sertifika parmak izi kullanılır; ancak sertifika düzgün biçimlendirilmişse kabul edilme olasılığı daha yüksektir. Sertifikayı imzalamak için kullanılan algoritma tarayıcı tarafından seçilir; bir karma algoritması gerekiyorsa tarayıcının SHA-256 [FIPS-180-4] seçmesi tavsiye edilir (SHOULD).

Ortaya çıkan sertifika, bir kullanıcıya veya kullanıcı aracısına bağlanabilecek bilgiler MUST NOT içermelidir. Ayırt edici ad ve seri numarası için rastgeleleştirilmiş değerlerin kullanılması tavsiye edilir (SHOULD).

Yöntem çağrıldığında, kullanıcı aracısı aşağıdaki adımları MUST yürütmelidir:

  1. keygenAlgorithm değerini generateCertificate çağrısının ilk bağımsız değişkeni olarak al.
  • expires değerini 2592000000 (30\24\60\60\1000) olarak ayarla.
  • Bu, sertifikanın varsayılan olarak generateCertificate çağrısı anından itibaren 30 gün sonra sona ereceği anlamına gelir.
    1. keygenAlgorithm bir nesne ise, aşağıdaki adımları yürüt:
  • certificateExpiration değerini, keygenAlgorithm tarafından temsil edilen ECMAScript nesnesinin bir RTCCertificateExpiration sözlüğüne dönüştürülmesi sonucunda elde edilen değer olarak al.
  • Dönüştürme işlemi bir error ile başarısız olursa, error ile reddedilen bir promise döndür.
  • certificateExpiration.expires değeri undefined değilse, expires değerini certificateExpiration.expires olarak ayarla.
  • expires değeri 31536000000’den büyükse, expires değerini 31536000000 olarak ayarla.
  • Bu, sertifikanın generateCertificate çağrısı anından itibaren 365 günden daha uzun süre geçerli olamayacağı anlamına gelir.

    Bir kullanıcı aracısı expires değerini daha da sınırlandırabilir.

    1. normalizedKeygenAlgorithm değerini, işlem adı generateKey ve RTCPeerConnection için sertifika üretimine özgü bir supportedAlgorithms değeri ile bir algoritmanın normalize edilmesi sonucunda elde et.
  • Yukarıdaki normalize etme adımı bir error ile başarısız olursa, error ile reddedilen bir promise döndür.
  • normalizedKeygenAlgorithm parametresi, kullanıcı aracısının RTCPeerConnection için sertifika üretmekte kullanamayacağı ya da kullanmak istemediği bir algoritmayı tanımlıyorsa, NotSupportedError türünde bir DOMException ile reddedilen bir promise döndür. Özellikle, normalizedKeygenAlgorithm, DTLS bağlantılarını doğrulamak için kullanılan bir imza üretebilen asimetrik bir algoritma MUST olmalıdır.
  • p adında yeni bir promise oluştur.
  • Aşağıdaki adımları paralel olarak yürüt:
  • normalizedKeygenAlgorithm tarafından belirtilen anahtar üretme işlemini keygenAlgorithm kullanarak gerçekleştir.
  • generatedKeyingMaterial ve generatedKeyCertificate değerlerini, yukarıdaki adımda üretilen özel anahtar malzemesi ve sertifika olarak al.
  • Yeni bir RTCCertificate nesnesi oluştur.
  • certificate.[[Expires]] değerini, geçerli zaman artı expires değeri olarak ayarla.
  • certificate.[[Origin]] değerini, ilgili ayarlar nesnesinin origin’i olarak ayarla.
  • generatedKeyingMaterial değerini güvenli bir modülde sakla ve buna bir başvuru tanımlayıcısı olan handle değerini al.
  • certificate.[[KeyingMaterialHandle]] değerini handle olarak ayarla.
  • certificate.[[Certificate]] değerini generatedCertificate olarak ayarla.
  • Geçerli realm’in global nesnesini global olarak alarak, ağ görev kaynağında küresel bir görev kuyruğa al ve p promise’ini certificate ile çöz.
  • p değerini döndür.
  • 4.9.1 RTCCertificateExpiration Sözlüğü

    RTCCertificateExpiration, generateCertificate tarafından üretilen sertifikalar için bir sona erme tarihi ayarlamak amacıyla kullanılır.

    WebIDLdictionary RTCCertificateExpiration {
                              [EnforceRange] unsigned long long expires;
                            };
    expires · unsigned long long türünde

    generateCertificate yöntemine geçirilen algoritmanın tanımına isteğe bağlı bir expires özniteliği eklenebilir (MAY). Bu parametre mevcutsa, sertifikanın oluşturulduğu andan itibaren RTCCertificate nesnesinin geçerli olacağı maksimum süreyi milisaniye cinsinden belirtir.

    4.9.2 RTCCertificate Arayüzü

    RTCCertificate arayüzü, WebRTC iletişimlerini doğrulamak için kullanılan bir sertifikayı temsil eder. Görünür özelliklere ek olarak, iç yuvalar üretilmiş özel anahtar malzemesine bir tutamaç ([[KeyingMaterialHandle]]), RTCPeerConnection tarafından bir eşle kimlik doğrulamak için kullanılan bir sertifika ([[Certificate]]) ve nesneyi oluşturan origin’i ([[Origin]]) içerir.

    WebIDL[Exposed=Window, Serializable]
                            interface RTCCertificate {
                              readonly attribute EpochTimeStamp expires;
                              sequence<RTCDtlsFingerprint> getFingerprints();
                            };

    Öznitelikler

    expires · EpochTimeStamp türünde · salt okunur

    expires özniteliği, tarayıcı tarafından sertifikanın geçersiz kabul edileceği 1970-01-01T00:00:00Z zamanına göre milisaniye cinsinden tarih ve saati belirtir. Bu zamandan sonra, bu sertifika kullanılarak bir RTCPeerConnection oluşturmaya yönelik girişimler başarısız olur.

    Bu değerin, sertifikanın kendisindeki notAfter parametresine yansıtılmayabileceğini

    unutmayın.

    Yöntemler

    getFingerprints

    Sertifika parmak izlerinin listesini döndürür; bunlardan biri sertifika imzasında kullanılan özet (digest) algoritmasıyla hesaplanır.

    Bu API’nin amaçları doğrultusunda, [[Certificate]] yuvası yapılandırılmamış ikili veriler içerir. Uygulamaların [[KeyingMaterialHandle]] iç yuvasına veya onun başvurduğu anahtar malzemesine erişmesi için herhangi bir mekanizma sağlanmaz. Uygulamaların, [[KeyingMaterialHandle]] tarafından başvurulan anahtar malzemesini de koruyacak şekilde RTCCertificate nesnelerini kalıcı depolamadan saklama ve geri alma işlemlerini MUST desteklemesi gerekir. Ayrıca uygulamaların hassas anahtar malzemesini, aynı süreç içi bellek saldırılarına karşı güvenli bir modülde saklaması tavsiye edilir (SHOULD). Bu, özel anahtarın saklanmasına ve kullanılmasına olanak tanır, ancak bir bellek saldırısı kullanılarak kolayca okunmasını engeller.

    RTCCertificate nesneleri serileştirilebilir nesnelerdir [HTML]. value ve serialized verildiğinde serileştirme adımları şöyledir:

    1. serialized.[[Expires]] değerini value.expires özniteliğinin değeri olarak ayarla.
    2. serialized.[[Certificate]] değerini value.[[Certificate]] içindeki yapılandırılmamış ikili verilerin bir kopyası olarak ayarla.
    3. serialized.[[Origin]] değerini value.[[Origin]] içindeki yapılandırılmamış ikili verilerin bir kopyası olarak ayarla.
    4. serialized.[[KeyingMaterialHandle]] değerini, value.[[KeyingMaterialHandle]] içindeki tutamacın serileştirilmiş hâli olarak ayarla (özel anahtar malzemesinin kendisi değil).

    serialized ve value verildiğinde serileştirmeden çıkarma adımları şöyledir:

    1. value.expires özniteliğini serialized.[[Expires]] değerini içerecek şekilde başlat.
    2. value.[[Certificate]] değerini serialized.[[Certificate]] içindeki verilerin bir kopyası olarak ayarla.
    3. value.[[Origin]] değerini serialized.[[Origin]] içindeki verilerin bir kopyası olarak ayarla.
    4. value.[[KeyingMaterialHandle]] değerini, serialized.[[KeyingMaterialHandle]] değerinin serileştirmeden çıkarılmasıyla elde edilen özel anahtar malzemesi tutamacı olarak ayarla.
    Bu şekilde yapılandırılmış klonlamanın desteklenmesi, RTCCertificate örneklerinin depolara kalıcı olarak yazılmasına olanak tanır. Ayrıca örneklerin postMessage(message, options) gibi API’ler kullanılarak diğer origin’lere aktarılmasını sağlar [html]. Ancak nesne, onu başlangıçta oluşturan origin dışında herhangi bir origin tarafından kullanılamaz.