因为公司的业务原因,所以基本上全站都是使用https。然后又因为各种各样的问题造成有的域名不能使用通配符证书,只能使用单独的证书,这样就造成了网络配置上同一个应用要配置多个公网IP以便绑定不同的证书(很多浏览器不支持SNI,所以只能配置多个IP了)。今天简单写了一个脚本,测试了一下可以把某个机房全站应用的公网IP对于的证书都检查一遍。

脚本如下:

#!/usr/bin/env perl#===============================================================================##         FILE: comcheck.pl##        USAGE: perl comcheck.pl  host_list##  DESCRIPTION: test ssl cert##      OPTIONS: —# REQUIREMENTS: —#         BUGS: —#        NOTES: —#       AUTHOR: @GNUer

);

if ( !( ref $sock eq "IO::Socket::SSL" ) ) {print "connect $hostname failed\n";
return 1;
}if ( $sock->verify_hostname( $hostname, ‘http’ ) ) {print "$hostname verification ok\n";
return 0;
}else {print STDERR "$hostname verify failed\n";
}my $comname = $sock->peer_certificate("commonName");
my $tname   = $hostname;
my $tcom    = $comname;
$tname =~ s/\.xxx.com//g;
$tcom  =~ s/\.xxx.com//g;
if ( $tcom eq "*" &&
$tname !~ /\./ ) {;
print "$hostname $comname\n";
}elsif ( $tname eq $tcom ) {;
    #        print "$hostname eq $comname\n";
}else {

}

sub help() {print "perl comcheck.pl hostlist\n";
exit 0;
}
输入文件的格式如下:
12.75.123.70 app1.xxx.com #appxxx12.75.123.20 app2.xxx.com #appxxx12.75.123.76 app3.xxx.com #appxxx12.75.123.42 app41.xxx.com app42.xxx.com air.xxx.com #appxxx12.75.123.43 app5xxx.com #appxxx
如果只看错误的话可以
```bash
perl certcheck.pl host >/dev/null