1e1051a39Sopenharmony_ci#! /usr/bin/env perl 2e1051a39Sopenharmony_ci# Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. 3e1051a39Sopenharmony_ci# 4e1051a39Sopenharmony_ci# Licensed under the Apache License 2.0 (the "License"). You may not use 5e1051a39Sopenharmony_ci# this file except in compliance with the License. You can obtain a copy 6e1051a39Sopenharmony_ci# in the file LICENSE in the source distribution or at 7e1051a39Sopenharmony_ci# https://www.openssl.org/source/license.html 8e1051a39Sopenharmony_ci 9e1051a39Sopenharmony_ciuse strict; 10e1051a39Sopenharmony_ciuse warnings; 11e1051a39Sopenharmony_ci 12e1051a39Sopenharmony_ciuse OpenSSL::Test qw/:DEFAULT with bldtop_file srctop_file cmdstr/; 13e1051a39Sopenharmony_ciuse OpenSSL::Test::Utils; 14e1051a39Sopenharmony_ci 15e1051a39Sopenharmony_cisetup("test_verify_store"); 16e1051a39Sopenharmony_ci 17e1051a39Sopenharmony_ciplan tests => 10; 18e1051a39Sopenharmony_ci 19e1051a39Sopenharmony_cimy $dummycnf = srctop_file("apps", "openssl.cnf"); 20e1051a39Sopenharmony_cimy $cakey = srctop_file("test", "certs", "ca-key.pem"); 21e1051a39Sopenharmony_cimy $ukey = srctop_file("test", "certs", "ee-key.pem"); 22e1051a39Sopenharmony_ci 23e1051a39Sopenharmony_cimy $cnf = srctop_file("test", "ca-and-certs.cnf"); 24e1051a39Sopenharmony_cimy $CAkey = "keyCA.ss"; 25e1051a39Sopenharmony_cimy $CAcert="certCA.ss"; 26e1051a39Sopenharmony_cimy $CAserial="certCA.srl"; 27e1051a39Sopenharmony_cimy $CAreq="reqCA.ss"; 28e1051a39Sopenharmony_cimy $CAreq2="req2CA.ss"; # temp 29e1051a39Sopenharmony_cimy $Ukey="keyU.ss"; 30e1051a39Sopenharmony_cimy $Ureq="reqU.ss"; 31e1051a39Sopenharmony_cimy $Ucert="certU.ss"; 32e1051a39Sopenharmony_ci 33e1051a39Sopenharmony_ciSKIP: { 34e1051a39Sopenharmony_ci req( 'make cert request', 35e1051a39Sopenharmony_ci qw(-new -section userreq), 36e1051a39Sopenharmony_ci -config => $cnf, 37e1051a39Sopenharmony_ci -out => $CAreq, 38e1051a39Sopenharmony_ci -key => $cakey, 39e1051a39Sopenharmony_ci -keyout => $CAkey ); 40e1051a39Sopenharmony_ci 41e1051a39Sopenharmony_ci skip 'failure', 8 unless 42e1051a39Sopenharmony_ci x509( 'convert request into self-signed cert', 43e1051a39Sopenharmony_ci qw(-req -CAcreateserial -days 30), 44e1051a39Sopenharmony_ci qw(-extensions v3_ca), 45e1051a39Sopenharmony_ci -in => $CAreq, 46e1051a39Sopenharmony_ci -out => $CAcert, 47e1051a39Sopenharmony_ci -signkey => $CAkey, 48e1051a39Sopenharmony_ci -extfile => $cnf ); 49e1051a39Sopenharmony_ci 50e1051a39Sopenharmony_ci skip 'failure', 7 unless 51e1051a39Sopenharmony_ci x509( 'convert cert into a cert request', 52e1051a39Sopenharmony_ci qw(-x509toreq), 53e1051a39Sopenharmony_ci -in => $CAcert, 54e1051a39Sopenharmony_ci -out => $CAreq2, 55e1051a39Sopenharmony_ci -signkey => $CAkey ); 56e1051a39Sopenharmony_ci 57e1051a39Sopenharmony_ci skip 'failure', 6 unless 58e1051a39Sopenharmony_ci req( 'verify request 1', 59e1051a39Sopenharmony_ci qw(-verify -noout -section userreq), 60e1051a39Sopenharmony_ci -config => $dummycnf, 61e1051a39Sopenharmony_ci -in => $CAreq ); 62e1051a39Sopenharmony_ci 63e1051a39Sopenharmony_ci skip 'failure', 5 unless 64e1051a39Sopenharmony_ci req( 'verify request 2', 65e1051a39Sopenharmony_ci qw(-verify -noout -section userreq), 66e1051a39Sopenharmony_ci -config => $dummycnf, 67e1051a39Sopenharmony_ci -in => $CAreq2 ); 68e1051a39Sopenharmony_ci 69e1051a39Sopenharmony_ci skip 'failure', 4 unless 70e1051a39Sopenharmony_ci verify( 'verify signature', 71e1051a39Sopenharmony_ci -CAstore => $CAcert, 72e1051a39Sopenharmony_ci $CAcert ); 73e1051a39Sopenharmony_ci 74e1051a39Sopenharmony_ci skip 'failure', 3 unless 75e1051a39Sopenharmony_ci req( 'make a user cert request', 76e1051a39Sopenharmony_ci qw(-new -section userreq), 77e1051a39Sopenharmony_ci -config => $cnf, 78e1051a39Sopenharmony_ci -out => $Ureq, 79e1051a39Sopenharmony_ci -key => $ukey, 80e1051a39Sopenharmony_ci -keyout => $Ukey ); 81e1051a39Sopenharmony_ci 82e1051a39Sopenharmony_ci skip 'failure', 2 unless 83e1051a39Sopenharmony_ci x509( 'sign user cert request', 84e1051a39Sopenharmony_ci qw(-req -CAcreateserial -days 30 -extensions v3_ee), 85e1051a39Sopenharmony_ci -in => $Ureq, 86e1051a39Sopenharmony_ci -out => $Ucert, 87e1051a39Sopenharmony_ci -CA => $CAcert, 88e1051a39Sopenharmony_ci -CAkey => $CAkey, 89e1051a39Sopenharmony_ci -CAserial => $CAserial, 90e1051a39Sopenharmony_ci -extfile => $cnf ) 91e1051a39Sopenharmony_ci && verify( undef, 92e1051a39Sopenharmony_ci -CAstore => $CAcert, 93e1051a39Sopenharmony_ci $Ucert ); 94e1051a39Sopenharmony_ci 95e1051a39Sopenharmony_ci skip 'failure', 0 unless 96e1051a39Sopenharmony_ci x509( 'Certificate details', 97e1051a39Sopenharmony_ci qw(-subject -issuer -startdate -enddate -noout), 98e1051a39Sopenharmony_ci -in => $Ucert ); 99e1051a39Sopenharmony_ci} 100e1051a39Sopenharmony_ci 101e1051a39Sopenharmony_cisub verify { 102e1051a39Sopenharmony_ci my $title = shift; 103e1051a39Sopenharmony_ci 104e1051a39Sopenharmony_ci ok(run(app([qw(openssl verify), @_])), $title); 105e1051a39Sopenharmony_ci} 106e1051a39Sopenharmony_ci 107e1051a39Sopenharmony_cisub req { 108e1051a39Sopenharmony_ci my $title = shift; 109e1051a39Sopenharmony_ci 110e1051a39Sopenharmony_ci ok(run(app([qw(openssl req), @_])), $title); 111e1051a39Sopenharmony_ci} 112e1051a39Sopenharmony_ci 113e1051a39Sopenharmony_cisub x509 { 114e1051a39Sopenharmony_ci my $title = shift; 115e1051a39Sopenharmony_ci 116e1051a39Sopenharmony_ci ok(run(app([qw(openssl x509), @_])), $title); 117e1051a39Sopenharmony_ci} 118