CertificateRequestTest.cs 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Security.Cryptography.X509Certificates;
  5. using System.Security.Cryptography;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using System.Text.RegularExpressions;
  9. namespace ConsoleApp1.CertificateTest
  10. {
  11. static class CertificateRequestTest
  12. {
  13. public static void Test2()
  14. {
  15. string arrCert = "MIIFzTCCA7WgAwIBAgIINR2tEPf7qlowDQYJKoZIhvcNAQELBQAwRzELMAkGA1UEBhMCVFcxDzANBgNVBAgMBlRhaXBlaTETMBEGA1UECgwKemVyb3ZhdGVjaDESMBAGA1UEAwwJbG9jYWxob3N0MB4XDTI0MDExMDAyMjM1NVoXDTI1MDEwOTAyMjM1NVowSDELMAkGA1UEBhMCVFcxDzANBgNVBAgMBlRhaXBlaTEMMAoGA1UECgwDT04xMRowGAYDVQQDDBFQSFNpbXVsYXRvcjAwNjUwMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMsvklQMDo3saUiNb22QFHWRt8lQmiouqGpcu0ECRDo4dfoRE7Z3YqH8qi9JfqawAfOYGLz0ePm8nzN5jmQEADBnwrrunSL601wJJ9/BZ0MtXdYAMUu7rSAWm8tQaxB+bkyTiJOnFRO7xAmUIa9YQbBpFUSP/K95EVuwY3WeogtAdx6fGLbZAosum6I+8JogMd+H5yNCjW1FdvZRN9wxyIo9PjsNXuuAsOMO+G1/R4LGs0HyS3TKME5Kk4ZxC2rXkte7JGftw0wi6k7ebpKVg4JPfedEc96vySipO55nkmmrH1wWX6I5KPwIljs3F2Mj6DqR2KjvklTkjf65tSe2dUJqILR8GYs162QdB43trQyNKp1cGfx9EtsSOlImiaEcCwkp/yK02EQHSXbpAiTif/VZVgFDyb/y0w/lkLIN2ddaoQwf9APWFVEI4efwe9LHGhnvo8BK9tZL5caS0QPZGLnp+fPeEPcHnmB+knhFglb0eEnm8z/rXSC/TShkc4IOJLOkVSwq8nss2/88WGWxJFyw8e6IuPvIYdAAfgHbEGLIT/k8uARo4DdNrgAKw2+pEEG7fNJBFKG0zyL75Jsbfc6F/5uUirf9pDJjaWviFKZ5zOaFrqPP+9eljDi9LtmERBzIxs3Oi3gsQ14JWWD6NdbzLtW/vHygS7Xu8lGF8sjVAgMBAAGjgbswgbgwCQYDVR0TBAIwADARBglghkgBhvhCAQEEBAMCB4AwMwYJYIZIAYb4QgENBCYWJE9wZW5TU0wgR2VuZXJhdGVkIENsaWVudCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUJKJKEZ5u6+0eTODFSGzu55tAuTswHwYDVR0jBBgwFoAUDV+p9KwtnxxjUOHkxUxdXIm1udkwDgYDVR0PAQH/BAQDAgXgMBMGA1UdJQQMMAoGCCsGAQUFBwMCMA0GCSqGSIb3DQEBCwUAA4ICAQCG389eF81g7kCX3D1eBTqtq4WqIqc8MW4UZ4MF7L3VPmVeQUl+3kk58ZffXQFn8fstVgs8AGYA9hRNRcA3X6F3esgyGXE4M3H5VHtYm9rsbYfXPg5EgAECzvWBS2KHzYyABHDybOlMPrey60hww0WUWJnTOt6oJRaIwdoM1Wcr0KqmfXkAe6TUeuLqzu7mrkJnhgLpMCY7pYr5NqkUOIau2RPXq0BAo/HE3fjeJatg6kNakO8iODF9HaWxOF72XKV50tiDENc5BI5wDHIMmUoQrwb5KXIYIVD4uRnezrJNzkRk31PlvDw4tW0NvPJ9St87W9sBGBy2kNHluiOm3qzh27ZztgSqFjkHIabJ3xwQ6Rwcn8XeIDIsUvQoGcCHwW+Jqobn/YmlqTlpPyRfb6aWZ9ChNkJSIbTvL2R5VBiHfNoyH1MQ/EKl/EwyI50O5QK9mhdBG7+cckLqOTtS03Tqq7JJ0uPwA5eZARUqKZvg4IV7cAUFJLRtN+LVp5vZrEqt04zm1XqhU9vZ85+ng7/thmIdk9qQN+SOTLmCtAwba3XGXiP/xrJZCsO908ZCl9UxY80GJlNLY+l/sHP1B9OZRCpRtXfq2b+NFuacjiKH3pANQ9Yyiru8JmMuU6bi5PWq9khno47Nyz0J6zyIsPOVQrNgYwH9U596jP6++iUTXQ==";
  16. byte[] bytes = Encoding.ASCII.GetBytes(arrCert);
  17. var clientCertificate = new X509Certificate2(bytes);
  18. clientCertificate.Verify();
  19. }
  20. public static void Test()
  21. {
  22. string csrString = """
  23. -----BEGIN CERTIFICATE REQUEST-----
  24. MIIEhTCCAm0CAQAwQDELMAkGA1UEBhMCVFcxDzANBgNVBAgMBlRhaXBlaTEMMAoG
  25. A1UECgwDT04xMRIwEAYDVQQDDAlDaGFyZ2VyMDEwggIiMA0GCSqGSIb3DQEBAQUA
  26. A4ICDwAwggIKAoICAQCvYJxEPtcjU0dAT1o1P9me9UFGfn2DlsVi3unVsuX04y3g
  27. hE3dewfMd7EcVAZKMDPKDMzfN0OH0UOgY9kC6jAwTqxRxlkEdp/dsVKqrG/rxb2l
  28. 6j71z1H/m1K57DOxvkq7fJlbgHeKs5c/VEQqGGN4f1ucouoSLJXpumxbxQ76DXJY
  29. Qpmd8o5+Nw5Q2VVMr2yJOPWcWQHUZrrLpqXVdKt014VOODFD5OyRmyjJKq0lT7Yo
  30. K2k6JjOTGlnUHte/ANHZziz+5nA8yHfuvtX5D7Uug6SDZASs+UV3oh6LfGYuevPh
  31. cf+mXkj8ob+QoXvSLJR87MAZeV5WbXBT8jUNMtyfXu3abP4uRapPcOXGPrzsvfjL
  32. nqN0yVpjmcl8HAbEtOiFDUBrA0cxd63Ky9moSXNpG+5DbwCdwM0NVtaPkIZcIqO4
  33. TAMEW/4R4qLA4zf/kWvcbGAVQpYjK+dyueT9wRwiUFxnWFPVj7T7OZviP4910O2P
  34. McgECNw2LVfT0ESnmT6ZbA4uBXOXBnCSZ3JO85kktK9ajqT6gVAWM1semv9UPgYN
  35. GeM6+jno3fdvAPVXqR+VqS1JkMAMsui/xK25etaGluaYpAGUgGDmrOSqqSfU99ay
  36. WiNMEldPyfVr7ybAdz057KE8wh8MmwRpeEXRpM1uGRyPlfr6R0TslMBt2NlPpwID
  37. AQABoAAwDQYJKoZIhvcNAQENBQADggIBAExk+qp528PuarzCDNOaN5Aid6IDqnIz
  38. 47PdjAksBxZQqnoHs4SzJlS+9LGIPAe0DZCAyAHJMs/xGSRaGGRc6nkz0itA5j/5
  39. WWib71Q3ONWS8wKDKJwKw7ISwZ0tBlIc9HbJpIFD6+e0rmvW6U1flHsdMgYgGPBH
  40. 43dAVa06QpOxlfR4u/8OOIEuLcz4MClzR6LHqpVDlNn6/KqcbrYkOYWyYELM9fEw
  41. gc6fbkW6uZ7NihH3iwhAVP0AetDXgCsz/Fhrr7FLbfEkfpjXgOX4GqJF0GhAs0Mg
  42. lWtIL7ud2f/kRB5nbddFfsb3L08OCPqBbqBdVPGy/qi6FmW7MLgfa3XmLhU3hgv6
  43. dI3krgNL0JtWINyZ6UiOVSrt9XkMe5gVWN+bsyspVuNMl0Bm78dtygcujFeOuM1K
  44. q3KV3sd2iS/62AClRF4lol+QUwF53LmXWKGj4RUdIaaZKcwguIJnbceWGI++ieOK
  45. nIo3TFME8ZlLMihDQsWoFjjW4/1Kwcw8P7f5H3B/Wk0wE3bSEtkWBy9xVA54fxlc
  46. 09BTRAKb4pACwLj6jpXOupAW19WSRMqSy33J11GxpgQvAerHpK5Lf5B0Z5lmFuzV
  47. fBJSAqvgV+62LbbR8NuOoJvq1bZk2QzqQWbhhgXYpHogsTUTW4wGWV0Ab6l3HSRm
  48. Y5a9FOWZk2pL
  49. -----END CERTIFICATE REQUEST-----
  50. """;
  51. string crtString = """
  52. -----BEGIN CERTIFICATE-----
  53. MIIFZTCCA02gAwIBAgIILv/AJHx6nkIwDQYJKoZIhvcNAQENBQAwRzELMAkGA1UE
  54. BhMCVFcxDzANBgNVBAgMBlRhaXBlaTETMBEGA1UECgwKemVyb3ZhdGVjaDESMBAG
  55. A1UEAwwJbG9jYWxob3N0MCAXDTI0MDEwNTA4MTIyNVoYDzIxMjMxMjEyMDgxMjI1
  56. WjBHMQswCQYDVQQGEwJUVzEPMA0GA1UECAwGVGFpcGVpMRMwEQYDVQQKDAp6ZXJv
  57. dmF0ZWNoMRIwEAYDVQQDDAlsb2NhbGhvc3QwggIiMA0GCSqGSIb3DQEBAQUAA4IC
  58. DwAwggIKAoICAQDtEPdz7NECvxadr+MfOkdYBgzqa5ME37nx4UiRXSddjmBua7mX
  59. dnJUpeOvhxDdvwdGYrMwp7JR1K+re7MSk27cOO00j+YYpxmclZwynxqlHIU6ZrBn
  60. +dRdTMUjHWPxSJowpOdpH2Scw1NUsd0dEvkWb/HKvpILTK0YfwKL1qnAmSQtBQx0
  61. kDRtoDXngkAvKJ6WhXRoQOhb8AG1vamlI+/BRqXeKKS2VN8JVYs5CIn9nXvg5Q4k
  62. d8OtGlZPSrriNT0alNFFPSTwwqTknYheyKZS1zophagGglzcDddgLGEbVbDSrHhx
  63. 6/NPgWcRV+S7/sOeb4m1p9tKdldmdSsHsYkwe5sJBx0m9D9Q7t4xMHEf54kLjmBx
  64. au7Vc7i7ZIxbn0wAMgEmj67z5m9NcB8v1P2Ual2SW5/ECxSIlkQQ9r5fFIMW9UlH
  65. EIZnLCNrUq56yWY6ZhfIdxXK/LKfrciekPKNwCBnd7EMq/GjPmRzxc/zD73IvNA1
  66. lSZ44D9p+yJIivVK7wTkPSSUlZnBOv1WD202IW8Nl5vqcAKzp8sdrpJBFTKTJ05p
  67. P2/1b3S1dPJ+inWC8Y2Zk9yfC33d+of6Wv2MB9ixvB06KoK5uBfMkFTklEF4Liw+
  68. c23XaFNny/GLPyl0KcP5K4peXxfRFJB2eyuLyaf/G5ntOELIu+pAiV+jRwIDAQAB
  69. o1MwUTAdBgNVHQ4EFgQUerFfxYRrFlqn+D92lMmpXZXR4dYwHwYDVR0jBBgwFoAU
  70. erFfxYRrFlqn+D92lMmpXZXR4dYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B
  71. AQ0FAAOCAgEALu0jNIdEvnFGr4kW1QqnkRLj8/N9UFupIkcz1Ao1dl0Txf0u8JGP
  72. i9bMdNV/2uylEcr4dAubP0gnUPqwdI8AXEwg0dfSI6QGGhwP5feneIS8484Iruy7
  73. sXZw37RUAdL+z9KOJAxxQhBnnSw/fggtiW1Zn+qBxZg/VHHOfPCEzulGTxgtVN0A
  74. qecIvvKCY66ONGea3XVa9Dw5uWg1ZJQIpihxLrli89BCj3E718TkSQ/vpWQ4TBvh
  75. LQA8LotnnBlDOzE2Wl+4ycVrW6ctAuawsCY8jk7+XazyxwaFpZn4qpi8iZW168DS
  76. GRTx9UlTRhuZvfJfCgdPFJ3etg+DSzdbJnJXlooQLBg6FmD6aqKss+5hJuE3Bupt
  77. AFQHDexnBeYkPiA1pi6mwq5mVmJ/DeQdbNcdS0L2zKpYs0yICcUspWSbFm3bjwO1
  78. Ta8M5ABiPgPmLwdrq7LXAjrfmyX5gVKkCqogitvujV2OPFPP/12nM8Ye4THrtsFu
  79. IqamiFmQK7IZv6HjWb5DGmtMW8kE92XuTqpq1v8MNQbdNy0DX52bzmZiPy2j2Lka
  80. SOoXZ3OHS9jIF2byYkD1C4EtC0ot+jV6U1taKV+Zd5cdr63QTJOD3TlAShAn6I8e
  81. PLW4JypQCmNu3D4DZpVP0r6bx1rk0HxUux0dyRAhJWMc9yoWr4gnLsU=
  82. -----END CERTIFICATE-----
  83. """;
  84. var values = UnpackCertificateRequest(csrString);
  85. if (values["CN"] != "Charger01")
  86. {
  87. }
  88. var values2 = UnpackCertificate(crtString);
  89. if (values["CN"] != "Charger01")
  90. {
  91. }
  92. }
  93. public static Dictionary<string,string> UnpackCertificateRequest(string csrString)
  94. {
  95. try
  96. {
  97. var csr = CertificateRequest.LoadSigningRequestPem(csrString, HashAlgorithmName.SHA512);
  98. var test = csr.SubjectName.Name;
  99. MatchCollection regexResult = Regex.Matches(test, "([a-zA-Z]*)=([a-zA-Z0-9]*)");
  100. if (regexResult.Count == 0)
  101. {
  102. return null;
  103. }
  104. return regexResult.Where(x => x.Success == true && x.Groups.Count == 3).ToDictionary(x => x.Groups[1].Value, x => x.Groups[2].Value);
  105. }
  106. catch (Exception e)
  107. {
  108. return null;
  109. }
  110. }
  111. public static Dictionary<string, string> UnpackCertificate(string crt)
  112. {
  113. try
  114. {
  115. byte[] bytes = Encoding.ASCII.GetBytes(crt);
  116. var clientCertificate = new X509Certificate2(bytes);
  117. var test = clientCertificate.Subject;
  118. MatchCollection regexResult = Regex.Matches(test, "([a-zA-Z]*)=([a-zA-Z0-9]*)");
  119. if (regexResult.Count == 0)
  120. {
  121. return null;
  122. }
  123. return regexResult.Where(x => x.Success == true && x.Groups.Count == 3).ToDictionary(x => x.Groups[1].Value, x => x.Groups[2].Value);
  124. }
  125. catch (Exception e)
  126. {
  127. return null;
  128. }
  129. }
  130. }
  131. }