Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Show X.509 extensions in certificate output #831

Merged
merged 5 commits into from
Jun 4, 2023

Conversation

micahmo
Copy link

@micahmo micahmo commented May 31, 2023

Pull request type

Please check the type of change your PR introduces:

  • Bugfix
  • New feature or enhancement
  • UI change (please include screenshot!)
  • Code style update (formatting, renaming)
  • Refactoring (no functional changes, no api changes)
  • Build related changes
  • Documentation content changes
  • Internationalization and localization
  • Other (please describe):

What is the current behavior?

Issue Number: #828

What is the new behavior?

  • When decoding a certificate, also iterate through the extensions and add them to the output

Other information

Screenshot (everything under Thumbprint is new)

image

Full Input

-----BEGIN CERTIFICATE-----
MIIOOzCCDSOgAwIBAgIQTbGqx6uxO3IQW8zrjMc3UTANBgkqhkiG9w0BAQsFADBG
MQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExM
QzETMBEGA1UEAxMKR1RTIENBIDFDMzAeFw0yMzA1MDgwODIwMDlaFw0yMzA3MzEw
ODIwMDhaMBcxFTATBgNVBAMMDCouZ29vZ2xlLmNvbTBZMBMGByqGSM49AgEGCCqG
SM49AwEHA0IABIro1W5vifJKHJkuzKaF9Vnz7sg+C70IqEfxLukxL+DV8/NKUvGP
O/eWO+3ux3Dc8spxZDuPtaDrUbSq6Nh5RoujggwdMIIMGTAOBgNVHQ8BAf8EBAMC
B4AwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU
zGR7dlOwbhCQd0CnrphWsRB+9ycwHwYDVR0jBBgwFoAUinR/r4XN7pXNPZzQ4kYU
83E1HScwagYIKwYBBQUHAQEEXjBcMCcGCCsGAQUFBzABhhtodHRwOi8vb2NzcC5w
a2kuZ29vZy9ndHMxYzMwMQYIKwYBBQUHMAKGJWh0dHA6Ly9wa2kuZ29vZy9yZXBv
L2NlcnRzL2d0czFjMy5kZXIwggnNBgNVHREEggnEMIIJwIIMKi5nb29nbGUuY29t
ghYqLmFwcGVuZ2luZS5nb29nbGUuY29tggkqLmJkbi5kZXaCFSoub3JpZ2luLXRl
c3QuYmRuLmRldoISKi5jbG91ZC5nb29nbGUuY29tghgqLmNyb3dkc291cmNlLmdv
b2dsZS5jb22CGCouZGF0YWNvbXB1dGUuZ29vZ2xlLmNvbYILKi5nb29nbGUuY2GC
CyouZ29vZ2xlLmNsgg4qLmdvb2dsZS5jby5pboIOKi5nb29nbGUuY28uanCCDiou
Z29vZ2xlLmNvLnVrgg8qLmdvb2dsZS5jb20uYXKCDyouZ29vZ2xlLmNvbS5hdYIP
Ki5nb29nbGUuY29tLmJygg8qLmdvb2dsZS5jb20uY2+CDyouZ29vZ2xlLmNvbS5t
eIIPKi5nb29nbGUuY29tLnRygg8qLmdvb2dsZS5jb20udm6CCyouZ29vZ2xlLmRl
ggsqLmdvb2dsZS5lc4ILKi5nb29nbGUuZnKCCyouZ29vZ2xlLmh1ggsqLmdvb2ds
ZS5pdIILKi5nb29nbGUubmyCCyouZ29vZ2xlLnBsggsqLmdvb2dsZS5wdIISKi5n
b29nbGVhZGFwaXMuY29tgg8qLmdvb2dsZWFwaXMuY26CESouZ29vZ2xldmlkZW8u
Y29tggwqLmdzdGF0aWMuY26CECouZ3N0YXRpYy1jbi5jb22CD2dvb2dsZWNuYXBw
cy5jboIRKi5nb29nbGVjbmFwcHMuY26CEWdvb2dsZWFwcHMtY24uY29tghMqLmdv
b2dsZWFwcHMtY24uY29tggxna2VjbmFwcHMuY26CDiouZ2tlY25hcHBzLmNughJn
b29nbGVkb3dubG9hZHMuY26CFCouZ29vZ2xlZG93bmxvYWRzLmNughByZWNhcHRj
aGEubmV0LmNughIqLnJlY2FwdGNoYS5uZXQuY26CEHJlY2FwdGNoYS1jbi5uZXSC
EioucmVjYXB0Y2hhLWNuLm5ldIILd2lkZXZpbmUuY26CDSoud2lkZXZpbmUuY26C
EWFtcHByb2plY3Qub3JnLmNughMqLmFtcHByb2plY3Qub3JnLmNughFhbXBwcm9q
ZWN0Lm5ldC5jboITKi5hbXBwcm9qZWN0Lm5ldC5jboIXZ29vZ2xlLWFuYWx5dGlj
cy1jbi5jb22CGSouZ29vZ2xlLWFuYWx5dGljcy1jbi5jb22CF2dvb2dsZWFkc2Vy
dmljZXMtY24uY29tghkqLmdvb2dsZWFkc2VydmljZXMtY24uY29tghFnb29nbGV2
YWRzLWNuLmNvbYITKi5nb29nbGV2YWRzLWNuLmNvbYIRZ29vZ2xlYXBpcy1jbi5j
b22CEyouZ29vZ2xlYXBpcy1jbi5jb22CFWdvb2dsZW9wdGltaXplLWNuLmNvbYIX
Ki5nb29nbGVvcHRpbWl6ZS1jbi5jb22CEmRvdWJsZWNsaWNrLWNuLm5ldIIUKi5k
b3VibGVjbGljay1jbi5uZXSCGCouZmxzLmRvdWJsZWNsaWNrLWNuLm5ldIIWKi5n
LmRvdWJsZWNsaWNrLWNuLm5ldIIOZG91YmxlY2xpY2suY26CECouZG91YmxlY2xp
Y2suY26CFCouZmxzLmRvdWJsZWNsaWNrLmNughIqLmcuZG91YmxlY2xpY2suY26C
EWRhcnRzZWFyY2gtY24ubmV0ghMqLmRhcnRzZWFyY2gtY24ubmV0gh1nb29nbGV0
cmF2ZWxhZHNlcnZpY2VzLWNuLmNvbYIfKi5nb29nbGV0cmF2ZWxhZHNlcnZpY2Vz
LWNuLmNvbYIYZ29vZ2xldGFnc2VydmljZXMtY24uY29tghoqLmdvb2dsZXRhZ3Nl
cnZpY2VzLWNuLmNvbYIXZ29vZ2xldGFnbWFuYWdlci1jbi5jb22CGSouZ29vZ2xl
dGFnbWFuYWdlci1jbi5jb22CGGdvb2dsZXN5bmRpY2F0aW9uLWNuLmNvbYIaKi5n
b29nbGVzeW5kaWNhdGlvbi1jbi5jb22CJCouc2FmZWZyYW1lLmdvb2dsZXN5bmRp
Y2F0aW9uLWNuLmNvbYIWYXBwLW1lYXN1cmVtZW50LWNuLmNvbYIYKi5hcHAtbWVh
c3VyZW1lbnQtY24uY29tggtndnQxLWNuLmNvbYINKi5ndnQxLWNuLmNvbYILZ3Z0
Mi1jbi5jb22CDSouZ3Z0Mi1jbi5jb22CCzJtZG4tY24ubmV0gg0qLjJtZG4tY24u
bmV0ghRnb29nbGVmbGlnaHRzLWNuLm5ldIIWKi5nb29nbGVmbGlnaHRzLWNuLm5l
dIIMYWRtb2ItY24uY29tgg4qLmFkbW9iLWNuLmNvbYIUZ29vZ2xlc2FuZGJveC1j
bi5jb22CFiouZ29vZ2xlc2FuZGJveC1jbi5jb22CHiouc2FmZW51cC5nb29nbGVz
YW5kYm94LWNuLmNvbYINKi5nc3RhdGljLmNvbYIUKi5tZXRyaWMuZ3N0YXRpYy5j
b22CCiouZ3Z0MS5jb22CESouZ2NwY2RuLmd2dDEuY29tggoqLmd2dDIuY29tgg4q
LmdjcC5ndnQyLmNvbYIQKi51cmwuZ29vZ2xlLmNvbYIWKi55b3V0dWJlLW5vY29v
a2llLmNvbYILKi55dGltZy5jb22CC2FuZHJvaWQuY29tgg0qLmFuZHJvaWQuY29t
ghMqLmZsYXNoLmFuZHJvaWQuY29tggRnLmNuggYqLmcuY26CBGcuY2+CBiouZy5j
b4IGZ29vLmdsggp3d3cuZ29vLmdsghRnb29nbGUtYW5hbHl0aWNzLmNvbYIWKi5n
b29nbGUtYW5hbHl0aWNzLmNvbYIKZ29vZ2xlLmNvbYISZ29vZ2xlY29tbWVyY2Uu
Y29tghQqLmdvb2dsZWNvbW1lcmNlLmNvbYIIZ2dwaHQuY26CCiouZ2dwaHQuY26C
CnVyY2hpbi5jb22CDCoudXJjaGluLmNvbYIIeW91dHUuYmWCC3lvdXR1YmUuY29t
gg0qLnlvdXR1YmUuY29tghR5b3V0dWJlZWR1Y2F0aW9uLmNvbYIWKi55b3V0dWJl
ZWR1Y2F0aW9uLmNvbYIPeW91dHViZWtpZHMuY29tghEqLnlvdXR1YmVraWRzLmNv
bYIFeXQuYmWCByoueXQuYmWCGmFuZHJvaWQuY2xpZW50cy5nb29nbGUuY29tghtk
ZXZlbG9wZXIuYW5kcm9pZC5nb29nbGUuY26CHGRldmVsb3BlcnMuYW5kcm9pZC5n
b29nbGUuY26CGHNvdXJjZS5hbmRyb2lkLmdvb2dsZS5jbjAhBgNVHSAEGjAYMAgG
BmeBDAECATAMBgorBgEEAdZ5AgUDMDwGA1UdHwQ1MDMwMaAvoC2GK2h0dHA6Ly9j
cmxzLnBraS5nb29nL2d0czFjMy9tb1ZEZklTaWEyay5jcmwwggEEBgorBgEEAdZ5
AgQCBIH1BIHyAPAAdgCt9776fP8QyIudPZwePhhqtGcpXc+xDCTKhYY069yCigAA
AYf6qVVwAAAEAwBHMEUCIDJleKOR0V00U9/HtlpVI/k+fAQPusJOkkwOMcmp5k2S
AiEA8WBbCSbTcmCjbGtC9wjbv7ImdPXUK5A1+jHUuvaaLYMAdgCzc3cH4YRQ+GOG
1gWp3BEJSnktsWcMC4fc8AMOeTalmgAAAYf6qVVYAAAEAwBHMEUCIQDqKZ5v6H2U
rhJJ+noPfyeQC8zXv8QQ2QXR6EEhV/5phgIgc+NfWUA6QkyWq/w+Mm3nRFZTO0jx
An6a5iqAxsg4BkYwDQYJKoZIhvcNAQELBQADggEBAMKb+CTanH5kIdo57J1vIaJX
Gz9EQyjjXapgOzAFDFYDOq5Y2BuBb/pXoJosCBX6+VzI+mAGo7+iabwtH+L4Pal9
mFeRAnJVuD9fZIZ/16qyZ2Ei99udMJESjN4y2uzSwHYhBp7OguVgy7lFXwbQL3Ew
npI9FiZpLdkvTMiADdWfCkGD8SCp7Pt27YipQqWa++e33k+Tdv/HGAX2fPiDvtce
i7Iz4yhKZ48kBu3hPF0YlVCm6HaZOpwi0X9331F/LFj10TDdR/PtES0Yb2O315q/
iufBG6egHMUnfE4NJQm12fdAszfkiFEemHox22qDWgJjld2ORxSvGVuVz6XGxAs=
-----END CERTIFICATE-----

