<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: PKI security</title>
    <description>The latest articles on DEV Community by PKI security (@pki-channnel).</description>
    <link>https://dev.to/pki-channnel</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4134970%2Ffc27163b-3c3c-411c-a9c5-169d8d46b82c.png</url>
      <title>DEV Community: PKI security</title>
      <link>https://dev.to/pki-channnel</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pki-channnel"/>
    <language>en</language>
    <item>
      <title>cert-manager 1.21.3: what a trust-store update means for your cluster</title>
      <dc:creator>PKI security</dc:creator>
      <pubDate>Wed, 04 Nov 2026 22:52:41 +0000</pubDate>
      <link>https://dev.to/pki-channnel/cert-manager-1213-what-a-trust-store-update-means-for-your-cluster-20i0</link>
      <guid>https://dev.to/pki-channnel/cert-manager-1213-what-a-trust-store-update-means-for-your-cluster-20i0</guid>
      <description>&lt;p&gt;The cert-manager project released &lt;a href="https://github.com/cert-manager/cert-manager/releases/tag/v1.21.3" rel="noopener noreferrer"&gt;v1.21.3 on October 23, 2026&lt;/a&gt;. Among other changes, it updates base images to remove the &lt;strong&gt;emSign ECC Root CA - G3&lt;/strong&gt; root certificate and uses Go 1.26.10, whose &lt;code&gt;crypto/x509&lt;/code&gt; rejects chains through the compromised intermediates described by the release. The project recommends that all users upgrade.&lt;/p&gt;

&lt;p&gt;This is a good moment to map which component trusts which CA. Updating the controller image is not equivalent to updating the trust stores of every application, ingress proxy, browser, or workload in the cluster. Likewise, an affected connection is not established merely because a cluster uses cert-manager: its actual peer chain and the trust configuration of the component making the connection matter.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxekoi2ye39zf0rq4l65y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxekoi2ye39zf0rq4l65y.png" alt="Trust boundaries: separate cert-manager's own trust from application trust" width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiogzi2di17cggsto1kvt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiogzi2di17cggsto1kvt.png" alt="Trust sources and connection checks" width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foz72v3fyfyct79upwg79.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foz72v3fyfyct79upwg79.png" alt="Upgrade review and renewal checks" width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Three other changes in the same release
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://github.com/cert-manager/cert-manager/releases/tag/v1.21.3" rel="noopener noreferrer"&gt;release notes&lt;/a&gt; also describe:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;ARI renewal loop fix.&lt;/strong&gt; Stale renewal information from the previous certificate could trigger repeated issuance until a CA rate limit was reached. The fix tracks the certificate ID and re-fetches renewal information for a new certificate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Next private-key Secret ownership.&lt;/strong&gt; The issuance controllers now check that the designated Secret has the expected label and is owned by the Certificate before consuming it. The release describes a scenario requiring permission to write the &lt;code&gt;certificates/status&lt;/code&gt; subresource.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Proxy values in Helm.&lt;/strong&gt; Proxy environment values are quoted during rendering, avoiding manifest breakage from values such as a wildcard pattern.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Those are distinct issues; a single “certificate bug” label would hide which evidence an operator needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical review before upgrading
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Inventory the cert-manager controller version, deployment method and Kubernetes version. Check the &lt;a href="https://cert-manager.io/docs/releases/" rel="noopener noreferrer"&gt;project’s supported-release table&lt;/a&gt; and vendor guidance where a distribution manages upgrades.&lt;/li&gt;
&lt;li&gt;Identify outbound connections made by cert-manager components, such as configured ACME or Vault endpoints. For each one, determine the chain and actual trust source before drawing conclusions about impact. &lt;a href="https://pki-channel.com/ja/commands/certificate-chain/" rel="noopener noreferrer"&gt;PKI Channel’s OpenSSL chain guide&lt;/a&gt; (Japanese) separates certificates sent by the peer from the independently trusted root, and shows hostname verification. Its OpenSSL result does not establish which trust store cert-manager actually uses.&lt;/li&gt;
&lt;li&gt;Read the release notes and applicable upgrade notes, then render and validate your own configuration in a non-production environment. Pay particular attention to proxy settings and Secret ownership assumptions.&lt;/li&gt;
&lt;li&gt;Exercise a representative issuance and renewal in that environment; verify the Secret and certificate presented by the intended endpoint. A successful controller rollout alone does not prove the application loaded a new certificate. If issuance stops or the endpoint still serves an older certificate, &lt;a href="https://pki-channel.com/ja/runbooks/cert-manager-renewal-stalled/" rel="noopener noreferrer"&gt;PKI Channel’s renewal runbook&lt;/a&gt; (Japanese) traces Certificate and CertificateRequest through the applicable ACME objects, then compares the Secret with the endpoint.&lt;/li&gt;
&lt;li&gt;Track failures, rollback conditions and the owner of each downstream connection. Do not restore a removed trust anchor merely to suppress an error; investigate the affected chain and use the vendor’s current incident guidance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are suggested checks, not tests performed for this article. The upstream release notes remain the source for the release-specific changes.&lt;/p&gt;




&lt;p&gt;AI assistance was used to draft the text and create the illustrations. The release-specific claims were checked against the upstream release notes; the suggested tests were not performed for this article.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>go</category>
      <category>kubernetes</category>
      <category>security</category>
    </item>
    <item>
      <title>Read a TLS certificate expiry check without turning every failure into expired</title>
      <dc:creator>PKI security</dc:creator>
      <pubDate>Sat, 31 Oct 2026 13:55:01 +0000</pubDate>
      <link>https://dev.to/pki-channnel/read-a-tls-certificate-expiry-check-without-turning-every-failure-into-expired-1kfm</link>
      <guid>https://dev.to/pki-channnel/read-a-tls-certificate-expiry-check-without-turning-every-failure-into-expired-1kfm</guid>
      <description>&lt;p&gt;A certificate monitor that reports “expired” whenever a command fails will eventually send you on the wrong investigation. A missing file, a TLS handshake failure and a certificate approaching its expiry are different observations.&lt;/p&gt;

&lt;p&gt;Start with a file you already know represents the certificate you intend to monitor. Later, add a separate acquisition step for the live endpoint. Keeping those steps distinct makes failures explainable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check the file before checking the threshold
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openssl x509 &lt;span class="nt"&gt;-in&lt;/span&gt; server.pem &lt;span class="nt"&gt;-noout&lt;/span&gt; &lt;span class="nt"&gt;-dates&lt;/span&gt; &lt;span class="nt"&gt;-ext&lt;/span&gt; subjectAltName
openssl x509 &lt;span class="nt"&gt;-in&lt;/span&gt; server.pem &lt;span class="nt"&gt;-noout&lt;/span&gt; &lt;span class="nt"&gt;-checkend&lt;/span&gt; 604800
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;604800&lt;/code&gt; is seven days in seconds. The &lt;code&gt;-checkend&lt;/code&gt; option checks whether the certificate expires within that interval and uses a nonzero exit status when it will. The display command gives you the actual dates and names to record. &lt;a href="https://docs.openssl.org/3.5/man1/openssl-x509/" rel="noopener noreferrer"&gt;OpenSSL 3.5 — openssl-x509&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Do not infer the reason from a nonzero status alone. A parse error also prevents a useful check. Verify that the input can be read, preserve standard error, and classify an unusable input as unknown.&lt;/p&gt;

