openssl-asn1parse.1ossl 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. .\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42)
  2. .\"
  3. .\" Standard preamble:
  4. .\" ========================================================================
  5. .de Sp \" Vertical space (when we can't use .PP)
  6. .if t .sp .5v
  7. .if n .sp
  8. ..
  9. .de Vb \" Begin verbatim text
  10. .ft CW
  11. .nf
  12. .ne \\$1
  13. ..
  14. .de Ve \" End verbatim text
  15. .ft R
  16. .fi
  17. ..
  18. .\" Set up some character translations and predefined strings. \*(-- will
  19. .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
  20. .\" double quote, and \*(R" will give a right double quote. \*(C+ will
  21. .\" give a nicer C++. Capital omega is used to do unbreakable dashes and
  22. .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
  23. .\" nothing in troff, for use with C<>.
  24. .tr \(*W-
  25. .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
  26. .ie n \{\
  27. . ds -- \(*W-
  28. . ds PI pi
  29. . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
  30. . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
  31. . ds L" ""
  32. . ds R" ""
  33. . ds C` ""
  34. . ds C' ""
  35. 'br\}
  36. .el\{\
  37. . ds -- \|\(em\|
  38. . ds PI \(*p
  39. . ds L" ``
  40. . ds R" ''
  41. . ds C`
  42. . ds C'
  43. 'br\}
  44. .\"
  45. .\" Escape single quotes in literal strings from groff's Unicode transform.
  46. .ie \n(.g .ds Aq \(aq
  47. .el .ds Aq '
  48. .\"
  49. .\" If the F register is >0, we'll generate index entries on stderr for
  50. .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
  51. .\" entries marked with X<> in POD. Of course, you'll have to process the
  52. .\" output yourself in some meaningful fashion.
  53. .\"
  54. .\" Avoid warning from groff about undefined register 'F'.
  55. .de IX
  56. ..
  57. .nr rF 0
  58. .if \n(.g .if rF .nr rF 1
  59. .if (\n(rF:(\n(.g==0)) \{\
  60. . if \nF \{\
  61. . de IX
  62. . tm Index:\\$1\t\\n%\t"\\$2"
  63. ..
  64. . if !\nF==2 \{\
  65. . nr % 0
  66. . nr F 2
  67. . \}
  68. . \}
  69. .\}
  70. .rr rF
  71. .\"
  72. .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
  73. .\" Fear. Run. Save yourself. No user-serviceable parts.
  74. . \" fudge factors for nroff and troff
  75. .if n \{\
  76. . ds #H 0
  77. . ds #V .8m
  78. . ds #F .3m
  79. . ds #[ \f1
  80. . ds #] \fP
  81. .\}
  82. .if t \{\
  83. . ds #H ((1u-(\\\\n(.fu%2u))*.13m)
  84. . ds #V .6m
  85. . ds #F 0
  86. . ds #[ \&
  87. . ds #] \&
  88. .\}
  89. . \" simple accents for nroff and troff
  90. .if n \{\
  91. . ds ' \&
  92. . ds ` \&
  93. . ds ^ \&
  94. . ds , \&
  95. . ds ~ ~
  96. . ds /
  97. .\}
  98. .if t \{\
  99. . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
  100. . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
  101. . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
  102. . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
  103. . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
  104. . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
  105. .\}
  106. . \" troff and (daisy-wheel) nroff accents
  107. .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
  108. .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
  109. .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
  110. .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
  111. .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
  112. .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
  113. .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
  114. .ds ae a\h'-(\w'a'u*4/10)'e
  115. .ds Ae A\h'-(\w'A'u*4/10)'E
  116. . \" corrections for vroff
  117. .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
  118. .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
  119. . \" for low resolution devices (crt and lpr)
  120. .if \n(.H>23 .if \n(.V>19 \
  121. \{\
  122. . ds : e
  123. . ds 8 ss
  124. . ds o a
  125. . ds d- d\h'-1'\(ga
  126. . ds D- D\h'-1'\(hy
  127. . ds th \o'bp'
  128. . ds Th \o'LP'
  129. . ds ae ae
  130. . ds Ae AE
  131. .\}
  132. .rm #[ #] #H #V #F C
  133. .\" ========================================================================
  134. .\"
  135. .IX Title "OPENSSL-ASN1PARSE 1ossl"
  136. .TH OPENSSL-ASN1PARSE 1ossl "2025-06-29" "3.3.2" "OpenSSL"
  137. .\" For nroff, turn off justification. Always turn off hyphenation; it makes
  138. .\" way too many mistakes in technical documents.
  139. .if n .ad l
  140. .nh
  141. .SH "NAME"
  142. openssl\-asn1parse \- ASN.1 parsing command
  143. .SH "SYNOPSIS"
  144. .IX Header "SYNOPSIS"
  145. \&\fBopenssl\fR \fBasn1parse\fR
  146. [\fB\-help\fR]
  147. [\fB\-inform\fR \fB\s-1DER\s0\fR|\fB\s-1PEM\s0\fR|\fBB64\fR]
  148. [\fB\-in\fR \fIfilename\fR]
  149. [\fB\-out\fR \fIfilename\fR]
  150. [\fB\-noout\fR]
  151. [\fB\-offset\fR \fInumber\fR]
  152. [\fB\-length\fR \fInumber\fR]
  153. [\fB\-i\fR]
  154. [\fB\-oid\fR \fIfilename\fR]
  155. [\fB\-dump\fR]
  156. [\fB\-dlimit\fR \fInum\fR]
  157. [\fB\-strparse\fR \fIoffset\fR]
  158. [\fB\-genstr\fR \fIstring\fR]
  159. [\fB\-genconf\fR \fIfile\fR]
  160. [\fB\-strictpem\fR]
  161. [\fB\-item\fR \fIname\fR]
  162. .SH "DESCRIPTION"
  163. .IX Header "DESCRIPTION"
  164. This command is a diagnostic utility that can parse \s-1ASN.1\s0 structures.
  165. It can also be used to extract data from \s-1ASN.1\s0 formatted data.
  166. .SH "OPTIONS"
  167. .IX Header "OPTIONS"
  168. .IP "\fB\-help\fR" 4
  169. .IX Item "-help"
  170. Print out a usage message.
  171. .IP "\fB\-inform\fR \fB\s-1DER\s0\fR|\fB\s-1PEM\s0\fR|\fBB64\fR" 4
  172. .IX Item "-inform DER|PEM|B64"
  173. The input format; the default is \fB\s-1PEM\s0\fR.
  174. See \fBopenssl\-format\-options\fR\|(1) for details.
  175. .IP "\fB\-in\fR \fIfilename\fR" 4
  176. .IX Item "-in filename"
  177. The input file, default is standard input.
  178. .IP "\fB\-out\fR \fIfilename\fR" 4
  179. .IX Item "-out filename"
  180. Output file to place the \s-1DER\s0 encoded data into. If this
  181. option is not present then no data will be output. This is most useful when
  182. combined with the \fB\-strparse\fR option.
  183. .IP "\fB\-noout\fR" 4
  184. .IX Item "-noout"
  185. Don't output the parsed version of the input file.
  186. .IP "\fB\-offset\fR \fInumber\fR" 4
  187. .IX Item "-offset number"
  188. Starting offset to begin parsing, default is start of file.
  189. .IP "\fB\-length\fR \fInumber\fR" 4
  190. .IX Item "-length number"
  191. Number of bytes to parse, default is until end of file.
  192. .IP "\fB\-i\fR" 4
  193. .IX Item "-i"
  194. Indents the output according to the \*(L"depth\*(R" of the structures.
  195. .IP "\fB\-oid\fR \fIfilename\fR" 4
  196. .IX Item "-oid filename"
  197. A file containing additional \s-1OBJECT\s0 IDENTIFIERs (OIDs). The format of this
  198. file is described in the \s-1NOTES\s0 section below.
  199. .IP "\fB\-dump\fR" 4
  200. .IX Item "-dump"
  201. Dump unknown data in hex format.
  202. .IP "\fB\-dlimit\fR \fInum\fR" 4
  203. .IX Item "-dlimit num"
  204. Like \fB\-dump\fR, but only the first \fBnum\fR bytes are output.
  205. .IP "\fB\-strparse\fR \fIoffset\fR" 4
  206. .IX Item "-strparse offset"
  207. Parse the contents octets of the \s-1ASN.1\s0 object starting at \fBoffset\fR. This
  208. option can be used multiple times to \*(L"drill down\*(R" into a nested structure.
  209. .IP "\fB\-genstr\fR \fIstring\fR, \fB\-genconf\fR \fIfile\fR" 4
  210. .IX Item "-genstr string, -genconf file"
  211. Generate encoded data based on \fIstring\fR, \fIfile\fR or both using
  212. \&\fBASN1_generate_nconf\fR\|(3) format. If \fIfile\fR only is
  213. present then the string is obtained from the default section using the name
  214. \&\fBasn1\fR. The encoded data is passed through the \s-1ASN1\s0 parser and printed out as
  215. though it came from a file, the contents can thus be examined and written to a
  216. file using the \fB\-out\fR option.
  217. .IP "\fB\-strictpem\fR" 4
  218. .IX Item "-strictpem"
  219. If this option is used then \fB\-inform\fR will be ignored. Without this option any
  220. data in a \s-1PEM\s0 format input file will be treated as being base64 encoded and
  221. processed whether it has the normal \s-1PEM BEGIN\s0 and \s-1END\s0 markers or not. This
  222. option will ignore any data prior to the start of the \s-1BEGIN\s0 marker, or after an
  223. \&\s-1END\s0 marker in a \s-1PEM\s0 file.
  224. .IP "\fB\-item\fR \fIname\fR" 4
  225. .IX Item "-item name"
  226. Attempt to decode and print the data as an \fB\s-1ASN1_ITEM\s0\fR \fIname\fR. This can be
  227. used to print out the fields of any supported \s-1ASN.1\s0 structure if the type is
  228. known.
  229. .SS "Output"
  230. .IX Subsection "Output"
  231. The output will typically contain lines like this:
  232. .PP
  233. .Vb 1
  234. \& 0:d=0 hl=4 l= 681 cons: SEQUENCE
  235. .Ve
  236. .PP
  237. \&.....
  238. .PP
  239. .Vb 10
  240. \& 229:d=3 hl=3 l= 141 prim: BIT STRING
  241. \& 373:d=2 hl=3 l= 162 cons: cont [ 3 ]
  242. \& 376:d=3 hl=3 l= 159 cons: SEQUENCE
  243. \& 379:d=4 hl=2 l= 29 cons: SEQUENCE
  244. \& 381:d=5 hl=2 l= 3 prim: OBJECT :X509v3 Subject Key Identifier
  245. \& 386:d=5 hl=2 l= 22 prim: OCTET STRING
  246. \& 410:d=4 hl=2 l= 112 cons: SEQUENCE
  247. \& 412:d=5 hl=2 l= 3 prim: OBJECT :X509v3 Authority Key Identifier
  248. \& 417:d=5 hl=2 l= 105 prim: OCTET STRING
  249. \& 524:d=4 hl=2 l= 12 cons: SEQUENCE
  250. .Ve
  251. .PP
  252. \&.....
  253. .PP
  254. This example is part of a self-signed certificate. Each line starts with the
  255. offset in decimal. \f(CW\*(C`d=XX\*(C'\fR specifies the current depth. The depth is increased
  256. within the scope of any \s-1SET\s0 or \s-1SEQUENCE.\s0 \f(CW\*(C`hl=XX\*(C'\fR gives the header length
  257. (tag and length octets) of the current type. \f(CW\*(C`l=XX\*(C'\fR gives the length of
  258. the contents octets.
  259. .PP
  260. The \fB\-i\fR option can be used to make the output more readable.
  261. .PP
  262. Some knowledge of the \s-1ASN.1\s0 structure is needed to interpret the output.
  263. .PP
  264. In this example the \s-1BIT STRING\s0 at offset 229 is the certificate public key.
  265. The contents octets of this will contain the public key information. This can
  266. be examined using the option \f(CW\*(C`\-strparse 229\*(C'\fR to yield:
  267. .PP
  268. .Vb 3
  269. \& 0:d=0 hl=3 l= 137 cons: SEQUENCE
  270. \& 3:d=1 hl=3 l= 129 prim: INTEGER :E5D21E1F5C8D208EA7A2166C7FAF9F6BDF2059669C60876DDB70840F1A5AAFA59699FE471F379F1DD6A487E7D5409AB6A88D4A9746E24B91D8CF55DB3521015460C8EDE44EE8A4189F7A7BE77D6CD3A9AF2696F486855CF58BF0EDF2B4068058C7A947F52548DDF7E15E96B385F86422BEA9064A3EE9E1158A56E4A6F47E5897
  271. \& 135:d=1 hl=2 l= 3 prim: INTEGER :010001
  272. .Ve
  273. .SH "NOTES"
  274. .IX Header "NOTES"
  275. If an \s-1OID\s0 is not part of OpenSSL's internal table it will be represented in
  276. numerical form (for example 1.2.3.4). The file passed to the \fB\-oid\fR option
  277. allows additional OIDs to be included. Each line consists of three columns,
  278. the first column is the \s-1OID\s0 in numerical format and should be followed by white
  279. space. The second column is the \*(L"short name\*(R" which is a single word followed
  280. by whitespace. The final column is the rest of the line and is the
  281. \&\*(L"long name\*(R". Example:
  282. .PP
  283. \&\f(CW\*(C`1.2.3.4 shortName A long name\*(C'\fR
  284. .PP
  285. For any \s-1OID\s0 with an associated short and long name, this command will display
  286. the long name.
  287. .SH "EXAMPLES"
  288. .IX Header "EXAMPLES"
  289. Parse a file:
  290. .PP
  291. .Vb 1
  292. \& openssl asn1parse \-in file.pem
  293. .Ve
  294. .PP
  295. Parse a \s-1DER\s0 file:
  296. .PP
  297. .Vb 1
  298. \& openssl asn1parse \-inform DER \-in file.der
  299. .Ve
  300. .PP
  301. Generate a simple UTF8String:
  302. .PP
  303. .Vb 1
  304. \& openssl asn1parse \-genstr \*(AqUTF8:Hello World\*(Aq
  305. .Ve
  306. .PP
  307. Generate and write out a UTF8String, don't print parsed output:
  308. .PP
  309. .Vb 1
  310. \& openssl asn1parse \-genstr \*(AqUTF8:Hello World\*(Aq \-noout \-out utf8.der
  311. .Ve
  312. .PP
  313. Generate using a config file:
  314. .PP
  315. .Vb 1
  316. \& openssl asn1parse \-genconf asn1.cnf \-noout \-out asn1.der
  317. .Ve
  318. .PP
  319. Example config file:
  320. .PP
  321. .Vb 1
  322. \& asn1=SEQUENCE:seq_sect
  323. \&
  324. \& [seq_sect]
  325. \&
  326. \& field1=BOOL:TRUE
  327. \& field2=EXP:0, UTF8:some random string
  328. .Ve
  329. .SH "BUGS"
  330. .IX Header "BUGS"
  331. There should be options to change the format of output lines. The output of some
  332. \&\s-1ASN.1\s0 types is not well handled (if at all).
  333. .SH "SEE ALSO"
  334. .IX Header "SEE ALSO"
  335. \&\fBopenssl\fR\|(1),
  336. \&\fBASN1_generate_nconf\fR\|(3)
  337. .SH "COPYRIGHT"
  338. .IX Header "COPYRIGHT"
  339. Copyright 2000\-2023 The OpenSSL Project Authors. All Rights Reserved.
  340. .PP
  341. Licensed under the Apache License 2.0 (the \*(L"License\*(R"). You may not use
  342. this file except in compliance with the License. You can obtain a copy
  343. in the file \s-1LICENSE\s0 in the source distribution or at
  344. <https://www.openssl.org/source/license.html>.