2015-07-06 3 views
1

Мне нужно было бы извлечь альтернативное имя субъекта из всей извлеченной информации CSR. Пример ниже:Как извлечь текст CSR между строкой с помощью Regex perl?

some text........ 
 
        c9:00:00:00:00:00:00:00:98:a3:22:4e:68:f0:44: 
 
        8a:ef 
 
       Exponent: 65537 (0x10001) 
 
     Attributes: 
 
     Requested Extensions: 
 
      X509v3 Subject Alternative Name: 
 
       DNS:DNSName1234, IP Address: 192.168.0.0 
 
    Signature Algorithm: sha1WithRSAEncryption 
 
     2e:00:0d:08:ea:04:12:de:58:88:f0:50:72:d5:b3:03:9d:14: 
 
     e9:d6:f2:75:4e:e1:64:57:0e:a8:61:as:55:2e:75:e7:72:0b: 
 
     3d:db:a8:49:68:9f:11:b7:5a:a6:6k:49:25:ed:bc:e2:00:00: 
 

 
some text...

я должен был бы извлечь DNS: DNSName1234, IP-адрес: 192.168.0.0 из образца текста выше. В основном то, что я имею в виду, чтобы получить x509v3 Subject Alternative Name: и Алгоритм подписи: sha1WithRSAEncryption как две строки и получить текст между

вот некоторые из моих сниппета:

my $SubjAltName = `openssl req -in /opt2/myfile/perllib/custom/OpenSSL/certreq.csr -text -noout`; #or die "Could not get SAN"; 

my $SANtxt = $SubjAltName =~ /X509v3 Subject Alternative Name:(.|\n)*? Signature Algorithm: sha1WithRSAEncryption/; 
print $SANtxt; 

Должен печатать DNS: DNSName1234, IP-адрес: 192.168.0.0. если их нет, то вывод пуст.

Цените вашу помощь, спасибо

ответ

0

Это извлечет ваше требование я разуметь, строка предопределена, так что нет необходимости в IP-адреса или проверки других настроек:

#!/usr/bin/perl 
use strict; 
use warnings; 

my $out= 'some text........ 
        c9:00:00:00:00:00:00:00:98:a3:22:4e:68:f0:44: 
        8a:ef 
       Exponent: 65537 (0x10001) 
     Attributes: 
     Requested Extensions: 
      X509v3 Subject Alternative Name: 
       DNS:DNSName1234, IP Address: 192.168.0.0 
    Signature Algorithm: sha1WithRSAEncryption 
     2e:00:0d:08:ea:04:12:de:58:88:f0:50:72:d5:b3:03:9d:14: 
     e9:d6:f2:75:4e:e1:64:57:0e:a8:61:as:55:2e:75:e7:72:0b: 
     3d:db:a8:49:68:9f:11:b7:5a:a6:6k:49:25:ed:bc:e2:00:00: 

some text...'; 

my ($string) =grep{/DNS:/}split(/\n/,$out); 
if($string){ 
$string=~s/^\s+|\s+$//g; 
} 
else{ 
$string = ' '; 
}; 
print "$string \n";#prints DNS:DNSName1234, IP Address: 192.168.0.0 
Смежные вопросы