&lt;p&gt;PKI Channel’s &lt;a href="https://pki-channel.com/en/articles/pki-monitoring#pki-observation-title" rel="noopener noreferrer"&gt;monitoring decision map&lt;/a&gt; provides a useful model for the states below: a missing measurement and a failed TLS probe need their own investigation paths, separate from the remaining lifetime.&lt;/p&gt;

&lt;h2&gt;
  
  
  A monitoring result needs a state
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;State&lt;/th&gt;
&lt;th&gt;Evidence&lt;/th&gt;
&lt;th&gt;Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Readable, beyond threshold&lt;/td&gt;
&lt;td&gt;Parsed dates and a successful threshold check&lt;/td&gt;
&lt;td&gt;Record the observation time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Readable, inside threshold&lt;/td&gt;
&lt;td&gt;Parsed expiry and threshold result&lt;/td&gt;
&lt;td&gt;Investigate renewal before the remaining time runs out&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Input unavailable or invalid&lt;/td&gt;
&lt;td&gt;Fetch or parse error&lt;/td&gt;
&lt;td&gt;Repair observation and investigate the endpoint&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wrong identity&lt;/td&gt;
&lt;td&gt;SAN does not cover the intended name&lt;/td&gt;
&lt;td&gt;Investigate routing or configuration&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;An “unknown” state is operationally useful. It says the monitor lacks evidence, rather than inventing a healthy or expired result. Decide separately when persistent unknown observations should page an operator.&lt;/p&gt;

&lt;h2&gt;
  
  
  The disk file may not be the served certificate
&lt;/h2&gt;

&lt;p&gt;Suppose renewal writes a new certificate to disk, but a process still holds the old one in memory. Monitoring only the file can report a healthy future expiry while clients receive the old certificate. A CDN adds another possible certificate owner.&lt;/p&gt;

&lt;p&gt;For endpoint monitoring, record the hostname, port, network location and certificate obtained from that connection. Validate the peer according to the intended trust configuration. An expiry date extracted from an unverified connection is an observation, not proof of the endpoint's authenticated identity. &lt;a href="https://www.rfc-editor.org/rfc/rfc8446.html" rel="noopener noreferrer"&gt;RFC 8446 — TLS 1.3&lt;/a&gt; / &lt;a href="https://www.rfc-editor.org/rfc/rfc9525.html" rel="noopener noreferrer"&gt;RFC 9525 — Service Identity in TLS&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To choose an alert threshold, use the &lt;a href="https://pki-channel.com/en/articles/short-lived-certificates" rel="noopener noreferrer"&gt;short-lived certificate operations guide&lt;/a&gt; to work backward from detection, retry, deployment and recovery time. A fixed number of days is only useful when the team can complete that work within it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choosing the threshold
&lt;/h2&gt;

&lt;p&gt;Seven days is an example, not a universal recommendation. Work backward from the time needed to detect a failed update, reach the responsible person, repair validation, deploy the replacement and confirm it from the client side. If that process takes longer than your alert window, a technically correct monitor will still warn too late.&lt;/p&gt;

&lt;p&gt;Keep the issued certificate's full lifetime separate from the remaining lifetime at observation time. Shorter issuance limits do not tell you exactly when a particular certificate will expire.&lt;/p&gt;

&lt;h2&gt;
  
  
  A record worth retaining
&lt;/h2&gt;

&lt;p&gt;Store observation time, target, expiry, remaining time, state, collection error and owner. Avoid overwriting the last known expiry with a blank value when collection fails. Preserve the old observation with its timestamp and add a new unknown result. That makes a gap visible without pretending stale data is current.&lt;/p&gt;

&lt;h2&gt;
  
  
  Primary sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.openssl.org/3.5/man1/openssl-x509/" rel="noopener noreferrer"&gt;OpenSSL 3.5 — openssl-x509&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc8446.html" rel="noopener noreferrer"&gt;RFC 8446 — TLS 1.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc9525.html" rel="noopener noreferrer"&gt;RFC 9525 — Service Identity in TLS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>security</category>
      <category>beginners</category>
    </item>
    <item>
      <title>ARI gives your ACME client a renewal window, not a deployment receipt</title>
      <dc:creator>PKI security</dc:creator>
      <pubDate>Thu, 29 Oct 2026 14:52:12 +0000</pubDate>
      <link>https://dev.to/pki-channnel/ari-gives-your-acme-client-a-renewal-window-not-a-deployment-receipt-2fjm</link>
      <guid>https://dev.to/pki-channnel/ari-gives-your-acme-client-a-renewal-window-not-a-deployment-receipt-2fjm</guid>
      <description>&lt;p&gt;A certificate renewal job often starts from a local timer. ACME Renewal Information, or ARI, adds a way for the CA to suggest when a certificate should be renewed. The useful operational question is what your system does with that suggestion and what evidence it records afterward.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/8dwvh8jv7vnegx7xiy9e.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7ndp1bi2u05lpfi52ait.png" alt="CA advice: The CA supplies a suggested renewal window through ARI. Client action: The client schedules renewal and records failures or fallback. Deployment: Retrieve, deploy and reload the resulting certificate. Readback: Observe the certificate served on the intended connection." width="800" height="668"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Operational design; no ARI renewal has been executed for this article.&lt;/p&gt;

&lt;h2&gt;
  
  
  Treat the window as scheduling input
&lt;/h2&gt;

&lt;p&gt;RFC 9773 defines ARI so an ACME server can communicate a suggested renewal window. A client can use that information when choosing when to renew. This allows the CA and client to coordinate beyond a fixed local fraction of certificate lifetime.&lt;/p&gt;

&lt;p&gt;First verify that the CA and the installed client version support the extension. A documentation page about ARI does not establish that a particular scheduled job is using it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Observe the client’s actual behavior
&lt;/h2&gt;

&lt;p&gt;Record which certificate was considered, when renewal information was checked, the suggested window and the chosen action. Include failures to retrieve information and the fallback behavior.&lt;/p&gt;

&lt;p&gt;Avoid creating a dashboard that reports missing renewal information as a successful “no action needed” result. Unknown and failed retrievals deserve their own states.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep issuance and deployment separate
&lt;/h2&gt;

&lt;p&gt;After a renewal order succeeds, the certificate still needs to reach every relevant TLS terminator. The server may need a reload, and the external connection needs a readback check. ARI does not perform those application-specific steps for you.&lt;/p&gt;

&lt;p&gt;A renewal receipt should therefore include certificate retrieval, deployment targets, reload outcome and the certificate actually observed on a fresh connection.&lt;/p&gt;

&lt;h2&gt;
  
  
  Design a small failure exercise
&lt;/h2&gt;

&lt;p&gt;In a test environment, ask what happens when the client is offline during part of the suggested window, when retrieval fails, and when issuance succeeds but deployment fails. Use the client’s official testing mechanisms and avoid repeated production orders.&lt;/p&gt;

&lt;p&gt;This article proposes the observation fields, not a measured ARI success rate. The improvement is knowing whether the scheduling signal became a working deployed certificate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Primary sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc9773.html" rel="noopener noreferrer"&gt;RFC 9773: ACME Renewal Information&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc8555.html" rel="noopener noreferrer"&gt;RFC 8555: ACME&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Further reading on PKI Channel
&lt;/h2&gt;