Full Output

[Subject]
  CN=*.google.com

[Issuer]
  CN=GTS CA 1C3, O=Google Trust Services LLC, C=US

[Serial Number]
  4DB1AAC7ABB13B72105BCCEB8CC73751

[Not Before]
  5/8/2023 4:20:09 AM

[Not After]
  7/31/2023 4:20:08 AM

[Thumbprint]
  5DBA19A5812505327213A718CF678CD66F13B3EF

[Key Usage]
  Digital Signature (80)
  
[Enhanced Key Usage]
  Server Authentication (1.3.6.1.5.5.7.3.1)
  
[Basic Constraints]
  Subject Type=End Entity
  Path Length Constraint=None
  
[Subject Key Identifier]
  cc647b7653b06e10907740a7ae9856b1107ef727
  
[Authority Key Identifier]
  KeyID=8a747faf85cdee95cd3d9cd0e24614f371351d27
  
[Authority Information Access]
  [1]Authority Info Access
       Access Method=On-line Certificate Status Protocol (1.3.6.1.5.5.7.48.1)
       Alternative Name:
            URL=http://ocsp.pki.goog/gts1c3
  [2]Authority Info Access
       Access Method=Certification Authority Issuer (1.3.6.1.5.5.7.48.2)
       Alternative Name:
            URL=http://pki.goog/repo/certs/gts1c3.der
  
