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