&lt;p&gt;The following Japanese-language guides add diagrams and operational detail to the questions discussed above.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pki-channel.com/ja/articles/acme-ari-operations?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=owned_media&amp;amp;utm_content=own-b108-1"&gt;ACME ARI：更新推奨期間・再試行・配信確認 (Japanese)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pki-channel.com/ja/articles/acme-renewal-deployment-design?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=owned_media&amp;amp;utm_content=own-b108-2"&gt;ACME更新運用：発行・配置・reload・配信確認 (Japanese)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;AI was used for research assistance, writing and illustration. Examples and checklists are explanatory, not reported lab results.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>security</category>
    </item>
    <item>
      <title>WebAuthn has an origin and an RP ID. Keep both in your design notes</title>
      <dc:creator>PKI security</dc:creator>
      <pubDate>Wed, 28 Oct 2026 11:04:53 +0000</pubDate>
      <link>https://dev.to/pki-channnel/webauthn-has-an-origin-and-an-rp-id-keep-both-in-your-design-notes-2cdk</link>
      <guid>https://dev.to/pki-channnel/webauthn-has-an-origin-and-an-rp-id-keep-both-in-your-design-notes-2cdk</guid>
      <description>&lt;p&gt;When adding passkeys, developers encounter both the browser origin and the relying party identifier, or RP ID. They are related but serve different checks. WebAuthn calls a registration or authentication interaction a ceremony; the word refers to that exchange between the application, browser and authenticator. A clear integration note helps prevent a working demo from becoming a loosely scoped production login.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/yeacj9108k9esqiq0evo.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgugifj5rhhxr3nk3vf58.png" alt="Origin: Server policy lists the web origins accepted for the ceremony. RP ID: Credentials are scoped to the relying party under browser rules. Server checks: Verify challenge, signature and required user verification." width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Conceptual WebAuthn review; not an implementation or conformance test.&lt;/p&gt;

&lt;h2&gt;
  
  
  Name the web application precisely
&lt;/h2&gt;

&lt;p&gt;An origin includes scheme, host and port. The server verifies the origin in the client data against the origins it accepts for the ceremony. An RP ID scopes the credential to the relying party under WebAuthn’s rules.&lt;/p&gt;

&lt;p&gt;Do not reduce both values to “our domain” in documentation. That phrase hides whether a development port, a production subdomain or another application is included.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let the browser enforce its part
&lt;/h2&gt;

&lt;p&gt;The browser mediates access to credentials and enforces RP ID constraints. The authenticator signs data tied to the ceremony. The server still has its own checks, including the challenge and expected origin, and should use a well-maintained WebAuthn library.&lt;/p&gt;

&lt;p&gt;A browser prompt appearing is not proof that the server verified every required field correctly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Separate local experiments from deployment policy
&lt;/h2&gt;

&lt;p&gt;List the actual registration and authentication origins for development, staging and production. Decide which service owns each account namespace and credential record. Avoid broad exceptions added only to make a demo work across environments.&lt;/p&gt;

&lt;p&gt;If a deployment requires related-origin functionality or cross-device flows, follow the current standard and library guidance rather than inventing string-matching rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use a reviewable ceremony checklist
&lt;/h2&gt;

&lt;p&gt;Record challenge creation and one-time use, expected origins, RP ID, credential lookup, signature verification and user verification requirements. Then test rejection cases as well as a successful login.&lt;/p&gt;

&lt;p&gt;The aim is a small configuration contract, not a custom implementation of cryptography. Passkeys reduce important phishing risks through scoping, but an application must preserve those boundaries in its server-side checks and account recovery design.&lt;/p&gt;

&lt;h2&gt;
  
  
  Primary sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.w3.org/TR/webauthn-3/" rel="noopener noreferrer"&gt;W3C: WebAuthn Level 3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fidoalliance.org/passkeys/" rel="noopener noreferrer"&gt;FIDO Alliance: Passkeys&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Further reading on PKI Channel
&lt;/h2&gt;

&lt;p&gt;The following Japanese-language guides add diagrams and operational detail to the questions discussed above.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pki-channel.com/ja/articles/fido2-webauthn-ctap-passkey?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=owned_media&amp;amp;utm_content=own-b107-1"&gt;FIDO2・WebAuthn・CTAP・パスキーの関係を一枚で理解する (Japanese)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pki-channel.com/ja/articles/why-passkeys-are-phishing-resistant?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=owned_media&amp;amp;utm_content=own-b107-2"&gt;パスキーはなぜフィッシングに強いのか。防げない攻撃も解説 (Japanese)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;AI was used for research assistance, writing and illustration. Examples and checklists are explanatory, not reported lab results.&lt;/p&gt;

</description>
      <category>security</category>
    </item>
    <item>
      <title>Decoding a JWT is not validating it: a beginner’s acceptance checklist</title>
      <dc:creator>PKI security</dc:creator>
      <pubDate>Mon, 26 Oct 2026 14:07:17 +0000</pubDate>
      <link>https://dev.to/pki-channnel/decoding-a-jwt-is-not-validating-it-a-beginners-acceptance-checklist-3cle</link>
      <guid>https://dev.to/pki-channnel/decoding-a-jwt-is-not-validating-it-a-beginners-acceptance-checklist-3cle</guid>
      <description>&lt;p&gt;JWT means JSON Web Token: a format for carrying claims, such as statements about a subject or recipient. Many JWT debugging tools display a readable payload immediately. This is useful for learning the structure, but readable claims have not necessarily been authenticated. Before using a claim to grant access, identify the token type and apply a validation policy designed for that use.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/kbrsy88v3f3vp8i2voax.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fobosq81mevarahh2c5t6.png" alt="Decode: Read the structure; readable claims are still untrusted. Verify: Use an approved key and an allowed algorithm. Validate: Check issuer, audience, time and the intended token use. Authorize: Apply application permissions after token validation." width="800" height="668"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Acceptance checklist; no production token is shown.&lt;/p&gt;

&lt;h2&gt;
  
  
  Distinguish the envelope
&lt;/h2&gt;

&lt;p&gt;A commonly encountered JWT uses JWS (JSON Web Signature) to protect integrity. Its encoded payload can be readable without a secret. Encryption is a separate mechanism, such as JWE. Do not put sensitive information into a signed token on the assumption that the signature hides it.&lt;/p&gt;

&lt;p&gt;Avoid pasting real access tokens into public debugging websites. A bearer token can grant access even when its payload seems uninteresting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Choose policy before inspecting attacker-controlled fields
&lt;/h2&gt;

&lt;p&gt;The verifier should know which algorithms, issuers and audiences it accepts. Do not let an untrusted token redefine that policy simply by declaring an algorithm or naming a key. Use a maintained library and the framework’s supported integration path.&lt;/p&gt;

&lt;p&gt;Successful signature verification is one gate. The application must also decide whether this token was issued for this recipient and this kind of operation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check time and intended recipient
&lt;/h2&gt;

&lt;p&gt;Validate required issuer, audience and time-related claims according to the application’s token profile. A token valid for one service may be inappropriate for another. A token intended for one purpose should not silently become acceptable in a different flow.&lt;/p&gt;

&lt;p&gt;Write down the small clock tolerance, if any, and why it exists. A large tolerance added to silence failures changes the acceptance policy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Turn mistakes into test cases
&lt;/h2&gt;

&lt;p&gt;Create tests for a wrong audience, wrong issuer, expired token, unsupported algorithm and a token from a different flow. Use test credentials and synthetic claims, never live user tokens in a public fixture.&lt;/p&gt;

