@jjlmoya/utils-developer 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (228) hide show
  1. package/package.json +64 -0
  2. package/src/category/i18n/en.ts +34 -0
  3. package/src/category/i18n/es.ts +34 -0
  4. package/src/category/i18n/fr.ts +34 -0
  5. package/src/category/index.ts +31 -0
  6. package/src/category/seo.astro +15 -0
  7. package/src/components/PreviewNavSidebar.astro +116 -0
  8. package/src/components/PreviewToolbar.astro +143 -0
  9. package/src/data.ts +11 -0
  10. package/src/env.d.ts +5 -0
  11. package/src/index.ts +78 -0
  12. package/src/layouts/PreviewLayout.astro +117 -0
  13. package/src/pages/[locale]/[slug].astro +146 -0
  14. package/src/pages/[locale].astro +251 -0
  15. package/src/pages/index.astro +4 -0
  16. package/src/tests/css_specificity_logic.test.ts +39 -0
  17. package/src/tests/faq_count.test.ts +19 -0
  18. package/src/tests/locale_completeness.test.ts +42 -0
  19. package/src/tests/mocks/astro_mock.js +2 -0
  20. package/src/tests/no_h1_in_components.test.ts +48 -0
  21. package/src/tests/schemas_fulfillment.test.ts +23 -0
  22. package/src/tests/seo_length.test.ts +22 -0
  23. package/src/tests/title_quality.test.ts +55 -0
  24. package/src/tests/tool_validation.test.ts +17 -0
  25. package/src/tool/aspectRatio/bibliography.astro +14 -0
  26. package/src/tool/aspectRatio/component.astro +468 -0
  27. package/src/tool/aspectRatio/i18n/en.ts +177 -0
  28. package/src/tool/aspectRatio/i18n/es.ts +177 -0
  29. package/src/tool/aspectRatio/i18n/fr.ts +177 -0
  30. package/src/tool/aspectRatio/index.ts +34 -0
  31. package/src/tool/aspectRatio/seo.astro +14 -0
  32. package/src/tool/aspectRatio/ui.ts +12 -0
  33. package/src/tool/calculadoraTiempoDatos/bibliography.astro +14 -0
  34. package/src/tool/calculadoraTiempoDatos/component.astro +829 -0
  35. package/src/tool/calculadoraTiempoDatos/i18n/en.ts +150 -0
  36. package/src/tool/calculadoraTiempoDatos/i18n/es.ts +163 -0
  37. package/src/tool/calculadoraTiempoDatos/i18n/fr.ts +150 -0
  38. package/src/tool/calculadoraTiempoDatos/index.ts +33 -0
  39. package/src/tool/calculadoraTiempoDatos/seo.astro +14 -0
  40. package/src/tool/calculadoraTiempoDatos/ui.ts +24 -0
  41. package/src/tool/colorConverter/bibliography.astro +14 -0
  42. package/src/tool/colorConverter/component.astro +504 -0
  43. package/src/tool/colorConverter/i18n/en.ts +126 -0
  44. package/src/tool/colorConverter/i18n/es.ts +126 -0
  45. package/src/tool/colorConverter/i18n/fr.ts +126 -0
  46. package/src/tool/colorConverter/index.ts +33 -0
  47. package/src/tool/colorConverter/seo.astro +14 -0
  48. package/src/tool/colorConverter/ui.ts +16 -0
  49. package/src/tool/conversorExcelCsvHtml/bibliography.astro +14 -0
  50. package/src/tool/conversorExcelCsvHtml/component.astro +595 -0
  51. package/src/tool/conversorExcelCsvHtml/i18n/en.ts +129 -0
  52. package/src/tool/conversorExcelCsvHtml/i18n/es.ts +129 -0
  53. package/src/tool/conversorExcelCsvHtml/i18n/fr.ts +129 -0
  54. package/src/tool/conversorExcelCsvHtml/index.ts +33 -0
  55. package/src/tool/conversorExcelCsvHtml/seo.astro +14 -0
  56. package/src/tool/conversorExcelCsvHtml/ui.ts +14 -0
  57. package/src/tool/cronGenerator/bibliography.astro +14 -0
  58. package/src/tool/cronGenerator/component.astro +667 -0
  59. package/src/tool/cronGenerator/i18n/en.ts +191 -0
  60. package/src/tool/cronGenerator/i18n/es.ts +191 -0
  61. package/src/tool/cronGenerator/i18n/fr.ts +191 -0
  62. package/src/tool/cronGenerator/index.ts +34 -0
  63. package/src/tool/cronGenerator/seo.astro +14 -0
  64. package/src/tool/cronGenerator/ui.ts +45 -0
  65. package/src/tool/cssSpecificityCalculator/bibliography.astro +14 -0
  66. package/src/tool/cssSpecificityCalculator/component.astro +292 -0
  67. package/src/tool/cssSpecificityCalculator/i18n/en.ts +168 -0
  68. package/src/tool/cssSpecificityCalculator/i18n/es.ts +168 -0
  69. package/src/tool/cssSpecificityCalculator/i18n/fr.ts +168 -0
  70. package/src/tool/cssSpecificityCalculator/index.ts +34 -0
  71. package/src/tool/cssSpecificityCalculator/logic.ts +100 -0
  72. package/src/tool/cssSpecificityCalculator/seo.astro +14 -0
  73. package/src/tool/cssSpecificityCalculator/ui-controller.ts +57 -0
  74. package/src/tool/cssSpecificityCalculator/ui.ts +11 -0
  75. package/src/tool/cssToInlineConverter/bibliography.astro +14 -0
  76. package/src/tool/cssToInlineConverter/component.astro +308 -0
  77. package/src/tool/cssToInlineConverter/i18n/en.ts +160 -0
  78. package/src/tool/cssToInlineConverter/i18n/es.ts +160 -0
  79. package/src/tool/cssToInlineConverter/i18n/fr.ts +160 -0
  80. package/src/tool/cssToInlineConverter/index.ts +34 -0
  81. package/src/tool/cssToInlineConverter/seo.astro +14 -0
  82. package/src/tool/cssToInlineConverter/ui.ts +12 -0
  83. package/src/tool/duplicateCssRemover/bibliography.astro +14 -0
  84. package/src/tool/duplicateCssRemover/component.astro +353 -0
  85. package/src/tool/duplicateCssRemover/i18n/en.ts +167 -0
  86. package/src/tool/duplicateCssRemover/i18n/es.ts +167 -0
  87. package/src/tool/duplicateCssRemover/i18n/fr.ts +167 -0
  88. package/src/tool/duplicateCssRemover/index.ts +34 -0
  89. package/src/tool/duplicateCssRemover/seo.astro +14 -0
  90. package/src/tool/duplicateCssRemover/ui.ts +12 -0
  91. package/src/tool/generadorSecurityTxt/bibliography.astro +14 -0
  92. package/src/tool/generadorSecurityTxt/component.astro +473 -0
  93. package/src/tool/generadorSecurityTxt/i18n/en.ts +173 -0
  94. package/src/tool/generadorSecurityTxt/i18n/es.ts +173 -0
  95. package/src/tool/generadorSecurityTxt/i18n/fr.ts +173 -0
  96. package/src/tool/generadorSecurityTxt/index.ts +33 -0
  97. package/src/tool/generadorSecurityTxt/seo.astro +14 -0
  98. package/src/tool/generadorSecurityTxt/ui.ts +27 -0
  99. package/src/tool/hashGenerator/bibliography.astro +14 -0
  100. package/src/tool/hashGenerator/component.astro +367 -0
  101. package/src/tool/hashGenerator/i18n/en.ts +118 -0
  102. package/src/tool/hashGenerator/i18n/es.ts +118 -0
  103. package/src/tool/hashGenerator/i18n/fr.ts +118 -0
  104. package/src/tool/hashGenerator/index.ts +33 -0
  105. package/src/tool/hashGenerator/md5.ts +138 -0
  106. package/src/tool/hashGenerator/seo.astro +14 -0
  107. package/src/tool/hashGenerator/ui.ts +11 -0
  108. package/src/tool/inspectorCertificadosSsl/bibliography.astro +14 -0
  109. package/src/tool/inspectorCertificadosSsl/component.astro +580 -0
  110. package/src/tool/inspectorCertificadosSsl/i18n/en.ts +214 -0
  111. package/src/tool/inspectorCertificadosSsl/i18n/es.ts +214 -0
  112. package/src/tool/inspectorCertificadosSsl/i18n/fr.ts +214 -0
  113. package/src/tool/inspectorCertificadosSsl/index.ts +33 -0
  114. package/src/tool/inspectorCertificadosSsl/seo.astro +14 -0
  115. package/src/tool/inspectorCertificadosSsl/ui.ts +29 -0
  116. package/src/tool/jsonFormatter/bibliography.astro +14 -0
  117. package/src/tool/jsonFormatter/component.astro +590 -0
  118. package/src/tool/jsonFormatter/i18n/en.ts +156 -0
  119. package/src/tool/jsonFormatter/i18n/es.ts +156 -0
  120. package/src/tool/jsonFormatter/i18n/fr.ts +156 -0
  121. package/src/tool/jsonFormatter/index.ts +34 -0
  122. package/src/tool/jsonFormatter/seo.astro +14 -0
  123. package/src/tool/jsonFormatter/ui.ts +15 -0
  124. package/src/tool/keycode/bibliography.astro +14 -0
  125. package/src/tool/keycode/component.astro +540 -0
  126. package/src/tool/keycode/i18n/en.ts +160 -0
  127. package/src/tool/keycode/i18n/es.ts +160 -0
  128. package/src/tool/keycode/i18n/fr.ts +160 -0
  129. package/src/tool/keycode/index.ts +34 -0
  130. package/src/tool/keycode/seo.astro +14 -0
  131. package/src/tool/keycode/ui.ts +10 -0
  132. package/src/tool/llmCostCalculator/bibliography.astro +14 -0
  133. package/src/tool/llmCostCalculator/component.astro +488 -0
  134. package/src/tool/llmCostCalculator/data.ts +99 -0
  135. package/src/tool/llmCostCalculator/i18n/en.ts +165 -0
  136. package/src/tool/llmCostCalculator/i18n/es.ts +165 -0
  137. package/src/tool/llmCostCalculator/i18n/fr.ts +165 -0
  138. package/src/tool/llmCostCalculator/index.ts +34 -0
  139. package/src/tool/llmCostCalculator/seo.astro +14 -0
  140. package/src/tool/llmCostCalculator/ui.ts +11 -0
  141. package/src/tool/mobileMockupGenerator/app.ts +614 -0
  142. package/src/tool/mobileMockupGenerator/bibliography.astro +14 -0
  143. package/src/tool/mobileMockupGenerator/component.astro +1044 -0
  144. package/src/tool/mobileMockupGenerator/constants.ts +48 -0
  145. package/src/tool/mobileMockupGenerator/i18n/en.ts +121 -0
  146. package/src/tool/mobileMockupGenerator/i18n/es.ts +121 -0
  147. package/src/tool/mobileMockupGenerator/i18n/fr.ts +121 -0
  148. package/src/tool/mobileMockupGenerator/index.ts +33 -0
  149. package/src/tool/mobileMockupGenerator/rendering.ts +189 -0
  150. package/src/tool/mobileMockupGenerator/seo.astro +14 -0
  151. package/src/tool/mobileMockupGenerator/store.ts +145 -0
  152. package/src/tool/mobileMockupGenerator/types.ts +41 -0
  153. package/src/tool/mobileMockupGenerator/ui.ts +48 -0
  154. package/src/tool/musicalTypography/bibliography.astro +14 -0
  155. package/src/tool/musicalTypography/component.astro +480 -0
  156. package/src/tool/musicalTypography/i18n/en.ts +179 -0
  157. package/src/tool/musicalTypography/i18n/es.ts +179 -0
  158. package/src/tool/musicalTypography/i18n/fr.ts +179 -0
  159. package/src/tool/musicalTypography/index.ts +33 -0
  160. package/src/tool/musicalTypography/seo.astro +14 -0
  161. package/src/tool/musicalTypography/ui.ts +25 -0
  162. package/src/tool/placeholderGenerator/bibliography.astro +14 -0
  163. package/src/tool/placeholderGenerator/component.astro +499 -0
  164. package/src/tool/placeholderGenerator/i18n/en.ts +176 -0
  165. package/src/tool/placeholderGenerator/i18n/es.ts +176 -0
  166. package/src/tool/placeholderGenerator/i18n/fr.ts +176 -0
  167. package/src/tool/placeholderGenerator/index.ts +34 -0
  168. package/src/tool/placeholderGenerator/seo.astro +14 -0
  169. package/src/tool/placeholderGenerator/ui.ts +14 -0
  170. package/src/tool/promptLibrary/bibliography.astro +14 -0
  171. package/src/tool/promptLibrary/component.astro +1131 -0
  172. package/src/tool/promptLibrary/controller.ts +49 -0
  173. package/src/tool/promptLibrary/i18n/en.ts +131 -0
  174. package/src/tool/promptLibrary/i18n/es.ts +131 -0
  175. package/src/tool/promptLibrary/i18n/fr.ts +126 -0
  176. package/src/tool/promptLibrary/index.ts +33 -0
  177. package/src/tool/promptLibrary/seo.astro +14 -0
  178. package/src/tool/promptLibrary/ui.ts +29 -0
  179. package/src/tool/readabilityCalculator/bibliography.astro +14 -0
  180. package/src/tool/readabilityCalculator/component.astro +534 -0
  181. package/src/tool/readabilityCalculator/i18n/en.ts +133 -0
  182. package/src/tool/readabilityCalculator/i18n/es.ts +133 -0
  183. package/src/tool/readabilityCalculator/i18n/fr.ts +133 -0
  184. package/src/tool/readabilityCalculator/index.ts +33 -0
  185. package/src/tool/readabilityCalculator/seo.astro +14 -0
  186. package/src/tool/readabilityCalculator/ui.ts +27 -0
  187. package/src/tool/svgSanitizer/bibliography.astro +14 -0
  188. package/src/tool/svgSanitizer/component.astro +554 -0
  189. package/src/tool/svgSanitizer/i18n/en.ts +125 -0
  190. package/src/tool/svgSanitizer/i18n/es.ts +125 -0
  191. package/src/tool/svgSanitizer/i18n/fr.ts +125 -0
  192. package/src/tool/svgSanitizer/index.ts +33 -0
  193. package/src/tool/svgSanitizer/seo.astro +14 -0
  194. package/src/tool/svgSanitizer/ui.ts +18 -0
  195. package/src/tool/svgToCss/bibliography.astro +14 -0
  196. package/src/tool/svgToCss/component.astro +381 -0
  197. package/src/tool/svgToCss/i18n/en.ts +174 -0
  198. package/src/tool/svgToCss/i18n/es.ts +174 -0
  199. package/src/tool/svgToCss/i18n/fr.ts +174 -0
  200. package/src/tool/svgToCss/index.ts +34 -0
  201. package/src/tool/svgToCss/seo.astro +14 -0
  202. package/src/tool/svgToCss/ui.ts +13 -0
  203. package/src/tool/urlCleaner/bibliography.astro +14 -0
  204. package/src/tool/urlCleaner/component.astro +458 -0
  205. package/src/tool/urlCleaner/i18n/en.ts +116 -0
  206. package/src/tool/urlCleaner/i18n/es.ts +116 -0
  207. package/src/tool/urlCleaner/i18n/fr.ts +116 -0
  208. package/src/tool/urlCleaner/index.ts +33 -0
  209. package/src/tool/urlCleaner/seo.astro +14 -0
  210. package/src/tool/urlCleaner/ui.ts +12 -0
  211. package/src/tool/urlEncoderDecoder/bibliography.astro +14 -0
  212. package/src/tool/urlEncoderDecoder/component.astro +291 -0
  213. package/src/tool/urlEncoderDecoder/i18n/en.ts +162 -0
  214. package/src/tool/urlEncoderDecoder/i18n/es.ts +162 -0
  215. package/src/tool/urlEncoderDecoder/i18n/fr.ts +162 -0
  216. package/src/tool/urlEncoderDecoder/index.ts +34 -0
  217. package/src/tool/urlEncoderDecoder/seo.astro +14 -0
  218. package/src/tool/urlEncoderDecoder/ui.ts +11 -0
  219. package/src/tool/utmGenerator/bibliography.astro +14 -0
  220. package/src/tool/utmGenerator/component.astro +270 -0
  221. package/src/tool/utmGenerator/i18n/en.ts +117 -0
  222. package/src/tool/utmGenerator/i18n/es.ts +117 -0
  223. package/src/tool/utmGenerator/i18n/fr.ts +117 -0
  224. package/src/tool/utmGenerator/index.ts +33 -0
  225. package/src/tool/utmGenerator/seo.astro +14 -0
  226. package/src/tool/utmGenerator/ui.ts +13 -0
  227. package/src/tools.ts +27 -0
  228. package/src/types.ts +72 -0