[Subject Alternative Name]
  DNS Name=*.google.com
  DNS Name=*.appengine.google.com
  DNS Name=*.bdn.dev
  DNS Name=*.origin-test.bdn.dev
  DNS Name=*.cloud.google.com
  DNS Name=*.crowdsource.google.com
  DNS Name=*.datacompute.google.com
  DNS Name=*.google.ca
  DNS Name=*.google.cl
  DNS Name=*.google.co.in
  DNS Name=*.google.co.jp
  DNS Name=*.google.co.uk
  DNS Name=*.google.com.ar
  DNS Name=*.google.com.au
  DNS Name=*.google.com.br
  DNS Name=*.google.com.co
  DNS Name=*.google.com.mx
  DNS Name=*.google.com.tr
  DNS Name=*.google.com.vn
  DNS Name=*.google.de
  DNS Name=*.google.es
  DNS Name=*.google.fr
  DNS Name=*.google.hu
  DNS Name=*.google.it
  DNS Name=*.google.nl
  DNS Name=*.google.pl
  DNS Name=*.google.pt
  DNS Name=*.googleadapis.com
  DNS Name=*.googleapis.cn
  DNS Name=*.googlevideo.com
  DNS Name=*.gstatic.cn
  DNS Name=*.gstatic-cn.com
  DNS Name=googlecnapps.cn
  DNS Name=*.googlecnapps.cn
  DNS Name=googleapps-cn.com
  DNS Name=*.googleapps-cn.com
  DNS Name=gkecnapps.cn
  DNS Name=*.gkecnapps.cn
  DNS Name=googledownloads.cn
  DNS Name=*.googledownloads.cn
  DNS Name=recaptcha.net.cn
  DNS Name=*.recaptcha.net.cn
  DNS Name=recaptcha-cn.net
  DNS Name=*.recaptcha-cn.net
  DNS Name=widevine.cn
  DNS Name=*.widevine.cn
  DNS Name=ampproject.org.cn
  DNS Name=*.ampproject.org.cn
  DNS Name=ampproject.net.cn
  DNS Name=*.ampproject.net.cn
  DNS Name=google-analytics-cn.com
  DNS Name=*.google-analytics-cn.com
  DNS Name=googleadservices-cn.com
  DNS Name=*.googleadservices-cn.com
  DNS Name=googlevads-cn.com
  DNS Name=*.googlevads-cn.com
  DNS Name=googleapis-cn.com
  DNS Name=*.googleapis-cn.com
  DNS Name=googleoptimize-cn.com
  DNS Name=*.googleoptimize-cn.com
  DNS Name=doubleclick-cn.net
  DNS Name=*.doubleclick-cn.net
  DNS Name=*.fls.doubleclick-cn.net
  DNS Name=*.g.doubleclick-cn.net
  DNS Name=doubleclick.cn
  DNS Name=*.doubleclick.cn
  DNS Name=*.fls.doubleclick.cn
  DNS Name=*.g.doubleclick.cn
  DNS Name=dartsearch-cn.net
  DNS Name=*.dartsearch-cn.net
  DNS Name=googletraveladservices-cn.com
  DNS Name=*.googletraveladservices-cn.com
  DNS Name=googletagservices-cn.com
  DNS Name=*.googletagservices-cn.com
  DNS Name=googletagmanager-cn.com
  DNS Name=*.googletagmanager-cn.com
  DNS Name=googlesyndication-cn.com
  DNS Name=*.googlesyndication-cn.com
  DNS Name=*.safeframe.googlesyndication-cn.com
  DNS Name=app-measurement-cn.com
  DNS Name=*.app-measurement-cn.com
  DNS Name=gvt1-cn.com
  DNS Name=*.gvt1-cn.com
  DNS Name=gvt2-cn.com
  DNS Name=*.gvt2-cn.com
  DNS Name=2mdn-cn.net
  DNS Name=*.2mdn-cn.net
  DNS Name=googleflights-cn.net
  DNS Name=*.googleflights-cn.net
  DNS Name=admob-cn.com
  DNS Name=*.admob-cn.com
  DNS Name=googlesandbox-cn.com
  DNS Name=*.googlesandbox-cn.com
  DNS Name=*.safenup.googlesandbox-cn.com
  DNS Name=*.gstatic.com
  DNS Name=*.metric.gstatic.com
  DNS Name=*.gvt1.com
  DNS Name=*.gcpcdn.gvt1.com
  DNS Name=*.gvt2.com
  DNS Name=*.gcp.gvt2.com
  DNS Name=*.url.google.com
  DNS Name=*.youtube-nocookie.com
  DNS Name=*.ytimg.com
  DNS Name=android.com
  DNS Name=*.android.com
  DNS Name=*.flash.android.com
  DNS Name=g.cn
  DNS Name=*.g.cn
  DNS Name=g.co
  DNS Name=*.g.co
  DNS Name=goo.gl
  DNS Name=www.goo.gl
  DNS Name=google-analytics.com
  DNS Name=*.google-analytics.com
  DNS Name=google.com
  DNS Name=googlecommerce.com
  DNS Name=*.googlecommerce.com
  DNS Name=ggpht.cn
  DNS Name=*.ggpht.cn
  DNS Name=urchin.com
  DNS Name=*.urchin.com
  DNS Name=youtu.be
  DNS Name=youtube.com
  DNS Name=*.youtube.com
  DNS Name=youtubeeducation.com
  DNS Name=*.youtubeeducation.com
  DNS Name=youtubekids.com
  DNS Name=*.youtubekids.com
  DNS Name=yt.be
  DNS Name=*.yt.be
  DNS Name=android.clients.google.com
  DNS Name=developer.android.google.cn
  DNS Name=developers.android.google.cn
  DNS Name=source.android.google.cn
  