&lt;p&gt;The checklist is: parse, verify under fixed policy, validate claims, then apply authorization. The exact order inside a library can differ, but no earlier convenience step should be mistaken for permission to trust the payload.&lt;/p&gt;

&lt;h2&gt;
  
  
  Primary sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc8725.html" rel="noopener noreferrer"&gt;RFC 8725: JWT Best Current Practices&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc7515.html" rel="noopener noreferrer"&gt;RFC 7515: JSON Web Signature&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Further reading on PKI Channel
&lt;/h2&gt;

&lt;p&gt;The following Japanese-language guides add diagrams and operational detail to the questions discussed above.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pki-channel.com/ja/articles/what-is-jwt?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=owned_media&amp;amp;utm_content=own-b106-1"&gt;JWTとは何か：JWS署名・JWKS・X.509を分けて検証する (Japanese)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pki-channel.com/ja/articles/what-is-digital-signature?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=owned_media&amp;amp;utm_content=own-b106-2"&gt;デジタル署名とは何か (Japanese)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;AI was used for research assistance, writing and illustration. Examples and checklists are explanatory, not reported lab results.&lt;/p&gt;

</description>
      <category>security</category>
      <category>beginners</category>
    </item>
    <item>
      <title>JWK and X.509 answer different questions about a public key</title>
      <dc:creator>PKI security</dc:creator>
      <pubDate>Fri, 23 Oct 2026 12:47:37 +0000</pubDate>
      <link>https://dev.to/pki-channnel/jwk-and-x509-answer-different-questions-about-a-public-key-4oo5</link>
      <guid>https://dev.to/pki-channnel/jwk-and-x509-answer-different-questions-about-a-public-key-4oo5</guid>
      <description>&lt;p&gt;A JSON Web Key and an X.509 certificate can both expose public key information. That does not make them interchangeable trust objects. If you are integrating an API, first separate the key representation from the reason your application accepts that key.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/plm5tm4kvxii6t2meysl.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1nq36t83agnibsqp062c.png" alt="JWK: JSON represents key material and optional metadata. X.509: An issuer signs a certificate containing a public key and claims. Trust policy: The application checks source, identity, purpose and allowed use." width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Format comparison; parsing alone does not establish trust.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with the representation
&lt;/h2&gt;

&lt;p&gt;JWK is a JSON representation of a cryptographic key. Its members describe the key type and key material, with optional metadata. Some JWKs contain private parameters, so a file being JSON does not make it safe to publish.&lt;/p&gt;

&lt;p&gt;X.509 certificates package a public key with other information and an issuer signature. Their acceptance depends on certificate path validation and application-specific checks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ask where trust enters
&lt;/h2&gt;

&lt;p&gt;If an application downloads a JWK Set from a trusted configuration endpoint, the trust relationship includes how that endpoint was selected and protected. A key identifier such as kid helps select a key; it does not independently prove that the key is authorized.&lt;/p&gt;

&lt;p&gt;A certificate also needs an accepted trust path and appropriate identity and purpose checks. Merely parsing either format is not a trust decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understand the optional bridge
&lt;/h2&gt;

&lt;p&gt;JWK can include an x5c member containing a certificate chain. That creates a relationship between formats, but it does not remove the need to check consistency or validate the chain according to the application’s rules.&lt;/p&gt;

&lt;p&gt;Avoid treating a supplied chain as a new trust anchor just because it arrived alongside the key. The sender should not get to choose the verifier’s trust policy implicitly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Write a key intake note
&lt;/h2&gt;

&lt;p&gt;For an API integration, document format, source URL or configuration source, permitted algorithms, expected issuer or identity, rotation method and failure behavior. Include whether private material is allowed in that location.&lt;/p&gt;

&lt;p&gt;The result should explain both how to read the key and why to accept it. That is a more useful beginner deliverable than memorizing which file extension belongs to which format.&lt;/p&gt;

&lt;h2&gt;
  
  
  Primary sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc7517.html" rel="noopener noreferrer"&gt;RFC 7517: JSON Web Key&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc5280.html" rel="noopener noreferrer"&gt;RFC 5280: PKIX&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Further reading on PKI Channel
&lt;/h2&gt;

&lt;p&gt;The following Japanese-language guides add diagrams and operational detail to the questions discussed above.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pki-channel.com/ja/articles/what-is-jwt?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=owned_media&amp;amp;utm_content=own-b105-1"&gt;JWTとは何か：JWS署名・JWKS・X.509を分けて検証する (Japanese)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pki-channel.com/ja/articles/what-is-x509?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=owned_media&amp;amp;utm_content=own-b105-2"&gt;X.509とは何か：署名構造と検証層を分けて読む (Japanese)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;AI was used for research assistance, writing and illustration. Examples and checklists are explanatory, not reported lab results.&lt;/p&gt;

</description>
      <category>security</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Offboarding an mTLS client takes more than deleting its certificate file</title>
      <dc:creator>PKI security</dc:creator>
      <pubDate>Thu, 22 Oct 2026 14:16:19 +0000</pubDate>
      <link>https://dev.to/pki-channnel/offboarding-an-mtls-client-takes-more-than-deleting-its-certificate-file-4jdb</link>
      <guid>https://dev.to/pki-channnel/offboarding-an-mtls-client-takes-more-than-deleting-its-certificate-file-4jdb</guid>
      <description>&lt;p&gt;A device is retired and its certificate file is deleted from the device. Is access removed? That depends on copies of the key, the server’s certificate checks, application permissions and existing sessions. An offboarding checklist should follow those separate paths.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev-to-uploads.s3.us-east-2.amazonaws.com/uploads/articles/xgoxf64z98emz6krp344.png" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxnwf4pqt0yovpddzzzyl.png" alt="Credential: Identify the certificate and possible key copies. Policy: Remove the intended access and inspect verifier behavior. Sessions: Check fresh connections and existing application sessions separately. Evidence: Record the effective time, tested paths and unknowns." width="800" height="668"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Offboarding design; no revocation or access test was performed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Identify the credential and the permissions
&lt;/h2&gt;

&lt;p&gt;Record the client certificate identity, issuer, serial number or fingerprint, associated account and allowed operations. Do not place private key material in the ticket. A certificate authenticates a credential; the application still needs a policy that maps it to access.&lt;/p&gt;

&lt;p&gt;This distinction gives you two different questions: can the client authenticate, and what can an authenticated client do? Removing a file answers neither question for other copies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check how the server rejects retired credentials
&lt;/h2&gt;

&lt;p&gt;Depending on the system, rejection may involve revocation checking, a local deny list, short certificate lifetimes or an application-level account policy. Determine what is actually implemented. Do not assume that publishing a CRL makes every client or server consume it immediately.&lt;/p&gt;

&lt;p&gt;Document the verifier, its update behavior and the maximum expected delay. Unknown behavior should remain unknown until tested.&lt;/p&gt;

&lt;h2&gt;
  
  
  Include sessions and duplicate installations
&lt;/h2&gt;

&lt;p&gt;A credential may have been installed on more than one device. An existing application session may also outlive the TLS connection that created it. Identify where access persists and which component can terminate it.&lt;/p&gt;

&lt;p&gt;Use an authorized test account to verify the expected denial. A successful administrative click is useful evidence of the requested change, but it is not the same as observing access denied at the service boundary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Close with a bounded result
&lt;/h2&gt;

