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
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" }.
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:
keygenAlgorithmdeğerinigenerateCertificateç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.generateCertificate çağrısı anından itibaren 30
gün sonra sona ereceği anlamına gelir.
keygenAlgorithmbir 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.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.
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.
normalizedKeygenAlgorithmdeğerini, işlem adıgenerateKeyveRTCPeerConnectioniçin sertifika üretimine özgü bir supportedAlgorithms değeri ile bir algoritmanın normalize edilmesi sonucunda elde et.
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.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.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.
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
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:
serialized.[[Expires]] değerinivalue.expiresözniteliğinin değeri olarak ayarla.serialized.[[Certificate]] değerinivalue.[[Certificate]]içindeki yapılandırılmamış ikili verilerin bir kopyası olarak ayarla.serialized.[[Origin]] değerinivalue.[[Origin]]içindeki yapılandırılmamış ikili verilerin bir kopyası olarak ayarla.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:
value.expiresözniteliğiniserialized.[[Expires]] değerini içerecek şekilde başlat.value.[[Certificate]]değeriniserialized.[[Certificate]] içindeki verilerin bir kopyası olarak ayarla.value.[[Origin]]değeriniserialized.[[Origin]] içindeki verilerin bir kopyası olarak ayarla.value.[[KeyingMaterialHandle]]değerini,serialized.[[KeyingMaterialHandle]] değerinin serileştirmeden çıkarılmasıyla elde edilen özel anahtar malzemesi tutamacı olarak ayarla.
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.