Xpoint
   [напомнить пароль]

Как добраться до nsISSLStatus?

2006-06-08 19:35:25 [обр] KML [досье]
Перелопатил XULPlanet, но так и не понял как добраться до SSL сертификата конкретного сайта. Кто-нибудь сталкивался с этой (SSL) штуковиной?
спустя 45 минут [обр] Владимир Палант [досье]

У nsIChannel есть поле securityInfo, на нем нужно выполнить QueryInterface(Components.interfaces.nsISSLStatusProvider). Ну а там поле SSLStatus, его нужно аналогично привести к nsISSLStatus.

Боюсь, что такие веще можно раскопать только в исходниках.

спустя 6 минут [обр] KML [досье]
До меня потом дошло, что можно в кишках 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);
[...]
спустя 19 часов [обр] KML [досье]
При попытке добраться к сертификату в бинарном виде getRawDER столкнулся с проблемой - как создать объект типа PRUint32 в javaScript?
спустя 1 час 50 минут [обр] Владимир Палант [досье]

PRUint32 не объект — это просто число :)

Что касается в принципе out-параметров: поскольку в JavaScript функция не может менять значение параметров, то передавать надо объект, у которого будет присвоено свойство value:

var length = {};
var array = {};
cert.getRawDER(length, array);
alert("Got array of length " + length + ": " + array);
спустя 30 минут [обр] KML [досье]
Странно, length.value = 1145, но array.value = undefined, хотя в самом array лежит [object Object]. Как же достать содержимое array?
спустя 2 часа 31 минуту [обр] Владимир Палант [досье]
Действительно странно, надо будет потом попробовать...
спустя 23 часа [обр] KML [досье]
Эти редиски c XULPlanet ошиблись в документации. На самом деле это работает так:
var length = {};
var derArray = cert.getRawDER(length);
var derString = '';
for (var i = 0; i < derArray.length; i++) {
    derString = derString + String.fromCharCode(derArray[i]);
}
Powered by POEM™ Engine Copyright © 2002-2005