&lt;p&gt;A practical record includes credential identifier, policy changed, effective time, test endpoint, observed outcome and untested paths. Explain whether the test used a fresh connection, an existing session or both.&lt;/p&gt;

&lt;p&gt;This makes offboarding auditable without claiming instant global revocation. The checklist is a design aid; it does not establish that your particular mTLS service checks revocation or invalidates sessions automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Primary sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc5280.html" rel="noopener noreferrer"&gt;RFC 5280: PKIX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc8446.html" rel="noopener noreferrer"&gt;RFC 8446: TLS 1.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://csrc.nist.gov/pubs/sp/800/57/pt1/r5/final" rel="noopener noreferrer"&gt;NIST SP 800-57 Part 1 Rev. 5&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Further reading on PKI Channel
&lt;/h2&gt;

&lt;p&gt;The following Japanese-language guides add diagrams and operational detail to the questions discussed above.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pki-channel.com/ja/articles/mtls-workload-identity?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=owned_media&amp;amp;utm_content=own-b104-1"&gt;mTLSとワークロードID：双方の認証と権限の判断を図解 (Japanese)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pki-channel.com/ja/articles/private-ca-revocation?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=owned_media&amp;amp;utm_content=own-b104-2"&gt;プライベートCAの失効設計 (Japanese)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;AI was used for research assistance, writing and illustration. Examples and checklists are explanatory, not reported lab results.&lt;/p&gt;

</description>
      <category>security</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Before you add certificate pinning, write the rotation story</title>
      <dc:creator>PKI security</dc:creator>
      <pubDate>Mon, 19 Oct 2026 14:25:42 +0000</pubDate>
      <link>https://dev.to/pki-channnel/before-you-add-certificate-pinning-write-the-rotation-story-2h0h</link>
      <guid>https://dev.to/pki-channnel/before-you-add-certificate-pinning-write-the-rotation-story-2h0h</guid>
      <description>&lt;p&gt;Certificate pinning can narrow the credentials an application accepts, but it also adds a dependency between the server and shipped clients. For a beginner evaluating pinning, the most useful first artifact is a rotation story: what happens when the accepted key needs to change?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpb9ulrlphpvk9pfho99i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpb9ulrlphpvk9pfho99i.png" alt="Choose the object: Specify the certificate or key material the client accepts. Plan the change: Check old clients, backup material and update paths. Exercise recovery: Test planned and emergency changes before enforcing the policy." width="800" height="1815"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Design checklist; no pinning configuration has been deployed.&lt;/p&gt;

&lt;h2&gt;
  
  
  List what the application would pin
&lt;/h2&gt;

&lt;p&gt;A certificate, a public key and an issuer restriction have different replacement behavior. Do not use the word pin without specifying the object and the implementation that enforces it. Check the platform documentation before choosing a configuration.&lt;/p&gt;

&lt;p&gt;Android documentation explicitly discusses the operational risks of pinning and recommends caution. A copied example is not evidence that pinning is appropriate for your application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Imagine the old clients
&lt;/h2&gt;

&lt;p&gt;Consider an app installed on a phone that has not received an update for months. If the server moves to a key the client does not accept, that client may lose connectivity. Your recovery plan cannot depend entirely on fetching an update through the connection that is now blocked.&lt;/p&gt;

&lt;p&gt;This is a hypothetical failure exercise. It does not mean every pinning deployment fails, but it reveals a dependency you need to own.&lt;/p&gt;

&lt;h2&gt;
  
  
  Design the change before enforcing it
&lt;/h2&gt;

&lt;p&gt;Document the current accepted material, backup material where supported, client update path, overlap period and conditions for retirement. Some platforms support a pin expiration time; understand what protection remains after that time instead of treating it as a free recovery mechanism.&lt;/p&gt;

&lt;p&gt;Also consider an emergency key compromise. Keeping an old compromised key accepted merely to avoid disruption can defeat the reason for changing it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use an acceptance table
&lt;/h2&gt;

&lt;p&gt;Create rows for current clients, delayed updates, planned rotation, emergency rotation and recovery without the old endpoint. For each row, state expected behavior and the evidence you need.&lt;/p&gt;

&lt;p&gt;If you cannot maintain that lifecycle, reconsider the design with the platform security guidance. Pinning is a continuing compatibility and security commitment. The value of this exercise is finding that commitment before users depend on it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Primary sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://developer.android.com/privacy-and-security/security-config" rel="noopener noreferrer"&gt;Android: Network Security Configuration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Further reading on PKI Channel
&lt;/h2&gt;

&lt;p&gt;The following Japanese-language guides add diagrams and operational detail to the questions discussed above.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pki-channel.com/ja/articles/certificate-pinning?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=owned_media&amp;amp;utm_content=own-b103-1"&gt;Certificate Pinningの考え方 (Japanese)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pki-channel.com/ja/articles/key-algorithm-migration?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=owned_media&amp;amp;utm_content=own-b103-2"&gt;鍵アルゴリズム移行の進め方 (Japanese)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;AI was used for research assistance, writing and illustration. Examples and checklists are explanatory, not reported lab results.&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>mobile</category>
      <category>security</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Make the CA bundle part of your deployment contract</title>
      <dc:creator>PKI security</dc:creator>
      <pubDate>Sun, 18 Oct 2026 13:43:00 +0000</pubDate>
      <link>https://dev.to/pki-channnel/make-the-ca-bundle-part-of-your-deployment-contract-27g0</link>
      <guid>https://dev.to/pki-channnel/make-the-ca-bundle-part-of-your-deployment-contract-27g0</guid>
      <description>&lt;p&gt;A service works on a developer laptop and fails in CI with a certificate error. Before adding an insecure flag, ask a more useful question: which trust configuration belongs to the application being deployed? A small deployment contract can make that answer repeatable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvptfqz0hfjkmshbrh3u8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvptfqz0hfjkmshbrh3u8.png" alt="Identify the verifier: Record the runtime that actually checks the peer certificate. Control the source: Use the approved CA source and assign its update owner. Test recreation: Recreate the deployment and test the normal application path." width="800" height="1815"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Conceptual workflow; no runtime compatibility test is claimed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Describe the verifier, not just the machine
&lt;/h2&gt;

&lt;p&gt;A machine can host several TLS implementations. The operating system, a container image and an application runtime may use different trust settings. A successful browser request therefore does not establish that the application will accept the same certificate.&lt;/p&gt;

&lt;p&gt;Write down the executable, runtime version, TLS backend where relevant, and configuration source. This identifies the verifier whose behavior matters. Avoid copying a CA file merely because another program happened to use it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Give the bundle an owner
&lt;/h2&gt;

&lt;p&gt;If your organization distributes a private CA, identify its approved source, update owner and retirement procedure. Treat the file as security configuration with a reviewable change history. It normally does not contain a private key, but changing it can change which issuers the application trusts.&lt;/p&gt;

&lt;p&gt;A useful contract has five fields: application, trust source, installation path, update mechanism and owner. Store references to approved material rather than secrets in this document.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test the artifact you will actually run
&lt;/h2&gt;

&lt;p&gt;Installing a CA in a running container can help diagnose a problem, but the change may disappear when that container is replaced. Decide how the intended configuration enters the deployable image or runtime configuration. Then repeat the ordinary application request after recreation.&lt;/p&gt;

&lt;p&gt;Keep certificate verification enabled. A separate diagnostic client can provide clues, but its success is not the acceptance result for the application. Record the exact artifact and environment tested.&lt;/p&gt;

