Как добраться до nsISSLStatus?
Перелопатил XULPlanet, но так и не понял как добраться до SSL сертификата конкретного сайта. Кто-нибудь сталкивался с этой (SSL) штуковиной?
У nsIChannel есть поле securityInfo, на нем нужно выполнить QueryInterface(Components.interfaces.nsISSLStatusProvider). Ну а там поле SSLStatus, его нужно аналогично привести к nsISSLStatus.
Боюсь, что такие веще можно раскопать только в исходниках.
До меня потом дошло, что можно в кишках FF покопаться :-)
Уже нашел:
Уже нашел:
[...] const nsISSLStatusProvider = Components.interfaces.nsISSLStatusProvider; const nsISSLStatus = Components.interfaces.nsISSLStatus; var ui = getTopWin().gBrowser.securityUI; var sp = ui.QueryInterface(nsISSLStatusProvider); var status; if (sp) status = sp.SSLStatus; if (status) { status = status.QueryInterface(nsISSLStatus); var cert = status.serverCert; var issuerName = cert.issuerOrganization; if (issuerName == "RSA Data Security, Inc.") issuerName = "Verisign, Inc."; if (!issuerName) issuerName = cert.issuerName; var encryptionAlgorithm = status.cipherName; var encryptionStrength = status.secretKeyLength; var isBroken = (ui.state == Components.interfaces.nsIWebProgressListener.STATE_IS_BROKEN); [...]
При попытке добраться к сертификату в бинарном виде getRawDER столкнулся с проблемой - как создать объект типа PRUint32 в javaScript?
PRUint32 не объект — это просто число :)
Что касается в принципе out-параметров: поскольку в JavaScript функция не может менять значение параметров, то передавать надо объект, у которого будет присвоено свойство value:
var length = {}; var array = {}; cert.getRawDER(length, array); alert("Got array of length " + length + ": " + array);
Странно, length.value = 1145, но array.value = undefined, хотя в самом array лежит [object Object]. Как же достать содержимое array?
Действительно странно, надо будет потом попробовать...