Skip to content

Commit

Permalink
[backend] make certinfo less confusing
Browse files Browse the repository at this point in the history
We used to report the subkect keyid as fingerprint, but that clashes
with openssl's certificate fingerprint. We now report both the
keyid and the cert fingerprint.
  • Loading branch information
mlschroe committed Sep 27, 2022
1 parent 2c41818 commit 99f2b61
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 7 deletions.
20 changes: 13 additions & 7 deletions src/backend/BSSrcServer/Signkey.pm
Original file line number Diff line number Diff line change
Expand Up @@ -155,24 +155,24 @@ sub pubkeyinfo {
sub subjectpublickeyinfo {
my ($pk, $isder) = @_;
my ($algo, $curve, $keysize);
my $fingerprint;
my $keyid;
eval {
my $pku = $isder ? $pk : BSASN1::pem2der($pk, 'PUBLIC KEY');
my $d = BSX509::pubkey2keydata($pku);
$algo = $d->{'algo'} if $d->{'algo'};
$curve = $d->{'curve'} if $d->{'curve'};
$keysize = $d->{'keysize'} if $d->{'keysize'};
$fingerprint = unpack('H*', BSX509::generate_key_id($pku));
$keyid = unpack('H*', BSX509::generate_key_id($pku));
};
warn($@) if $@;
my $pubkey = {};
$pubkey->{'algo'} = $algo if $algo;
$pubkey->{'curve'} = $curve if $curve;
$pubkey->{'keysize'} = $keysize if $keysize;
if ($fingerprint) {
$fingerprint =~ s/(....)/$1 /g;
$fingerprint =~ s/ $//;
$pubkey->{'fingerprint'} = $fingerprint;
if ($keyid) {
$keyid =~ s/(....)/$1 /g;
$keyid =~ s/ $//;
$pubkey->{'keyid'} = $keyid;
}
return $pubkey;
}
Expand All @@ -188,9 +188,15 @@ sub certinfo {
$info->{'serial'} = length($serial) ? '0x' . unpack('H*', $serial) : '0x0';
($info->{'begins'}, $info->{'expires'}) = BSX509::unpack_validity($validity);
my $pkinfo = subjectpublickeyinfo($subjectkeyinfo, 1);
defined($pkinfo->{$_}) && ($info->{$_} = $pkinfo->{$_}) for qw{algo keysize fingerprint};
defined($pkinfo->{$_}) && ($info->{$_} = $pkinfo->{$_}) for qw{algo keysize keyid};
$info->{'subject'} = BSX509::dn2str($subject);
$info->{'issuer'} = BSX509::dn2str($issuer) if $issuer ne $subject;
my $fp = unpack('H*', BSX509::generate_cert_fingerprint($der));
if ($fp) {
$fp =~ s/(....)/$1 /g;
$fp =~ s/ $//;
$info->{'fingerprint'} = $fp;
}
};
warn($@) if $@;
return $info;
Expand Down
5 changes: 5 additions & 0 deletions src/backend/BSX509.pm
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,11 @@ sub generate_key_id {
return Digest::SHA::sha1(BSASN1::unpack_bytes($bits));
}

sub generate_cert_fingerprint {
my ($cert) = @_;
return Digest::SHA::sha1($cert);
}

my %oid2abbrev = (
$oid_common_name => 'CN',
$oid_country_name => 'C',
Expand Down
1 change: 1 addition & 0 deletions src/backend/BSXML.pm
Original file line number Diff line number Diff line change
Expand Up @@ -2054,6 +2054,7 @@ our $certinfo = [
'begins',
'expires',
'fingerprint',
'keyid',
'_content',
];

Expand Down

0 comments on commit 99f2b61

Please sign in to comment.