&lt;h2&gt;
  
  
  Plan removal as well as addition
&lt;/h2&gt;

&lt;p&gt;A bundle that only grows is difficult to reason about. Ask which services still depend on a retiring CA and how a failed connection will be detected. Stage the change using an approved environment before applying it broadly.&lt;/p&gt;

&lt;p&gt;The practical deliverable is a deployment note that explains who the application trusts and why. This article proposes that note; it does not report a compatibility test across runtimes or recommend importing an arbitrary certificate encountered during a failed connection.&lt;/p&gt;

&lt;h2&gt;
  
  
  Primary sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.docker.com/engine/network/ca-certs/" rel="noopener noreferrer"&gt;Docker: CA certificates&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://curl.se/docs/sslcerts.html" rel="noopener noreferrer"&gt;curl: TLS certificate verification&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Further reading on PKI Channel
&lt;/h2&gt;

&lt;p&gt;The following Japanese-language guides add diagrams and operational detail to the questions discussed above.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://pki-channel.com/ja/articles/what-is-root-store?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=owned_media&amp;amp;utm_content=own-b102-1"&gt;ルートストアとは：証明書の信頼の起点を選ぶ仕組み (Japanese)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pki-channel.com/ja/articles/private-ca-trust-distribution?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=owned_media&amp;amp;utm_content=own-b102-2"&gt;社内ルート証明書の配布設計 (Japanese)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;AI was used for research assistance, writing and illustration. Examples and checklists are explanatory, not reported lab results.&lt;/p&gt;

</description>
      <category>security</category>
      <category>beginners</category>
    </item>
    <item>
      <title>What happens when a certificate is revoked? OCSP and CRLs for beginners</title>
      <dc:creator>PKI security</dc:creator>
      <pubDate>Sat, 17 Oct 2026 02:59:41 +0000</pubDate>
      <link>https://dev.to/pki-channnel/what-happens-when-a-certificate-is-revoked-ocsp-and-crls-for-beginners-41kd</link>
      <guid>https://dev.to/pki-channnel/what-happens-when-a-certificate-is-revoked-ocsp-and-crls-for-beginners-41kd</guid>
      <description>&lt;p&gt;A certificate can still have time left before its expiry date when its issuer revokes it. If you are new to HTTPS, it helps to keep two questions separate: &lt;strong&gt;Is the current time inside the certificate’s validity period?&lt;/strong&gt; and &lt;strong&gt;Has the issuer withdrawn this certificate?&lt;/strong&gt; Neither answer completes every certificate check.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftxbnqufcz1ji4knrh3em.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftxbnqufcz1ji4knrh3em.png" alt="Expiry compares time with the certificate validity period. Revocation is an issuer status decision. CRLs are scoped signed lists and OCSP provides signed status responses. Authority, scope, signature and freshness matter. OCSP good is not a complete verdict and unknown is not good. Delivery and acceptance depend on the client." width="800" height="1639"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Conceptual status-reading diagram. It does not show a live browser request or a tested revocation result.&lt;/p&gt;

&lt;h2&gt;
  
  
  Expiry and revocation describe different things
&lt;/h2&gt;

&lt;p&gt;The certificate carries a validity period. Revocation is a later status decision, for example after a key compromise or an issuance problem. It does not erase copies of the certificate from servers or computers.&lt;/p&gt;

&lt;p&gt;Clients need a way to obtain and assess relevant status information. &lt;a href="https://www.rfc-editor.org/rfc/rfc5280.html" rel="noopener noreferrer"&gt;RFC 5280&lt;/a&gt; describes certificates and certificate revocation lists, including the signed data and time fields used to evaluate a list.&lt;/p&gt;

&lt;h2&gt;
  
  
  CRLs and OCSP give status information in different forms
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mechanism&lt;/th&gt;
&lt;th&gt;What you inspect&lt;/th&gt;
&lt;th&gt;What still matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CRL: certificate revocation list&lt;/td&gt;
&lt;td&gt;A signed list, within its issuer and distribution scope, identifying revoked certificates&lt;/td&gt;
&lt;td&gt;Issuer, scope, signature and freshness&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OCSP: Online Certificate Status Protocol&lt;/td&gt;
&lt;td&gt;A signed response describing the status of a requested certificate&lt;/td&gt;
&lt;td&gt;Response authority, signature, time and the stated status&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Do not treat a certificate’s serial number as a globally unique identifier. The issuer is also part of identifying the certificate whose status you are checking. A list can also have a limited scope, so absence from an arbitrary CRL is not proof that every relevant check passed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Read an OCSP status precisely
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.rfc-editor.org/rfc/rfc6960.html" rel="noopener noreferrer"&gt;RFC 6960&lt;/a&gt; defines &lt;code&gt;good&lt;/code&gt;, &lt;code&gt;revoked&lt;/code&gt; and &lt;code&gt;unknown&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;good&lt;/code&gt; is a positive status response. It does not, by itself, establish every certificate property or even necessarily prove that the certificate was issued.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;revoked&lt;/code&gt; is a negative status that needs attention. The protocol also describes particular cases such as certificates on hold and non-issued certificates.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;unknown&lt;/code&gt; means the responder does not know about the requested certificate. It is not a substitute for &lt;code&gt;good&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A familiar-looking status string is not enough. The response must also be checked under the appropriate authority and time conditions. Name matching, the certificate’s own validity period and its trust path remain separate checks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Do not assume every browser makes the same live request
&lt;/h2&gt;

&lt;p&gt;Status delivery and acceptance depend on the client, its configuration and the issuer’s services. Responses may be cached or delivered with the TLS connection through stapling, rather than fetched directly by the visitor. &lt;a href="https://www.rfc-editor.org/rfc/rfc6961.html" rel="noopener noreferrer"&gt;RFC 6961&lt;/a&gt; discusses TLS certificate-status delivery. It is a protocol reference, not a claim that every current browser uses that exact mechanism.&lt;/p&gt;

&lt;p&gt;Public TLS issuance requirements also evolve. The &lt;a href="https://cabforum.org/working-groups/server/baseline-requirements/requirements/" rel="noopener noreferrer"&gt;CA/Browser Forum Baseline Requirements&lt;/a&gt; include CRL requirements and allow OCSP as an optional service. Before designing monitoring, check the actual issuer and client behaviour. A failed request to one URL is neither a complete revocation verdict nor an excuse to disable verification.&lt;/p&gt;

&lt;h2&gt;
  
  
  A worksheet for your first status investigation
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Certificate issuer and serial number: ____.&lt;/li&gt;
&lt;li&gt;Hostname and service presenting it: ____.&lt;/li&gt;
&lt;li&gt;Certificate validity period: ____.&lt;/li&gt;
&lt;li&gt;Relevant status source and its scope: ____.&lt;/li&gt;
&lt;li&gt;Response status, signature/authority check and freshness: ____.&lt;/li&gt;
&lt;li&gt;Client, version and configuration used: ____.&lt;/li&gt;
&lt;li&gt;What was observed, and what remains unconfirmed: ____.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No command or production test was executed for this article. The worksheet helps record evidence without inventing a successful result.&lt;/p&gt;