@@ -0,0 +1,214 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { InspectorCertificadosSslUI } from '../ui';
4
+
5
+ const slug = 'ssl-tls-certificate-inspector';
6
+ const title = 'Online SSL/TLS Certificate Inspector View PEM and CRT Files';
7
+ const description = 'Analyze SSL certificate files (.pem, .crt, .der) locally. Check expiration dates, issuers, subjects and SHA-256 fingerprints without your data leaving your browser.';
8
+
9
+ const faqData = [
10
+ {
11
+ question: 'Is it safe to analyze my SSL certificate on this website?',
12
+ answer: 'Absolutely. This utility runs 100% client-side. When you drag your .pem or .crt file, the browser reads the data locally and never sends it to any server. Complete privacy.',
13
+ },
14
+ {
15
+ question: 'What certificate formats are supported?',
16
+ answer: 'The tool supports the most common formats: PEM (Base64 encoded with "BEGIN CERTIFICATE" headers) and DER (binary format), which typically have .pem, .crt, .cer or .der extensions.',
17
+ },
18
+ {
19
+ question: 'Can I see the expiration date of a .crt file?',
20
+ answer: 'Yes, when you load the file you\'ll immediately see the "Validity Status" section which shows the exact expiration date and whether the certificate is still valid today.',
21
+ },
22
+ {
23
+ question: 'What does the certificate issuer do?',
24
+ answer: 'The issuer (Issuer) indicates which Certificate Authority (CA) validated the site\'s identity. It\'s essential to know if the certificate will be recognized by commercial browsers.',
25
+ },
26
+ {
27
+ question: 'How are SHA-256 fingerprints calculated?',
28
+ answer: 'They are calculated by applying a hash algorithm directly to the certificate\'s binary content. They serve to verify that the file has not been tampered with and matches what the server expects.',
29
+ },
30
+ ];
31
+
32
+ const howToData = [
33
+ { name: 'Find your file', text: 'Locate the file with extension .pem, .crt, .cer or .der on your computer.' },
34
+ { name: 'Drag and drop', text: 'Simply drag the file over the dotted area above.' },
35
+ { name: 'View results', text: 'Instantly you\'ll see who issued the certificate, who it\'s for, when it expires, and its fingerprints.' },
36
+ ];
37
+
38
+ const faqSchema: WithContext<FAQPage> = {
39
+ '@context': 'https://schema.org',
40
+ '@type': 'FAQPage',
41
+ mainEntity: faqData.map((item) => ({
42
+ '@type': 'Question',
43
+ name: item.question,
44
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
45
+ })),
46
+ };
47
+
48
+ const howToSchema: WithContext<HowToThing> = {
49
+ '@context': 'https://schema.org',
50
+ '@type': 'HowTo',
51
+ name: title,
52
+ description,
53
+ step: howToData.map((s, i) => ({ '@type': 'HowToStep', position: i + 1, name: s.name, text: s.text })),
54
+ };
55
+
56
+ const appSchema: WithContext<SoftwareApplication> = {
57
+ '@context': 'https://schema.org',
58
+ '@type': 'SoftwareApplication',
59
+ name: title,
60
+ description,
61
+ applicationCategory: 'UtilityApplication',
62
+ operatingSystem: 'All',
63
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
64
+ inLanguage: 'en',
65
+ };
66
+
67
+ const ui: InspectorCertificadosSslUI = {
68
+ labelAnalyzeCertificate: 'Analyze Certificate',
69
+ dragDropText: 'Drag your .pem, .crt or .cer file here',
70
+ dragDropSubtext: '(100% local processing in your browser)',
71
+ cardStatusTitle: 'Validity Status',
72
+ cardSubjectTitle: 'Subject (Owner)',
73
+ cardIssuerTitle: 'Issuer (CA)',
74
+ cardFingerprintsTitle: 'Fingerprints',
75
+ cardTechnicalTitle: 'Technical Details',
76
+ labelValidityStatus: 'Status:',
77
+ labelExpiryDate: 'Expires on',
78
+ labelIssueDate: 'Issued on',
79
+ labelSha256: 'SHA-256 Fingerprint',
80
+ labelSha1: 'SHA-1 Fingerprint',
81
+ labelSignatureAlgorithm: 'Signature Algorithm',
82
+ labelVersion: 'X.509 Version',
83
+ labelSerialNumber: 'Serial Number',
84
+ labelCommonName: 'Common Name',
85
+ labelOrganization: 'Organization',
86
+ labelOrgUnit: 'Org. Unit',
87
+ labelLocality: 'Locality',
88
+ labelState: 'State/Province',
89
+ labelCountry: 'Country',
90
+ labelEmail: 'Email',
91
+ statusValid: 'Valid',
92
+ statusExpired: 'Expired',
93
+ errorMessageInvalid: 'Invalid file.',
94
+ supportedFormats: '.pem, .crt, .cer, .der',
95
+ };
96
+
97
+ export const content: ToolLocaleContent<InspectorCertificadosSslUI> = {
98
+ slug,
99
+ title,
100
+ description,
101
+ ui,
102
+ faqTitle: 'Frequently Asked Questions',
103
+ faq: faqData,
104
+ bibliographyTitle: 'Technical Resources on SSL/TLS Certificates',
105
+ bibliography: [
106
+ { name: 'RFC 5280: Internet X.509 Public Key Infrastructure Certificate and CRL Profile', url: 'https://datatracker.ietf.org/doc/html/rfc5280' },
107
+ { name: 'NIST: FIPS 180-4 Secure Hash Standard (SHA)', url: 'https://csrc.nist.gov/publications/detail/fips/180/4/final' },
108
+ { name: 'Mozilla: SSL/TLS Encryption Overview', url: 'https://developer.mozilla.org/en-US/docs/Glossary/TLS' },
109
+ { name: 'OpenSSL: X.509 Certificate Format Documentation', url: 'https://www.openssl.org/docs/man1.1.1/man1/x509.html' },
110
+ ],
111
+ howTo: howToData,
112
+ schemas: [faqSchema, howToSchema, appSchema],
113
+ seo: [
114
+ { type: 'title', text: 'What is an SSL/TLS Certificate Inspector and why do you need one?', level: 2 },
115
+ {
116
+ type: 'paragraph',
117
+ html: 'In the world of web development and cybersecurity, <strong>SSL (Secure Sockets Layer) and TLS (Transport Layer Security) certificates</strong> are the cornerstone of trust. A digital certificate is nothing more than a file that links a cryptographic key to an organization or domain\'s data. However, these files often come in binary formats (.der) or Base64 encoded (.pem, .crt) that are not readable at first glance.',
118
+ },
119
+ {
120
+ type: 'paragraph',
121
+ html: 'Our <strong>SSL/TLS Certificate Inspector</strong> allows you to "open" these files visually and safely. Unlike tools that query a public domain (like the famous SSL Labs test), this utility works directly with the file you have on your device. This is vital when you\'re configuring Nginx, Apache servers or loading certificates into an AWS or Google Cloud Load Balancer, and you need to verify that the file in your hand is correct before uploading it.',
122
+ },
123
+ { type: 'title', text: 'How to inspect a .pem or .crt file step by step', level: 2 },
124
+ {
125
+ type: 'paragraph',
126
+ html: 'Analyzing a certificate with our tool is extremely simple and doesn\'t require console (OpenSSL) knowledge. Follow these steps:',
127
+ },
128
+ {
129
+ type: 'list',
130
+ items: [
131
+ '<strong>Find your file:</strong> Locate the file with .pem, .crt, .cer or .der extension on your computer.',
132
+ '<strong>Drag and drop:</strong> Simply drag the file over the dotted area above.',
133
+ '<strong>View results:</strong> Instantly you\'ll see who issued the certificate, who it\'s for, when it expires, and its fingerprints.',
134
+ ],
135
+ },
136
+ {
137
+ type: 'tip',
138
+ title: 'Complete Privacy',
139
+ html: 'The most important part of this process is <strong>privacy</strong>. The file is never uploaded to our servers. All parsing of the certificate\'s ASN.1 structure happens within your own browser\'s RAM. Complete security for your public keys.',
140
+ },
141
+ { type: 'title', text: 'Key fields you\'ll see when analyzing your certificate', level: 2 },
142
+ {
143
+ type: 'paragraph',
144
+ html: 'When analyzing your certificate, we break down the most relevant technical information so you can verify it at a glance:',
145
+ },
146
+ {
147
+ type: 'list',
148
+ items: [
149
+ '<strong>Subject:</strong> Shows the owner\'s data, including the Common Name (CN), organization and location.',
150
+ '<strong>Issuer:</strong> Identifies the Certificate Authority (CA) that signed the certificate (e.g., Let\'s Encrypt, DigiCert).',
151
+ '<strong>Validity Period:</strong> Shows the exact issue date and critical expiration date.',
152
+ '<strong>Fingerprints:</strong> SHA-256 and SHA-1 fingerprints serve to verify the file\'s integrity.',
153
+ ],
154
+ },
155
+ { type: 'title', text: 'Supported formats: PEM, CRT, CER and DER', level: 2 },
156
+ {
157
+ type: 'paragraph',
158
+ html: 'There are several certificate file formats and sometimes it\'s confusing. Our tool is compatible with the most common ones:',
159
+ },
160
+ {
161
+ type: 'list',
162
+ items: [
163
+ '<strong>PEM (.pem, .crt, .cer):</strong> The most common format in Linux and web servers. Starts with the line <code>-----BEGIN CERTIFICATE-----</code>.',
164
+ '<strong>DER (.der, .cer):</strong> The binary format. Heavily used in Windows environments (Java, Active Directory) and is usually harder to read without specialized tools.',
165
+ ],
166
+ },
167
+ {
168
+ type: 'paragraph',
169
+ html: 'Even if your file has an unusual extension, if the internal structure is a standard X.509 certificate, our <strong>node-forge</strong> powered engine will be able to interpret it without problems.',
170
+ },
171
+ { type: 'title', text: 'Why use this tool instead of OpenSSL?', level: 2 },
172
+ {
173
+ type: 'paragraph',
174
+ html: 'OpenSSL is the Swiss Army knife of cryptography, but its commands are hard to remember. To view a certificate from the console you would have to write:',
175
+ },
176
+ { type: 'code', text: 'openssl x509 -in certificado.crt -text -noout' },
177
+ {
178
+ type: 'paragraph',
179
+ html: 'Our tool offers clear advantages for daily workflow:',
180
+ },
181
+ {
182
+ type: 'list',
183
+ items: [
184
+ '<strong>Speed:</strong> No need to open the terminal or remember complex flags.',
185
+ '<strong>Visual:</strong> We format field names (Locality, Organization) to be readable and not short codes like "L" or "O".',
186
+ '<strong>Validity alerts:</strong> We automatically calculate whether the certificate is valid today, saving you from manually checking the current date against the certificate date.',
187
+ '<strong>Cross-platform:</strong> Works on any operating system with a modern browser, no dependencies to install.',
188
+ ],
189
+ },
190
+ { type: 'title', text: 'Security and Privacy: Your certificate never leaves your RAM', level: 2 },
191
+ {
192
+ type: 'paragraph',
193
+ html: 'As a developer, I know how critical it is to handle this type of information. Although a certificate is technically <strong>public information</strong> (sent to any browser that visits your website), it\'s still good practice not to upload files to external servers unnecessarily.',
194
+ },
195
+ {
196
+ type: 'paragraph',
197
+ html: 'This utility uses JavaScript that runs strictly on the client. When you drag the file, we read its contents and process it locally. You can verify this by disconnecting your internet: the tool will continue to work exactly the same.',
198
+ },
199
+ { type: 'title', text: 'Common use cases for the SSL Inspector', level: 2 },
200
+ {
201
+ type: 'paragraph',
202
+ html: 'When would bookmarking this page be helpful?',
203
+ },
204
+ {
205
+ type: 'list',
206
+ items: [
207
+ '<strong>Server debugging:</strong> When you install a certificate and the website keeps giving errors, to verify that you haven\'t accidentally loaded the old certificate.',
208
+ '<strong>Chain verification:</strong> To see if a file contains the end certificate or an intermediate certificate.',
209
+ '<strong>Asset audit:</strong> To check which Certificate Authority was used in an old project.',
210
+ '<strong>Copy integrity:</strong> When moving certificates between servers, to ensure the file isn\'t corrupted by comparing its SHA-256 fingerprint.',
211
+ ],
212
+ },
213
+ ],
214
+ };
@@ -0,0 +1,214 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { InspectorCertificadosSslUI } from '../ui';
4
+
5
+ const slug = 'inspector-certificados-ssl-tls';
6
+ const title = 'Inspector de Certificados SSL/TLS Online Ver PEM y CRT';
7
+ const description = 'Analiza archivos de certificados SSL (.pem, .crt, .der) localmente. Consulta fechas de expiración, emisores, sujetos y huellas digitales SHA-256 sin que tus datos salgan del navegador.';
8
+
9
+ const faqData = [
10
+ {
11
+ question: '¿Es seguro analizar mi certificado SSL en esta web?',
12
+ answer: 'Absolutamente. Esta utilidad funciona 100% client-side. Al arrastrar tu archivo .pem o .crt, el navegador lee los datos localmente y nunca los envía a ningún servidor. La privacidad es total.',
13
+ },
14
+ {
15
+ question: '¿Qué formatos de certificados son compatibles?',
16
+ answer: 'La herramienta soporta los formatos más habituales: PEM (codificado en Base64 con cabeceras "BEGIN CERTIFICATE") y DER (formato binario), que suelen tener extensiones .pem, .crt, .cer o .der.',
17
+ },
18
+ {
19
+ question: '¿Puedo ver la fecha de expiración de un archivo .crt?',
20
+ answer: 'Sí, al cargar el archivo verás inmediatamente el apartado "Estado de Validez" donde se indica la fecha exacta de vencimiento y si el certificado sigue siendo válido hoy.',
21
+ },
22
+ {
23
+ question: '¿Para qué sirve el emisor del certificado?',
24
+ answer: 'El emisor (Issuer) indica qué Autoridad de Certificación (CA) ha validado la identidad del sitio. Es fundamental para saber si el certificado será reconocido por los navegadores comerciales.',
25
+ },
26
+ {
27
+ question: '¿Cómo se calculan las huellas digitales SHA-256?',
28
+ answer: 'Se calculan aplicando un algoritmo hash directamente sobre el contenido binario del certificado. Sirven para verificar que el archivo no ha sido manipulado y coincide con el que espera el servidor.',
29
+ },
30
+ ];
31
+
32
+ const howToData = [
33
+ { name: 'Localiza tu archivo', text: 'Busca el archivo con extensión .pem, .crt, .cer o .der en tu equipo.' },
34
+ { name: 'Arrastra y suelta', text: 'Simplemente desliza el archivo sobre la zona punteada de arriba.' },
35
+ { name: 'Visualiza los resultados', text: 'Instantáneamente verás quién emitió el certificado, para quién es, cuándo caduca y sus huellas digitales.' },
36
+ ];
37
+
38
+ const faqSchema: WithContext<FAQPage> = {
39
+ '@context': 'https://schema.org',
40
+ '@type': 'FAQPage',
41
+ mainEntity: faqData.map((item) => ({
42
+ '@type': 'Question',
43
+ name: item.question,
44
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
45
+ })),
46
+ };
47
+
48
+ const howToSchema: WithContext<HowToThing> = {
49
+ '@context': 'https://schema.org',
50
+ '@type': 'HowTo',
51
+ name: title,
52
+ description,
53
+ step: howToData.map((s, i) => ({ '@type': 'HowToStep', position: i + 1, name: s.name, text: s.text })),
54
+ };
55
+
56
+ const appSchema: WithContext<SoftwareApplication> = {
57
+ '@context': 'https://schema.org',
58
+ '@type': 'SoftwareApplication',
59
+ name: title,
60
+ description,
61
+ applicationCategory: 'UtilityApplication',
62
+ operatingSystem: 'All',
63
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
64
+ inLanguage: 'es',
65
+ };
66
+
67
+ const ui: InspectorCertificadosSslUI = {
68
+ labelAnalyzeCertificate: 'Analizar Certificado',
69
+ dragDropText: 'Arrastra tu archivo .pem, .crt o .cer aquí',
70
+ dragDropSubtext: '(Procesamiento 100% local en tu navegador)',
71
+ cardStatusTitle: 'Estado de Validez',
72
+ cardSubjectTitle: 'Sujeto (Propietario)',
73
+ cardIssuerTitle: 'Emisor (CA)',
74
+ cardFingerprintsTitle: 'Huellas Digitales',
75
+ cardTechnicalTitle: 'Detalles Técnicos',
76
+ labelValidityStatus: 'Estado:',
77
+ labelExpiryDate: 'Vence el',
78
+ labelIssueDate: 'Emitido el',
79
+ labelSha256: 'SHA-256 Fingerprint',
80
+ labelSha1: 'SHA-1 Fingerprint',
81
+ labelSignatureAlgorithm: 'Algoritmo de Firma',
82
+ labelVersion: 'Versión X.509',
83
+ labelSerialNumber: 'Número de Serie',
84
+ labelCommonName: 'Common Name',
85
+ labelOrganization: 'Organization',
86
+ labelOrgUnit: 'Org. Unit',
87
+ labelLocality: 'Locality',
88
+ labelState: 'State/Province',
89
+ labelCountry: 'Country',
90
+ labelEmail: 'Email',
91
+ statusValid: 'Válido',
92
+ statusExpired: 'No válido',
93
+ errorMessageInvalid: 'Archivo no válido.',
94
+ supportedFormats: '.pem, .crt, .cer, .der',
95
+ };
96
+
97
+ export const content: ToolLocaleContent<InspectorCertificadosSslUI> = {
98
+ slug,
99
+ title,
100
+ description,
101
+ ui,
102
+ faqTitle: 'Preguntas Frecuentes',
103
+ faq: faqData,
104
+ bibliographyTitle: 'Recursos Técnicos sobre Certificados SSL/TLS',
105
+ bibliography: [
106
+ { name: 'RFC 5280: Internet X.509 Public Key Infrastructure Certificate and CRL Profile', url: 'https://datatracker.ietf.org/doc/html/rfc5280' },
107
+ { name: 'NIST: FIPS 180-4 Secure Hash Standard (SHA)', url: 'https://csrc.nist.gov/publications/detail/fips/180/4/final' },
108
+ { name: 'Mozilla: SSL/TLS Encryption Overview', url: 'https://developer.mozilla.org/en-US/docs/Glossary/TLS' },
109
+ { name: 'OpenSSL: X.509 Certificate Format Documentation', url: 'https://www.openssl.org/docs/man1.1.1/man1/x509.html' },
110
+ ],
111
+ howTo: howToData,
112
+ schemas: [faqSchema, howToSchema, appSchema],
113
+ seo: [
114
+ { type: 'title', text: '¿Qué es un Inspector de Certificados SSL/TLS y por qué lo necesitas?', level: 2 },
115
+ {
116
+ type: 'paragraph',
117
+ html: 'En el mundo del desarrollo web y la ciberseguridad, los <strong>certificados SSL (Secure Sockets Layer) y TLS (Transport Layer Security)</strong> son la piedra angular de la confianza. Un certificado digital no es más que un archivo que vincula una clave criptográfica con los datos de una organización o dominio. Sin embargo, estos archivos suelen venir en formatos binarios (.der) o codificados en Base64 (.pem, .crt) que no son legibles a simple vista.',
118
+ },
119
+ {
120
+ type: 'paragraph',
121
+ html: 'Nuestro <strong>Inspector de Certificados SSL/TLS</strong> te permite "abrir" estos archivos de forma visual y segura. A diferencia de las herramientas que consultan un dominio público (como el famoso test de SSL Labs), esta utilidad trabaja directamente con el archivo que tienes en tu dispositivo. Esto es vital cuando estás configurando servidores Nginx, Apache o cargando certificados en un Load Balancer de AWS o Google Cloud, y necesitas verificar que el archivo que tienes en la mano es el correcto antes de subirlo.',
122
+ },
123
+ { type: 'title', text: 'Cómo inspeccionar un archivo .pem o .crt paso a paso', level: 2 },
124
+ {
125
+ type: 'paragraph',
126
+ html: 'Analizar un certificado con nuestra herramienta es extremadamente sencillo y no requiere conocimientos de consola (OpenSSL). Sigue estos pasos:',
127
+ },
128
+ {
129
+ type: 'list',
130
+ items: [
131
+ '<strong>Localiza tu archivo:</strong> Busca el archivo con extensión .pem, .crt, .cer o .der en tu equipo.',
132
+ '<strong>Arrastra y suelta:</strong> Simplemente desliza el archivo sobre la zona punteada de arriba.',
133
+ '<strong>Visualiza los resultados:</strong> Instantáneamente verás quién emitió el certificado, para quién es, cuándo caduca y sus huellas digitales.',
134
+ ],
135
+ },
136
+ {
137
+ type: 'tip',
138
+ title: 'Privacidad Total',
139
+ html: 'Lo más importante de este proceso es la <strong>privacidad</strong>. El archivo nunca se sube a nuestros servidores. Todo el parseo de la estructura ASN.1 del certificado ocurre dentro de la memoria RAM de tu propio navegador. Seguridad total para tus claves públicas.',
140
+ },
141
+ { type: 'title', text: 'Campos clave que verás al analizar tu certificado', level: 2 },
142
+ {
143
+ type: 'paragraph',
144
+ html: 'Al analizar tu certificado, desglosamos la información técnica más relevante para que puedas verificarla de un vistazo:',
145
+ },
146
+ {
147
+ type: 'list',
148
+ items: [
149
+ '<strong>Sujeto (Subject):</strong> Muestra los datos del propietario, incluyendo el Common Name (CN), organización y ubicación.',
150
+ '<strong>Emisor (Issuer):</strong> Identifica a la Autoridad de Certificación (CA) que firmó el certificado (ej: Let\'s Encrypt, DigiCert).',
151
+ '<strong>Período de Validez:</strong> Muestra la fecha exacta de emisión y la fecha de expiración crítica.',
152
+ '<strong>Fingerprints (Huellas):</strong> Las huellas SHA-256 y SHA-1 sirven para verificar la integridad del archivo.',
153
+ ],
154
+ },
155
+ { type: 'title', text: 'Formatos compatibles: PEM, CRT, CER y DER', level: 2 },
156
+ {
157
+ type: 'paragraph',
158
+ html: 'Existen varios formatos de archivos certificados y a veces es confuso. Nuestra herramienta es compatible con los más habituales:',
159
+ },
160
+ {
161
+ type: 'list',
162
+ items: [
163
+ '<strong>PEM (.pem, .crt, .cer):</strong> Es el más común en Linux y servidores web. Empieza con la línea <code>-----BEGIN CERTIFICATE-----</code>.',
164
+ '<strong>DER (.der, .cer):</strong> Es el formato binario. Se usa mucho en entornos Windows (Java, Active Directory) y suele ser más difícil de leer sin herramientas especializadas.',
165
+ ],
166
+ },
167
+ {
168
+ type: 'paragraph',
169
+ html: 'Incluso si tu archivo tiene una extensión extraña, si la estructura interna es un certificado X.509 estándar, nuestro motor basado en <strong>node-forge</strong> podrá interpretarlo sin problemas.',
170
+ },
171
+ { type: 'title', text: '¿Por qué usar esta herramienta en lugar de OpenSSL?', level: 2 },
172
+ {
173
+ type: 'paragraph',
174
+ html: 'OpenSSL es la navaja suiza de la criptografía, pero sus comandos son difíciles de recordar. Para ver un certificado por consola tendrías que escribir:',
175
+ },
176
+ { type: 'code', text: 'openssl x509 -in certificado.crt -text -noout' },
177
+ {
178
+ type: 'paragraph',
179
+ html: 'Nuestra herramienta ofrece ventajas claras para el flujo de trabajo diario:',
180
+ },
181
+ {
182
+ type: 'list',
183
+ items: [
184
+ '<strong>Velocidad:</strong> No necesitas abrir la terminal ni recordar flags complejas.',
185
+ '<strong>Visual:</strong> Formateamos los nombres de los campos (Locality, Organization) para que sean legibles y no códigos cortos como "L" o "O".',
186
+ '<strong>Alertas de validez:</strong> Calculamos automáticamente si el certificado es válido hoy mismo, ahorrándote contrastar la fecha actual con la del certificado mentalmente.',
187
+ '<strong>Multiplataforma:</strong> Funciona en cualquier sistema operativo con un navegador moderno, sin instalar dependencias.',
188
+ ],
189
+ },
190
+ { type: 'title', text: 'Seguridad y Privacidad: El certificado NO sale de tu RAM', level: 2 },
191
+ {
192
+ type: 'paragraph',
193
+ html: 'Como desarrollador, sé lo crítico que es manejar este tipo de información. Aunque un certificado es técnicamente <strong>información pública</strong> (se envía a cualquier navegador que visite tu web), no deja de ser una buena práctica no subir archivos a servidores externos innecesariamente.',
194
+ },
195
+ {
196
+ type: 'paragraph',
197
+ html: 'Esta utilidad utiliza JavaScript que corre estrictamente en el cliente. Al arrastrar el archivo, leemos su contenido y lo procesamos localmente. Puedes comprobarlo desconectando tu internet: la herramienta seguirá funcionando exactamente igual.',
198
+ },
199
+ { type: 'title', text: 'Casos de uso comunes para el Inspector SSL', level: 2 },
200
+ {
201
+ type: 'paragraph',
202
+ html: '¿Cuándo te vendrá bien tener marcada esta página en favoritos?',
203
+ },
204
+ {
205
+ type: 'list',
206
+ items: [
207
+ '<strong>Debugging de servidores:</strong> Cuando instalas un certificado y la web sigue dando error, para verificar que no has cargado el certificado antiguo por error.',
208
+ '<strong>Verificación de cadenas (Chains):</strong> Para ver si un archivo contiene el certificado final o un certificado intermedio.',
209
+ '<strong>Auditoría de activos:</strong> Para comprobar qué Autoridad de Certificación se usó en un proyecto antiguo.',
210
+ '<strong>Integridad de copias:</strong> Al mover certificados entre servidores, para asegurar que el archivo no está corrupto comparando su SHA-256 fingerprint.',
211
+ ],
212
+ },
213
+ ],
214
+ };
@@ -0,0 +1,214 @@
1
+ import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
2
+ import type { ToolLocaleContent } from '../../../types';
3
+ import type { InspectorCertificadosSslUI } from '../ui';
4
+
5
+ const slug = 'inspecteur-certificats-ssl-tls';
6
+ const title = 'Inspecteur de Certificats SSL/TLS en Ligne Afficher les fichiers PEM et CRT';
7
+ const description = 'Analysez les fichiers de certificats SSL (.pem, .crt, .der) localement. Vérifiez les dates d\'expiration, les émetteurs, les sujets et les empreintes SHA-256 sans que vos données ne quittent votre navigateur.';
8
+
9
+ const faqData = [
10
+ {
11
+ question: 'Est-il sûr d\'analyser mon certificat SSL sur ce site web?',
12
+ answer: 'Absolument. Cet utilitaire fonctionne 100% côté client. Lorsque vous faites glisser votre fichier .pem ou .crt, le navigateur lit les données localement et ne les envoie jamais à aucun serveur. Confidentialité totale.',
13
+ },
14
+ {
15
+ question: 'Quels formats de certificats sont pris en charge?',
16
+ answer: 'L\'outil supporte les formats les plus courants: PEM (codé en Base64 avec les en-têtes "BEGIN CERTIFICATE") et DER (format binaire), qui ont généralement les extensions .pem, .crt, .cer ou .der.',
17
+ },
18
+ {
19
+ question: 'Puis-je voir la date d\'expiration d\'un fichier .crt?',
20
+ answer: 'Oui, lorsque vous chargez le fichier, vous verrez immédiatement la section "État de validité" qui affiche la date d\'expiration exacte et si le certificat est toujours valide aujourd\'hui.',
21
+ },
22
+ {
23
+ question: 'À quoi sert l\'émetteur du certificat?',
24
+ answer: 'L\'émetteur (Issuer) indique quelle Autorité de Certification (CA) a validé l\'identité du site. Il est essentiel de savoir si le certificat sera reconnu par les navigateurs commerciaux.',
25
+ },
26
+ {
27
+ question: 'Comment les empreintes SHA-256 sont-elles calculées?',
28
+ answer: 'Elles sont calculées en appliquant un algorithme de hachage directement au contenu binaire du certificat. Ils servent à vérifier que le fichier n\'a pas été altéré et correspond à ce que le serveur attend.',
29
+ },
30
+ ];
31
+
32
+ const howToData = [
33
+ { name: 'Trouvez votre fichier', text: 'Localisez le fichier avec l\'extension .pem, .crt, .cer ou .der sur votre ordinateur.' },
34
+ { name: 'Glisser-déposer', text: 'Faites simplement glisser le fichier sur la zone pointillée ci-dessus.' },
35
+ { name: 'Afficher les résultats', text: 'Instantanément, vous verrez qui a émis le certificat, pour qui il est, quand il expire et ses empreintes digitales.' },
36
+ ];
37
+
38
+ const faqSchema: WithContext<FAQPage> = {
39
+ '@context': 'https://schema.org',
40
+ '@type': 'FAQPage',
41
+ mainEntity: faqData.map((item) => ({
42
+ '@type': 'Question',
43
+ name: item.question,
44
+ acceptedAnswer: { '@type': 'Answer', text: item.answer },
45
+ })),
46
+ };
47
+
48
+ const howToSchema: WithContext<HowToThing> = {
49
+ '@context': 'https://schema.org',
50
+ '@type': 'HowTo',
51
+ name: title,
52
+ description,
53
+ step: howToData.map((s, i) => ({ '@type': 'HowToStep', position: i + 1, name: s.name, text: s.text })),
54
+ };
55
+
56
+ const appSchema: WithContext<SoftwareApplication> = {
57
+ '@context': 'https://schema.org',
58
+ '@type': 'SoftwareApplication',
59
+ name: title,
60
+ description,
61
+ applicationCategory: 'UtilityApplication',
62
+ operatingSystem: 'All',
63
+ offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
64
+ inLanguage: 'fr',
65
+ };
66
+
67
+ const ui: InspectorCertificadosSslUI = {
68
+ labelAnalyzeCertificate: 'Analyser le Certificat',
69
+ dragDropText: 'Glissez votre fichier .pem, .crt ou .cer ici',
70
+ dragDropSubtext: '(Traitement 100% local dans votre navigateur)',
71
+ cardStatusTitle: 'État de Validité',
72
+ cardSubjectTitle: 'Sujet (Propriétaire)',
73
+ cardIssuerTitle: 'Émetteur (CA)',
74
+ cardFingerprintsTitle: 'Empreintes',
75
+ cardTechnicalTitle: 'Détails Techniques',
76
+ labelValidityStatus: 'État:',
77
+ labelExpiryDate: 'Expire le',
78
+ labelIssueDate: 'Émis le',
79
+ labelSha256: 'Empreinte SHA-256',
80
+ labelSha1: 'Empreinte SHA-1',
81
+ labelSignatureAlgorithm: 'Algorithme de Signature',
82
+ labelVersion: 'Version X.509',
83
+ labelSerialNumber: 'Numéro de Série',
84
+ labelCommonName: 'Common Name',
85
+ labelOrganization: 'Organization',
86
+ labelOrgUnit: 'Org. Unit',
87
+ labelLocality: 'Locality',
88
+ labelState: 'State/Province',
89
+ labelCountry: 'Country',
90
+ labelEmail: 'Email',
91
+ statusValid: 'Valide',
92
+ statusExpired: 'Expiré',
93
+ errorMessageInvalid: 'Fichier invalide.',
94
+ supportedFormats: '.pem, .crt, .cer, .der',
95
+ };
96
+
97
+ export const content: ToolLocaleContent<InspectorCertificadosSslUI> = {
98
+ slug,
99
+ title,
100
+ description,
101
+ ui,
102
+ faqTitle: 'Questions Fréquemment Posées',
103
+ faq: faqData,
104
+ bibliographyTitle: 'Ressources Techniques sur les Certificats SSL/TLS',
105
+ bibliography: [
106
+ { name: 'RFC 5280: Internet X.509 Public Key Infrastructure Certificate and CRL Profile', url: 'https://datatracker.ietf.org/doc/html/rfc5280' },
107
+ { name: 'NIST: FIPS 180-4 Secure Hash Standard (SHA)', url: 'https://csrc.nist.gov/publications/detail/fips/180/4/final' },
108
+ { name: 'Mozilla: Vue d\'ensemble du chiffrement SSL/TLS', url: 'https://developer.mozilla.org/fr/docs/Glossary/TLS' },
109
+ { name: 'OpenSSL: Documentation du Format de Certificat X.509', url: 'https://www.openssl.org/docs/man1.1.1/man1/x509.html' },
110
+ ],
111
+ howTo: howToData,
112
+ schemas: [faqSchema, howToSchema, appSchema],
113
+ seo: [
114
+ { type: 'title', text: 'Qu\'est-ce qu\'un Inspecteur de Certificats SSL/TLS et pourquoi l\'avez-vous besoin?', level: 2 },
115
+ {
116
+ type: 'paragraph',
117
+ html: 'Dans le monde du développement web et de la cybersécurité, les <strong>certificats SSL (Secure Sockets Layer) et TLS (Transport Layer Security)</strong> sont la pierre angulaire de la confiance. Un certificat numérique n\'est rien de plus qu\'un fichier qui relie une clé cryptographique aux données d\'une organisation ou d\'un domaine. Cependant, ces fichiers se présentent souvent sous la forme de formats binaires (.der) ou codés en Base64 (.pem, .crt) qui ne sont pas lisibles à première vue.',
118
+ },
119
+ {
120
+ type: 'paragraph',
121
+ html: 'Notre <strong>Inspecteur de Certificats SSL/TLS</strong> vous permet "d\'ouvrir" ces fichiers de manière visuelle et sécurisée. Contrairement aux outils qui interrogent un domaine public (comme le célèbre test SSL Labs), cet utilitaire fonctionne directement avec le fichier que vous avez sur votre appareil. C\'est essentiel lorsque vous configurez des serveurs Nginx, Apache ou chargez des certificats dans un Load Balancer AWS ou Google Cloud, et que vous devez vérifier que le fichier entre vos mains est correct avant de le télécharger.',
122
+ },
123
+ { type: 'title', text: 'Comment inspecter un fichier .pem ou .crt étape par étape', level: 2 },
124
+ {
125
+ type: 'paragraph',
126
+ html: 'L\'analyse d\'un certificat avec notre outil est extrêmement simple et ne nécessite pas de connaissances en console (OpenSSL). Suivez ces étapes:',
127
+ },
128
+ {
129
+ type: 'list',
130
+ items: [
131
+ '<strong>Trouvez votre fichier:</strong> Localisez le fichier avec l\'extension .pem, .crt, .cer ou .der sur votre ordinateur.',
132
+ '<strong>Glisser-déposer:</strong> Faites simplement glisser le fichier sur la zone pointillée ci-dessus.',
133
+ '<strong>Afficher les résultats:</strong> Instantanément, vous verrez qui a émis le certificat, pour qui il est, quand il expire et ses empreintes digitales.',
134
+ ],
135
+ },
136
+ {
137
+ type: 'tip',
138
+ title: 'Confidentialité Complète',
139
+ html: 'La partie la plus importante de ce processus est la <strong>confidentialité</strong>. Le fichier n\'est jamais téléchargé sur nos serveurs. Tout le parsing de la structure ASN.1 du certificat se fait dans la RAM de votre propre navigateur. Sécurité complète pour vos clés publiques.',
140
+ },
141
+ { type: 'title', text: 'Champs clés que vous verrez lors de l\'analyse de votre certificat', level: 2 },
142
+ {
143
+ type: 'paragraph',
144
+ html: 'Lors de l\'analyse de votre certificat, nous décomposons les informations techniques les plus pertinentes afin que vous puissiez les vérifier en un coup d\'œil:',
145
+ },
146
+ {
147
+ type: 'list',
148
+ items: [
149
+ '<strong>Sujet:</strong> Affiche les données du propriétaire, y compris le Common Name (CN), l\'organisation et l\'emplacement.',
150
+ '<strong>Émetteur:</strong> Identifie l\'Autorité de Certification (CA) qui a signé le certificat (par exemple, Let\'s Encrypt, DigiCert).',
151
+ '<strong>Période de validité:</strong> Affiche la date d\'émission exacte et la date d\'expiration critique.',
152
+ '<strong>Empreintes:</strong> Les empreintes SHA-256 et SHA-1 servent à vérifier l\'intégrité du fichier.',
153
+ ],
154
+ },
155
+ { type: 'title', text: 'Formats pris en charge: PEM, CRT, CER et DER', level: 2 },
156
+ {
157
+ type: 'paragraph',
158
+ html: 'Il existe plusieurs formats de fichiers certificats et c\'est parfois déroutant. Notre outil est compatible avec les plus courants:',
159
+ },
160
+ {
161
+ type: 'list',
162
+ items: [
163
+ '<strong>PEM (.pem, .crt, .cer):</strong> Le format le plus courant sous Linux et les serveurs web. Commence par la ligne <code>-----BEGIN CERTIFICATE-----</code>.',
164
+ '<strong>DER (.der, .cer):</strong> Le format binaire. Largement utilisé dans les environnements Windows (Java, Active Directory) et est généralement plus difficile à lire sans outils spécialisés.',
165
+ ],
166
+ },
167
+ {
168
+ type: 'paragraph',
169
+ html: 'Même si votre fichier a une extension inhabituelle, si la structure interne est un certificat X.509 standard, notre moteur alimenté par <strong>node-forge</strong> sera capable de l\'interpréter sans problème.',
170
+ },
171
+ { type: 'title', text: 'Pourquoi utiliser cet outil au lieu de OpenSSL?', level: 2 },
172
+ {
173
+ type: 'paragraph',
174
+ html: 'OpenSSL est le couteau suisse de la cryptographie, mais ses commandes sont difficiles à retenir. Pour afficher un certificat à partir de la console, vous devriez écrire:',
175
+ },
176
+ { type: 'code', text: 'openssl x509 -in certificado.crt -text -noout' },
177
+ {
178
+ type: 'paragraph',
179
+ html: 'Notre outil offre des avantages clairs pour le flux de travail quotidien:',
180
+ },
181
+ {
182
+ type: 'list',
183
+ items: [
184
+ '<strong>Vitesse:</strong> Pas besoin d\'ouvrir le terminal ou de mémoriser des drapeaux complexes.',
185
+ '<strong>Visuel:</strong> Nous formatons les noms de champs (Locality, Organization) pour les rendre lisibles et non des codes courts comme "L" ou "O".',
186
+ '<strong>Alertes de validité:</strong> Nous calculons automatiquement si le certificat est valide aujourd\'hui, vous évitant de vérifier manuellement la date actuelle par rapport à la date du certificat.',
187
+ '<strong>Multiplateforme:</strong> Fonctionne sur tout système d\'exploitation avec un navigateur moderne, pas de dépendances à installer.',
188
+ ],
189
+ },
190
+ { type: 'title', text: 'Sécurité et Confidentialité: Votre certificat ne quitte jamais votre RAM', level: 2 },
191
+ {
192
+ type: 'paragraph',
193
+ html: 'En tant que développeur, je sais combien il est critique de gérer ce type d\'informations. Bien qu\'un certificat soit techniquement des <strong>informations publiques</strong> (envoyées à tout navigateur qui visite votre site web), c\'est une bonne pratique de ne pas télécharger des fichiers sur des serveurs externes inutilement.',
194
+ },
195
+ {
196
+ type: 'paragraph',
197
+ html: 'Cet utilitaire utilise JavaScript qui s\'exécute strictement sur le client. Lorsque vous glissez le fichier, nous en lisons le contenu et le traitons localement. Vous pouvez vérifier cela en déconnectant votre internet: l\'outil continuera à fonctionner exactement de la même manière.',
198
+ },
199
+ { type: 'title', text: 'Cas d\'utilisation courants pour l\'Inspecteur SSL', level: 2 },
200
+ {
201
+ type: 'paragraph',
202
+ html: 'Quand le signet de cette page serait-il utile?',
203
+ },
204
+ {
205
+ type: 'list',
206
+ items: [
207
+ '<strong>Débogage du serveur:</strong> Lorsque vous installez un certificat et que le site web continue à donner des erreurs, pour vérifier que vous n\'avez pas accidentellement chargé l\'ancien certificat.',
208
+ '<strong>Vérification de la chaîne:</strong> Pour voir si un fichier contient le certificat final ou un certificat intermédiaire.',
209
+ '<strong>Audit des actifs:</strong> Pour vérifier quelle Autorité de Certification a été utilisée dans un ancien projet.',
210
+ '<strong>Intégrité des copies:</strong> Lors du déplacement de certificats entre serveurs, pour vous assurer que le fichier n\'est pas corrompu en comparant son empreinte SHA-256.',
211
+ ],
212
+ },
213
+ ],
214
+ };