diff options
| author | Christian Breunig <christian@breunig.cc> | 2026-08-10 21:34:19 +0200 |
|---|---|---|
| committer | Christian Breunig <christian@breunig.cc> | 2026-08-10 21:34:19 +0200 |
| commit | 83b5f2f73ce379f4cffcf5796c43ecf25cc2c3a3 (patch) | |
| tree | 9e433c52f6077eb0b8e6694eeaaa8e268a82412d /src | |
| parent | 3c994aa0560fe91de04b4e47eb2a2913569ea35c (diff) | |
| download | vyos-1x-83b5f2f73ce379f4cffcf5796c43ecf25cc2c3a3.tar.gz vyos-1x-83b5f2f73ce379f4cffcf5796c43ecf25cc2c3a3.zip | |
pki: T9135: add "show pki ca/certificate <name> text" command
"show pki ca/certificate <name>" only ever offered PEM output, which isn't
practical for a human to actually read. Add a "text" form that runs the
certificate through OpenSSL's own "-text" formatter, the same human-readable
breakdown "openssl x509 -text" produces.
Diffstat (limited to 'src')
| -rwxr-xr-x | src/op_mode/pki.py | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/op_mode/pki.py b/src/op_mode/pki.py index d9f1e8fab..575aa89e0 100755 --- a/src/op_mode/pki.py +++ b/src/op_mode/pki.py @@ -109,6 +109,12 @@ def _encode_certificate_chain(cert, ca_certs): return ''.join(encode_certificate(c) for c in find_chain(cert, loaded_ca_certs)) +def _print_certificate_text(cert): + """Print a certificate in OpenSSL's human-readable "-text" format.""" + print(cmdl(['openssl', 'x509', '-noout', '-text'], + input=encode_certificate(cert))) + + def get_default_values(): # Fetch default x509 values base = ['pki', 'x509', 'default'] @@ -1270,6 +1276,7 @@ def show_certificate_authority( raw: bool, name: typing.Optional[str] = None, pem: typing.Optional[bool] = False, + text: typing.Optional[bool] = False, full_chain: typing.Optional[bool] = False, ): headers = [ @@ -1301,6 +1308,9 @@ def show_certificate_authority( else: print(encode_certificate(cert)) return + if name and text: + _print_certificate_text(cert) + return parent_ca_name = get_certificate_ca(cert, certs) cert_issuer_cn = cert.issuer.rfc4514_string().split(',')[0] @@ -1335,6 +1345,7 @@ def show_certificate( name: typing.Optional[str] = None, private: typing.Optional[bool] = False, pem: typing.Optional[bool] = False, + text: typing.Optional[bool] = False, full_chain: typing.Optional[bool] = False, fingerprint: typing.Optional[ArgsFingerprint] = None, ): @@ -1371,6 +1382,9 @@ def show_certificate( else: print(encode_certificate(cert)) return + elif name and text and not (private or fingerprint): + _print_certificate_text(cert) + return elif name and fingerprint and not private: print(get_certificate_fingerprint(cert, fingerprint)) return |