&lt;p&gt;For the broader incident handoff, PKI Channel’s &lt;a href="https://pki-channel.com/en/articles/revocation-ocsp-crl?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=owned_media&amp;amp;utm_content=own-b026-1"&gt;revocation operations guide&lt;/a&gt; connects status information to the service and response process. For command-level study, its &lt;a href="https://pki-channel.com/ja/commands/ocsp-crl/?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=owned_media&amp;amp;utm_content=own-b026-2"&gt;OCSP/CRL reading guide&lt;/a&gt; is in Japanese and separates response verification from the certificate-status result.&lt;/p&gt;




&lt;p&gt;AI was used for source review and drafting.&lt;/p&gt;

</description>
      <category>security</category>
      <category>tls</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Make provenance travel with public-interest images: a C2PA handoff checklist for small teams</title>
      <dc:creator>PKI security</dc:creator>
      <pubDate>Sat, 10 Oct 2026 00:40:46 +0000</pubDate>
      <link>https://dev.to/pki-channnel/make-provenance-travel-with-public-interest-images-a-c2pa-handoff-checklist-for-small-teams-118h</link>
      <guid>https://dev.to/pki-channnel/make-provenance-travel-with-public-interest-images-a-c2pa-handoff-checklist-for-small-teams-118h</guid>
      <description>&lt;p&gt;A community organization photographs a local event. A volunteer edits the images, a colleague uploads them, and a partner republishes one with a new caption. By the time a reader asks where the photograph came from, nobody is sure which copy was approved.&lt;/p&gt;

&lt;p&gt;This hypothetical handoff is ordinary enough to be easy to overlook. For public-interest information, a lost original or changed caption can make a correction much harder. Small teams need a process that survives a change of person, tool, and file.&lt;/p&gt;

&lt;h2&gt;
  
  
  C2PA helps with provenance; the handoff still needs people
&lt;/h2&gt;

&lt;p&gt;C2PA can bind signed provenance records to an asset. Those records may describe creation, editing, and source materials. They provide evidence about the asset's history within the scope of what was recorded. They do not certify the truth of a caption, grant publication rights, or guarantee that all previous activity is known. See the &lt;a href="https://spec.c2pa.org/specifications/specifications/2.4/explainer/Explainer.html" rel="noopener noreferrer"&gt;official C2PA explainer&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The practical aim is to preserve both the useful technical evidence and the human context needed to interpret it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkwd3b5rb7v7h3zkbnn4g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkwd3b5rb7v7h3zkbnn4g.png" alt="Keep the received file separate from the publication copy. Pass on the source, caption, permissions and contact privately. Record the credential result for what the reader receives. Name an owner who can update the caption and notify recipients." width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Conceptual illustration with fictional scenes, not a real verification result. The recorded fields depend on the file and software.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Preserve the original&lt;/strong&gt;: Keep the received file separate from the publication copy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Carry the context&lt;/strong&gt;: Pass on the source, caption, permissions and contact privately.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check the delivered copy&lt;/strong&gt;: Record the credential result for what the reader receives.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plan corrections&lt;/strong&gt;: Name an owner who can update the caption and notify recipients.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Keep four things distinguishable
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Why keep it separate?&lt;/th&gt;
&lt;th&gt;Suggested handling&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Received original&lt;/td&gt;
&lt;td&gt;Later transforms may change the file and its readable provenance&lt;/td&gt;
&lt;td&gt;Preserve it with appropriate access controls&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Working and publication copies&lt;/td&gt;
&lt;td&gt;The approved edit and the delivered file may differ&lt;/td&gt;
&lt;td&gt;Give each version an identifier and record its role&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Caption and source notes&lt;/td&gt;
&lt;td&gt;Text outside the image is not automatically covered by image verification&lt;/td&gt;
&lt;td&gt;Track the caption, source URL, and unresolved claims&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Private coordination record&lt;/td&gt;
&lt;td&gt;Contact details and sensitive context need not be public&lt;/td&gt;
&lt;td&gt;Keep access restricted and assign a responsible person&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This is a proposed operating checklist, not a standard mandated by C2PA. A file hash can help distinguish two exact byte sequences, but it does not prove a photograph's truth, authorship, or permission status.&lt;/p&gt;

&lt;h2&gt;
  
  
  At intake: ask what you actually received
&lt;/h2&gt;

&lt;p&gt;Record who supplied the file to the team, where it was obtained, and which facts are confirmed or unknown. Do not fill in a missing capture time from memory. Keep the received caption beside the file, and mark any later caption revisions separately.&lt;/p&gt;

&lt;p&gt;Clarify the intended publication and any restrictions with the relevant people. A record that can be verified cryptographically is not evidence that a person depicted agreed to every possible reuse.&lt;/p&gt;

&lt;h2&gt;
  
  
  During editing: preserve the chain you can explain
&lt;/h2&gt;

&lt;p&gt;Work on a copy. Note the tool, version, and operations that matter for understanding the image. Where your supported workflow produces a new manifest for an edited asset, retain the relationship to its ingredients as intended by that workflow.&lt;/p&gt;

&lt;p&gt;Do not add a new record to an old photograph and describe that as recovery of its complete past. A new record can describe the operation now performed; it cannot create trustworthy knowledge of earlier events that were never recorded. The &lt;a href="https://spec.c2pa.org/specifications/specifications/2.2/guidance/Guidance.html" rel="noopener noreferrer"&gt;implementation guidance&lt;/a&gt; is a starting point for planning supported edit and distribution workflows.&lt;/p&gt;

&lt;p&gt;Avoid placing sensitive contact details into a record just because the software offers a field. C2PA's &lt;a href="https://spec.c2pa.org/specifications/specifications/2.4/security/Harms_Modelling.html" rel="noopener noreferrer"&gt;harms analysis&lt;/a&gt; explains why privacy and later rediscovery of earlier information need consideration before publication.&lt;/p&gt;

&lt;h2&gt;
  
  
  At delivery: check what a reader receives
&lt;/h2&gt;

&lt;p&gt;An upload completing successfully is not evidence that the final delivered file has the same readable provenance as the original. A content management system, thumbnail service, or content delivery network may transform the image.&lt;/p&gt;

&lt;p&gt;Have the reviewer obtain the actual delivered copy and note:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;which URL and file were checked;&lt;/li&gt;
&lt;li&gt;the verifier and version, including relevant trust configuration;&lt;/li&gt;
&lt;li&gt;which recorded details were readable and which checks completed;&lt;/li&gt;
&lt;li&gt;any errors or unknowns, without relabeling them as proof of false content;&lt;/li&gt;
&lt;li&gt;whether the surrounding caption still matches the approved explanation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This article reports no measured preservation rate and no completed tool comparison. Run and record these checks in your own environment before making a claim about your pipeline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make correction ownership part of the package
&lt;/h2&gt;

&lt;p&gt;Before handing a file to a partner, decide who receives a correction request and who contacts downstream publishers. Keep a short version note that can be shared without exposing private sources. Replacing one copy on your own website does not recall copies held elsewhere.&lt;/p&gt;

&lt;p&gt;A useful handoff ends with a statement such as: “This is the approved publication copy. The date in the caption remains unconfirmed. Contact the designated editor before reusing it as evidence of a current event.” It gives the next person something concrete to act on.&lt;/p&gt;

&lt;p&gt;PKI Channel's &lt;a href="https://pki-channel.com/ja/articles/c2pa-implementation-playbook?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=owned_media&amp;amp;utm_content=own-b059-1"&gt;implementation playbook in Japanese&lt;/a&gt; and &lt;a href="https://pki-channel.com/ja/articles/c2pa-image-sharing-test?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=owned_media&amp;amp;utm_content=own-b059-2"&gt;image-sharing verification guide in Japanese&lt;/a&gt; provide further checklists for planning this work. The goal is not to attach a badge to every picture. It is to make the evidence, limits, and responsibility travel with the image.&lt;/p&gt;




