icert_ondie_ca.sh 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #!/bin/sh
  2. # SPDX-License-Identifier: BSD-3-Clause
  3. usage() {
  4. cat <<EOF
  5. Splices ondie-CA intermediate certificate from DER encoding to PEM.
  6. Usage: $0 [options] FILE
  7. Options:
  8. -h print this help text.
  9. EOF
  10. exit 0
  11. }
  12. while getopts ":h" opt; do
  13. case $opt in
  14. h)
  15. usage
  16. ;;
  17. \?)
  18. echo "Invalid option: -$OPTARG" >&2
  19. exit 1
  20. ;;
  21. esac
  22. done
  23. if [ "$#" -ne 1 ]; then
  24. (>&2 echo "Error: expected 1 certificate file parameter, got: $#")
  25. exit 1
  26. fi
  27. hlen=4
  28. rlen=0
  29. i=0
  30. offset=0
  31. offset_str=""
  32. flen=$(stat --printf="%s" $1)
  33. while [ $offset -lt $flen ];do
  34. len=$(openssl asn1parse -in $1 -inform DER $offset_str | grep SEQUENCE | \
  35. head -1 | grep -o 'l= [0-9]\{1,\}' | grep -o '[0-9]\{1,\}')
  36. rlen=$(expr $hlen + $len)
  37. openssl asn1parse -in $1 -inform DER -length $rlen $offset_str -out $i.der \
  38. -noout
  39. openssl x509 -in $i.der -out $i.pem -inform DER -outform PEM
  40. rm $i.der
  41. offset=$(expr $offset + $rlen)
  42. offset_str="-offset $offset"
  43. i=$(expr $i + 1)
  44. done
  45. echo "Found $i intermediate certificates"