[Certificate Policies]
  [1]Certificate Policy:
       Policy Identifier=2.23.140.1.2.1
  [2]Certificate Policy:
       Policy Identifier=1.3.6.1.4.1.11129.2.5.3
  
[CRL Distribution Points]
  [1]CRL Distribution Point
       Distribution Point Name:
            Full Name:
                 URL=http://crls.pki.goog/gts1c3/moVDfISia2k.crl
  
[SCT List]
  v1
  adf7befa7cff10c88b9d3d9c1e3e186ab467295dcfb10c24ca858634ebdc828a
  ‎Monday, ‎May ‎8, ‎2023 5:20:14 AM
  SHA256
  ECDSA
  30450220326578a391d15d3453dfc7b65a5523f93e7c040fbac24e924c0e31c9a9e64d92022100f1605b0926d37260a36c6b42f708dbbfb22674f5d42b9035fa31d4baf69a2d83
  
  v1
  b3737707e18450f86386d605a9dc11094a792db1670c0b87dcf0030e7936a59a
  ‎Monday, ‎May ‎8, ‎2023 5:20:14 AM
  SHA256
  ECDSA
  3045022100ea299e6fe87d94ae1249fa7a0f7f27900bccd7bfc410d905d1e8412157fe6986022073e35f59403a424c96abfc3e326de74456533b48f1027e9ae62a80c6c8380646

Question: Since the certificate decoder output uses CustomTextBox instead of the Monaco editor, it doesn't respect WordWrap. I hope that's ok.

Quality check

Before creating this PR:

  • Did you follow the code style guideline as described in CONTRIBUTING.md
  • Did you build the app and test your changes?
  • Did you check for accessibility? On Windows, you can use Accessibility Insights for this.
  • Did you verify that the change work in Release build configuration
  • Did you verify that all unit tests pass
  • If necessary and if possible, did you verify your changes on:
    • Windows
    • macOS (DevToys 2.0)
    • Linux (DevToys 2.0)

@micahmo micahmo requested review from veler and jlevier June 2, 2023 15:05
@micahmo
Copy link
Author

micahmo commented Jun 2, 2023

I believe I've addressed all the comments if you want to take another peek.

@veler
Copy link
Collaborator

veler commented Jun 4, 2023

It looks all good to me! Thank you very much for this pull request, much appreciated! :D

@veler veler merged commit 5d5e6ee into DevToys-app:main Jun 4, 2023
@micahmo micahmo deleted the feature/cert-extensions branch June 5, 2023 01:18
@veler veler linked an issue Jun 5, 2023 that may be closed by this pull request
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Show additional fields from decoded certificates
3 participants