В настоящее время я работаю над тем, чтобы правильно извлекать каждое содержимое в теме файла CSR. У меня есть рабочий фрагмент, но я застрял, когда у значений есть слэш/(например, контент CSR имеет OrganizationUnit = orgunit/testou) для значений. То, как я делаю, чтобы извлечь содержимое, - это использовать регулярное выражение, разбить его и нажать на него в хэше и вернуть его обратно в интерфейс. Смотрите ниже:Как строка манипулировать/извлекать содержимое объекта в CSR с помощью команды OpenSSL + Perl?
sub CSRDecode{
###########################################################################
################Do Your Validation#########################################
###########################################################################
my @returnInfo = `openssl req -in /opt2/myfiles/perllib/custom/OpenSSL/certreq.csr -text -noout` or die "Could not validate CSR";
my $Subj= `openssl req -in /opt2/myfiles/perllib/custom/OpenSSL/certreq.csr -subject -noout` or die "Could not validate CSR";
print $Subj;
print @returnInfo;
my $KeySize= @returnInfo[6];
my $SubjAltName =`openssl req -in /opt2/myfiles/perllib/custom/OpenSSL/certreq.csr -text -noout|grep -E 'email|DNS'`; #or die "Could not get SAN";
$KeySize=~s/^\s+|\s+$//g;
$KeySize=~/(.+?)/;
$Subj =~ s/^\s+|\s+$//g;
print $Subj;
$SubjAltName=~ s/^\s+|\s+$//g;
my %CSRInfo=split/[=\/]/,$Subj;
if(%CSRInfo){
%CSRInfo->{SubjAltName}.=$SubjAltName;
%CSRInfo->{keysize}.=$KeySize;
}
print Dumper \%CSRInfo;
#######################################################################
Вход: CSR Файл с Subject похожее на это:
subject=/O=ABCCommon/OU=abcfoundation/ops1/[email protected]/L=NYC/ST=AMER/C=AMER/CN=commonName
Ожидаемый результат после экстракции (HASH) - Обратите внимание на содержание подразделений, которое имеет "/"
$VAR1 = {
'CN' => 'commonName',
'keysize' => 'RSA Public Key: (2048 bit)',
'SubjAltName' => 'DNS:[email protected], IP Address:192.168.1.1',
'ST' => 'AMER',
'O' => 'ABCCommon',
'emailAddress' => '[email protected]',
'subject' => '',
'OU' => 'abcfoundation/ops1',
'C' => 'AMER',
'L' => 'NYC'
};
В настоящее время выход жонглирует, ause Я думаю, что регулярное выражение неправильно обрабатывает «split». Я имею в виду my %CSRInfo=split/[=\/]/,$Subj;
в фрагменте кода. У меня могут быть некоторые проблемы в моем регулярном выражении, и я ценю вашу помощь, спасибо!
Я думаю, что здесь может быть полезен пример ввода/вывода, поскольку мы не можем запустить команду 'openssl'. – Sobrique
Поскольку вы не используете ни одну из переменных, которые могут содержать '/' в шаблоне регулярного выражения, это не проблема. Только если вы сделали '$ foo = ~ m/$ has_slash /', он будет интерпретироваться как часть шаблона. Для этого вы будете использовать 'quotemeta'. Но вам это не нужно. – simbabque
@Sobrique Я добавил вход и ожидал. Я застрял в этом, поскольку я только полагаюсь на строку, манипулирующую предмет, извлеченный в CSR. – macjop