&lt;p&gt;AI was used for research assistance, writing and illustration.&lt;/p&gt;

</description>
      <category>security</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Missing Content Credentials is not a guilty verdict: build a fair upload flow</title>
      <dc:creator>PKI security</dc:creator>
      <pubDate>Sat, 10 Oct 2026 00:37:40 +0000</pubDate>
      <link>https://dev.to/pki-channnel/missing-content-credentials-is-not-a-guilty-verdict-build-a-fair-upload-flow-106</link>
      <guid>https://dev.to/pki-channnel/missing-content-credentials-is-not-a-guilty-verdict-build-a-fair-upload-flow-106</guid>
      <description>&lt;p&gt;Imagine a neighborhood newsroom accepting photographs after a storm. One contributor uses a new camera with provenance support. Another sends a useful photograph from an older phone. A third avoids identifying metadata because publication could put someone at risk.&lt;/p&gt;

&lt;p&gt;These are hypothetical contributors, not the results of an experiment. They illustrate a design problem: an upload form can turn a technical signal into an unfair judgment about a person.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do not make the absence of Content Credentials a verdict that a photograph is false.&lt;/strong&gt; C2PA's own &lt;a href="https://spec.c2pa.org/specifications/specifications/2.4/security/Harms_Modelling.html" rel="noopener noreferrer"&gt;harms analysis&lt;/a&gt; discusses the risk of treating content without credentials as untrustworthy. A fair flow needs a path for incomplete evidence.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the credential contributes
&lt;/h2&gt;

&lt;p&gt;C2PA specifies ways to bind provenance claims to a digital asset and sign those claims. Provenance may describe creation, editing, or source materials. A verifier can evaluate the binding, signature, and other applicable requirements. The result depends on what was recorded and on the verification environment.&lt;/p&gt;

&lt;p&gt;This is useful evidence. It is not proof that the depicted event happened as described, that every earlier step was recorded, or that the uploader has permission to publish. The &lt;a href="https://spec.c2pa.org/specifications/specifications/2.4/explainer/Explainer.html" rel="noopener noreferrer"&gt;official explainer&lt;/a&gt; draws these boundaries.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdhg076n1g7nkh73eegne.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdhg076n1g7nkh73eegne.png" alt="A missing credential does not prove that a photo is false. Separate not found, invalid and unable to check. Ask for context or a source without demanding public identity. Record what is known and unknown before deciding." width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Conceptual illustration with fictional scenes, not a real verification result. The recorded fields depend on the file and software.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Keep the submission&lt;/strong&gt;: A missing credential does not prove that a photo is false.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Describe the result&lt;/strong&gt;: Separate not found, invalid and unable to check.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offer another route&lt;/strong&gt;: Ask for context or a source without demanding public identity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review fairly&lt;/strong&gt;: Record what is known and unknown before deciding.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Model the result before choosing a badge
&lt;/h2&gt;

&lt;p&gt;For a beginner-friendly product, start with distinct states. The following labels are a proposed interface model, not C2PA API constants:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Product state&lt;/th&gt;
&lt;th&gt;What to tell the contributor&lt;/th&gt;
&lt;th&gt;What happens next&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Not found&lt;/td&gt;
&lt;td&gt;We did not find readable provenance in this copy&lt;/td&gt;
&lt;td&gt;Keep the submission and offer another way to provide context&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Invalid&lt;/td&gt;
&lt;td&gt;Some verification checks did not pass&lt;/td&gt;
&lt;td&gt;Record the specific finding and route for review&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unable to check&lt;/td&gt;
&lt;td&gt;This check could not be completed&lt;/td&gt;
&lt;td&gt;Explain the limitation and offer a retry or review&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Checks completed&lt;/td&gt;
&lt;td&gt;Show the supported findings and relevant recorded details&lt;/td&gt;
&lt;td&gt;Continue the editorial checks appropriate to the submission&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;An invalid result is also not a complete explanation of what happened. A transformation, unsupported feature, changed asset, or other condition needs investigation in its actual context. Preserve the verifier's detailed result for an appropriately authorized reviewer; do not collapse every problem into “fake.”&lt;/p&gt;

&lt;p&gt;Use plain text as well as any icon. A red shield or green check alone hides the scope of the assessment and is inaccessible to some readers. C2PA's &lt;a href="https://spec.c2pa.org/specifications/specifications/2.2/ux/UX_Recommendations.html" rel="noopener noreferrer"&gt;UX guidance&lt;/a&gt; is useful when deciding how to reveal details without presenting provenance as a universal authenticity score.&lt;/p&gt;

&lt;h2&gt;
  
  
  Offer context without demanding public exposure
&lt;/h2&gt;

&lt;p&gt;A contributor might provide an original file, the original publication URL, or an explanation of where the image came from. Make clear which fields are optional, who can read them, and what will become public.&lt;/p&gt;

&lt;p&gt;Do not demand a public home address or precise location as the price of a fair review. An authorized editor may need a private follow-up channel, but that channel should not silently become part of a public image description. Collect information for a stated purpose, with the minimum access needed for that purpose.&lt;/p&gt;

&lt;p&gt;Also keep “permission to publish” separate from “provenance verified.” A well-formed record does not stand in for a discussion about consent, licensing, or the safety of people depicted. Those checks depend on your organization and the use of the image.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try the flow with three paper scenarios
&lt;/h2&gt;

&lt;p&gt;Before implementation, walk through these cases with your team:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;An older device produces an image with no supported credential. Can the contributor still submit it for review?&lt;/li&gt;
&lt;li&gt;A supported image passes through a resizing service. If verification changes, can the editor inspect the received copy and the original separately?&lt;/li&gt;
&lt;li&gt;A contributor declines to expose identifying metadata. Is there a private route for necessary follow-up, rather than an automatic public credibility penalty?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These are proposed review scenarios. No software, detector, or upload pipeline was tested for this article. They can help expose a flawed decision rule before you write code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Give the reviewer an outcome other than guilty or innocent
&lt;/h2&gt;

&lt;p&gt;A useful review note might read: “No readable credential was found in the submitted copy. The contributor supplied an original publication URL. The location claim remains unconfirmed.” That is more actionable than a single trust score.&lt;/p&gt;

&lt;p&gt;Keep a route for corrections and contributor responses. Provenance can make a submission easier to investigate; it should not make people with older devices, limited resources, or safety concerns disappear from the process.&lt;/p&gt;

&lt;p&gt;For further technical context, PKI Channel provides a &lt;a href="https://pki-channel.com/ja/articles/what-is-c2pa?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=owned_media&amp;amp;utm_content=own-b058-1"&gt;C2PA overview in Japanese&lt;/a&gt; and a &lt;a href="https://pki-channel.com/ja/articles/c2pa-verification-workflow?utm_source=dev.to&amp;amp;utm_medium=referral&amp;amp;utm_campaign=owned_media&amp;amp;utm_content=own-b058-2"&gt;verification workflow in Japanese&lt;/a&gt;. Use them to plan the checks, then document the exact tools and policies used in your own deployment.&lt;/p&gt;




&lt;p&gt;AI was used for research assistance, writing and illustration.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>security</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
