В ЭЦП данные о её владельце и изготовителе хранятся в виде
Distinguished Names (DN).
Например:
CN=БЛОГОВ БЛОГ,SURNAME=БЛОГОВ,SERIALNUMBER=IIN123456789012,C=KZ,L=АСТАНА,S=АСТАНА,G=БЛОГОВИЧ,O=ТОО \"Рога\, копыта 24\\7\",OU=BIN000111222333
Атрибуты отделяются между собой запятыми, каждый атрибут представляет из себя ключ и значение, разделенные символом равно (
=). Так же некоторые символы экранируются, например:
\" \,
Предлагаю следующую функцию, которая принимает строку в формате DN и возвращается объект с соответствующими полями и значениями (я использовал angular'овский цикл, но можно заменить на обычный).
function parseDN(value){
var parts = value
.replace(/\\,/g,'')
.replace(/,/g,'')
.replace(//g,',')
.replace(/\\\\/g,'')
.replace(/\\/g,'')
.replace(//g,'\\')
.split('');
var map = {};
angular.forEach(parts, function(part){
var split = part.split('=');
map[split[0]] = split[1];
});
return map;
}
Пример использования:
var map = parseDN("YOUR_DN_STRING");
console.log(map.CN);
console.log(map.SERIALNUMBER);
console.log(map.O);