Skip to content

Add DENO_CERT environment variable for Deno TLS support - #97

Merged
ammario merged 1 commit into
coder:mainfrom
magurotuna:add-deno-cert
Dec 24, 2025
Merged

Add DENO_CERT environment variable for Deno TLS support#97
ammario merged 1 commit into
coder:mainfrom
magurotuna:add-deno-cert

Conversation

@magurotuna

Copy link
Copy Markdown
Contributor

This adds DENO_CERT environment variable to make Deno programs trust httpjail's proxy CA certificate.

httpjail sets environment variables like SSL_CERT_FILE, NODE_EXTRA_CA_CERTS, etc. to make programs trust the proxy's CA. However, Deno uses its own DENO_CERT variable, causing Deno programs to fail with certificate errors:

root@86de9af35c35:/# httpjail --js "r.host === 'example.com'" -- deno eval"const r = await fetch('https://example.com'); console.log(r.status); await r.bytes();"03:44:15.504 ERROR httpjail::proxy_tls: TLS handshake failed: received fatal alert: UnknownCA03:44:15.504 ERROR httpjail::proxy: Error handling HTTPS connection: received fatal alert: UnknownCAerror: Uncaught (in promise) TypeError: error sending request for url (https://example.com/): client error (Connect): invalid peer certificate: UnknownIssuerconst r = await fetch('https://example.com'); console.log(r.status); await r.bytes(); ^ at async mainFetch (ext:deno_fetch/26_fetch.js:192:12) at async fetch (ext:deno_fetch/26_fetch.js:475:11) at async file:///test/$deno$eval.mts:1:11 hint: Run again with the `--unsafely-ignore-certificate-errors` flag to bypass certificate errors.

To fix this issue, DENO_CERT is added to the list of environment variables set by httpjail. With this patch, Deno throws no errors anymore:

root@905d9a57c5be:/# httpjail --js "r.host === 'example.com'" -- deno eval"const r = await fetch('https://example.com'); console.log(r.status); await r.bytes();"200

This manual testing was performed using the Dockerfile below.

FROM rust:1.92.0-bookworm AS builder
WORKDIR /build
COPY . .
RUN cargo build --profile fast
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y \
curl \
ca-certificates \
nftables \
iproute2 \
procps \
unzip \
&& rm -rf /var/lib/apt/lists/*
# Install Node.js 24RUN curl -fsSL https://deb.nodesource.com/setup_24.x | bash - \
&& apt-get install -y nodejs
# Install DenoRUN curl -fsSL https://deno.land/install.sh | DENO_INSTALL=/usr/local sh
# Copy httpjail binaryCOPY --from=builder /build/target/fast/httpjail /usr/local/bin/httpjail
WORKDIR /
CMD ["/bin/bash"]

Closes#96

Deno uses DENO_CERT instead of standard SSL_CERT_FILE to specify
custom CA certificates. Without this, Deno programs fail with
certificate errors when running under httpjail.
@ammario
ammario enabled auto-merge (squash) December 24, 2025 19:09
@ammario
ammario disabled auto-merge December 24, 2025 19:28
@ammario
ammario merged commit 9fddbed into coder:mainDec 24, 2025
5 of 6 checks passed
@magurotuna
magurotuna deleted the add-deno-cert branch December 25, 2025 05:41
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add DENO_CERT environment variable for Deno TLS support

2 participants

@magurotuna@ammario
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Add DENO_CERT environment variable for Deno TLS support by magurotuna · Pull Request #97 · coder/httpjail · GitHub
Skip to content

Add DENO_CERT environment variable for Deno TLS support - #97

Merged
ammario merged 1 commit into
coder:mainfrom
magurotuna:add-deno-cert
Dec 24, 2025
Merged

Add DENO_CERT environment variable for Deno TLS support#97
ammario merged 1 commit into
coder:mainfrom
magurotuna:add-deno-cert

Conversation

@magurotuna

Copy link
Copy Markdown
Contributor

This adds DENO_CERT environment variable to make Deno programs trust httpjail's proxy CA certificate.

httpjail sets environment variables like SSL_CERT_FILE, NODE_EXTRA_CA_CERTS, etc. to make programs trust the proxy's CA. However, Deno uses its own DENO_CERT variable, causing Deno programs to fail with certificate errors:

root@86de9af35c35:/# httpjail --js "r.host === 'example.com'" -- deno eval"const r = await fetch('https://example.com'); console.log(r.status); await r.bytes();"03:44:15.504 ERROR httpjail::proxy_tls: TLS handshake failed: received fatal alert: UnknownCA03:44:15.504 ERROR httpjail::proxy: Error handling HTTPS connection: received fatal alert: UnknownCAerror: Uncaught (in promise) TypeError: error sending request for url (https://example.com/): client error (Connect): invalid peer certificate: UnknownIssuerconst r = await fetch('https://example.com'); console.log(r.status); await r.bytes(); ^ at async mainFetch (ext:deno_fetch/26_fetch.js:192:12) at async fetch (ext:deno_fetch/26_fetch.js:475:11) at async file:///test/$deno$eval.mts:1:11 hint: Run again with the `--unsafely-ignore-certificate-errors` flag to bypass certificate errors.

To fix this issue, DENO_CERT is added to the list of environment variables set by httpjail. With this patch, Deno throws no errors anymore:

root@905d9a57c5be:/# httpjail --js "r.host === 'example.com'" -- deno eval"const r = await fetch('https://example.com'); console.log(r.status); await r.bytes();"200

This manual testing was performed using the Dockerfile below.

FROM rust:1.92.0-bookworm AS builder
WORKDIR /build
COPY . .
RUN cargo build --profile fast
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y \
curl \
ca-certificates \
nftables \
iproute2 \
procps \
unzip \
&& rm -rf /var/lib/apt/lists/*
# Install Node.js 24RUN curl -fsSL https://deb.nodesource.com/setup_24.x | bash - \
&& apt-get install -y nodejs
# Install DenoRUN curl -fsSL https://deno.land/install.sh | DENO_INSTALL=/usr/local sh
# Copy httpjail binaryCOPY --from=builder /build/target/fast/httpjail /usr/local/bin/httpjail
WORKDIR /
CMD ["/bin/bash"]

Closes#96

Deno uses DENO_CERT instead of standard SSL_CERT_FILE to specify
custom CA certificates. Without this, Deno programs fail with
certificate errors when running under httpjail.
@ammario
ammario enabled auto-merge (squash) December 24, 2025 19:09
@ammario
ammario disabled auto-merge December 24, 2025 19:28
@ammario
ammario merged commit 9fddbed into coder:mainDec 24, 2025
5 of 6 checks passed
@magurotuna
magurotuna deleted the add-deno-cert branch December 25, 2025 05:41
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add DENO_CERT environment variable for Deno TLS support

2 participants

@magurotuna@ammario
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Add DENO_CERT environment variable for Deno TLS support by magurotuna · Pull Request #97 · coder/httpjail · GitHub
Skip to content

Add DENO_CERT environment variable for Deno TLS support - #97

Merged
ammario merged 1 commit into
coder:mainfrom
magurotuna:add-deno-cert
Dec 24, 2025
Merged

Add DENO_CERT environment variable for Deno TLS support#97
ammario merged 1 commit into
coder:mainfrom
magurotuna:add-deno-cert

Conversation

@magurotuna

Copy link
Copy Markdown
Contributor

This adds DENO_CERT environment variable to make Deno programs trust httpjail's proxy CA certificate.

httpjail sets environment variables like SSL_CERT_FILE, NODE_EXTRA_CA_CERTS, etc. to make programs trust the proxy's CA. However, Deno uses its own DENO_CERT variable, causing Deno programs to fail with certificate errors:

root@86de9af35c35:/# httpjail --js "r.host === 'example.com'" -- deno eval"const r = await fetch('https://example.com'); console.log(r.status); await r.bytes();"03:44:15.504 ERROR httpjail::proxy_tls: TLS handshake failed: received fatal alert: UnknownCA03:44:15.504 ERROR httpjail::proxy: Error handling HTTPS connection: received fatal alert: UnknownCAerror: Uncaught (in promise) TypeError: error sending request for url (https://example.com/): client error (Connect): invalid peer certificate: UnknownIssuerconst r = await fetch('https://example.com'); console.log(r.status); await r.bytes(); ^ at async mainFetch (ext:deno_fetch/26_fetch.js:192:12) at async fetch (ext:deno_fetch/26_fetch.js:475:11) at async file:///test/$deno$eval.mts:1:11 hint: Run again with the `--unsafely-ignore-certificate-errors` flag to bypass certificate errors.

To fix this issue, DENO_CERT is added to the list of environment variables set by httpjail. With this patch, Deno throws no errors anymore:

root@905d9a57c5be:/# httpjail --js "r.host === 'example.com'" -- deno eval"const r = await fetch('https://example.com'); console.log(r.status); await r.bytes();"200

This manual testing was performed using the Dockerfile below.

FROM rust:1.92.0-bookworm AS builder
WORKDIR /build
COPY . .
RUN cargo build --profile fast
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y \
curl \
ca-certificates \
nftables \
iproute2 \
procps \
unzip \
&& rm -rf /var/lib/apt/lists/*
# Install Node.js 24RUN curl -fsSL https://deb.nodesource.com/setup_24.x | bash - \
&& apt-get install -y nodejs
# Install DenoRUN curl -fsSL https://deno.land/install.sh | DENO_INSTALL=/usr/local sh
# Copy httpjail binaryCOPY --from=builder /build/target/fast/httpjail /usr/local/bin/httpjail
WORKDIR /
CMD ["/bin/bash"]

Closes#96

Deno uses DENO_CERT instead of standard SSL_CERT_FILE to specify
custom CA certificates. Without this, Deno programs fail with
certificate errors when running under httpjail.
@ammario
ammario enabled auto-merge (squash) December 24, 2025 19:09
@ammario
ammario disabled auto-merge December 24, 2025 19:28
@ammario
ammario merged commit 9fddbed into coder:mainDec 24, 2025
5 of 6 checks passed
@magurotuna
magurotuna deleted the add-deno-cert branch December 25, 2025 05:41
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add DENO_CERT environment variable for Deno TLS support

2 participants

@magurotuna@ammario
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Add DENO_CERT environment variable for Deno TLS support by magurotuna · Pull Request #97 · coder/httpjail · GitHub
Skip to content

Add DENO_CERT environment variable for Deno TLS support - #97

Merged
ammario merged 1 commit into
coder:mainfrom
magurotuna:add-deno-cert
Dec 24, 2025
Merged

Add DENO_CERT environment variable for Deno TLS support#97
ammario merged 1 commit into
coder:mainfrom
magurotuna:add-deno-cert

Conversation

@magurotuna

Copy link
Copy Markdown
Contributor

This adds DENO_CERT environment variable to make Deno programs trust httpjail's proxy CA certificate.

httpjail sets environment variables like SSL_CERT_FILE, NODE_EXTRA_CA_CERTS, etc. to make programs trust the proxy's CA. However, Deno uses its own DENO_CERT variable, causing Deno programs to fail with certificate errors:

root@86de9af35c35:/# httpjail --js "r.host === 'example.com'" -- deno eval"const r = await fetch('https://example.com'); console.log(r.status); await r.bytes();"03:44:15.504 ERROR httpjail::proxy_tls: TLS handshake failed: received fatal alert: UnknownCA03:44:15.504 ERROR httpjail::proxy: Error handling HTTPS connection: received fatal alert: UnknownCAerror: Uncaught (in promise) TypeError: error sending request for url (https://example.com/): client error (Connect): invalid peer certificate: UnknownIssuerconst r = await fetch('https://example.com'); console.log(r.status); await r.bytes(); ^ at async mainFetch (ext:deno_fetch/26_fetch.js:192:12) at async fetch (ext:deno_fetch/26_fetch.js:475:11) at async file:///test/$deno$eval.mts:1:11 hint: Run again with the `--unsafely-ignore-certificate-errors` flag to bypass certificate errors.

To fix this issue, DENO_CERT is added to the list of environment variables set by httpjail. With this patch, Deno throws no errors anymore:

root@905d9a57c5be:/# httpjail --js "r.host === 'example.com'" -- deno eval"const r = await fetch('https://example.com'); console.log(r.status); await r.bytes();"200

This manual testing was performed using the Dockerfile below.

FROM rust:1.92.0-bookworm AS builder
WORKDIR /build
COPY . .
RUN cargo build --profile fast
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y \
curl \
ca-certificates \
nftables \
iproute2 \
procps \
unzip \
&& rm -rf /var/lib/apt/lists/*
# Install Node.js 24RUN curl -fsSL https://deb.nodesource.com/setup_24.x | bash - \
&& apt-get install -y nodejs
# Install DenoRUN curl -fsSL https://deno.land/install.sh | DENO_INSTALL=/usr/local sh
# Copy httpjail binaryCOPY --from=builder /build/target/fast/httpjail /usr/local/bin/httpjail
WORKDIR /
CMD ["/bin/bash"]

Closes#96

Deno uses DENO_CERT instead of standard SSL_CERT_FILE to specify
custom CA certificates. Without this, Deno programs fail with
certificate errors when running under httpjail.
@ammario
ammario enabled auto-merge (squash) December 24, 2025 19:09
@ammario
ammario disabled auto-merge December 24, 2025 19:28
@ammario
ammario merged commit 9fddbed into coder:mainDec 24, 2025
5 of 6 checks passed
@magurotuna
magurotuna deleted the add-deno-cert branch December 25, 2025 05:41
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add DENO_CERT environment variable for Deno TLS support

2 participants

@magurotuna@ammario
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Add DENO_CERT environment variable for Deno TLS support by magurotuna · Pull Request #97 · coder/httpjail · GitHub
Skip to content

Add DENO_CERT environment variable for Deno TLS support - #97

Merged
ammario merged 1 commit into
coder:mainfrom
magurotuna:add-deno-cert
Dec 24, 2025
Merged

Add DENO_CERT environment variable for Deno TLS support#97
ammario merged 1 commit into
coder:mainfrom
magurotuna:add-deno-cert

Conversation

@magurotuna

Copy link
Copy Markdown
Contributor

This adds DENO_CERT environment variable to make Deno programs trust httpjail's proxy CA certificate.

httpjail sets environment variables like SSL_CERT_FILE, NODE_EXTRA_CA_CERTS, etc. to make programs trust the proxy's CA. However, Deno uses its own DENO_CERT variable, causing Deno programs to fail with certificate errors:

root@86de9af35c35:/# httpjail --js "r.host === 'example.com'" -- deno eval"const r = await fetch('https://example.com'); console.log(r.status); await r.bytes();"03:44:15.504 ERROR httpjail::proxy_tls: TLS handshake failed: received fatal alert: UnknownCA03:44:15.504 ERROR httpjail::proxy: Error handling HTTPS connection: received fatal alert: UnknownCAerror: Uncaught (in promise) TypeError: error sending request for url (https://example.com/): client error (Connect): invalid peer certificate: UnknownIssuerconst r = await fetch('https://example.com'); console.log(r.status); await r.bytes(); ^ at async mainFetch (ext:deno_fetch/26_fetch.js:192:12) at async fetch (ext:deno_fetch/26_fetch.js:475:11) at async file:///test/$deno$eval.mts:1:11 hint: Run again with the `--unsafely-ignore-certificate-errors` flag to bypass certificate errors.

To fix this issue, DENO_CERT is added to the list of environment variables set by httpjail. With this patch, Deno throws no errors anymore:

root@905d9a57c5be:/# httpjail --js "r.host === 'example.com'" -- deno eval"const r = await fetch('https://example.com'); console.log(r.status); await r.bytes();"200

This manual testing was performed using the Dockerfile below.

FROM rust:1.92.0-bookworm AS builder
WORKDIR /build
COPY . .
RUN cargo build --profile fast
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y \
curl \
ca-certificates \
nftables \
iproute2 \
procps \
unzip \
&& rm -rf /var/lib/apt/lists/*
# Install Node.js 24RUN curl -fsSL https://deb.nodesource.com/setup_24.x | bash - \
&& apt-get install -y nodejs
# Install DenoRUN curl -fsSL https://deno.land/install.sh | DENO_INSTALL=/usr/local sh
# Copy httpjail binaryCOPY --from=builder /build/target/fast/httpjail /usr/local/bin/httpjail
WORKDIR /
CMD ["/bin/bash"]

Closes#96

Deno uses DENO_CERT instead of standard SSL_CERT_FILE to specify
custom CA certificates. Without this, Deno programs fail with
certificate errors when running under httpjail.
@ammario
ammario enabled auto-merge (squash) December 24, 2025 19:09
@ammario
ammario disabled auto-merge December 24, 2025 19:28
@ammario
ammario merged commit 9fddbed into coder:mainDec 24, 2025
5 of 6 checks passed
@magurotuna
magurotuna deleted the add-deno-cert branch December 25, 2025 05:41
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add DENO_CERT environment variable for Deno TLS support

2 participants

@magurotuna@ammario
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Add DENO_CERT environment variable for Deno TLS support by magurotuna · Pull Request #97 · coder/httpjail · GitHub
Skip to content

Add DENO_CERT environment variable for Deno TLS support - #97

Merged
ammario merged 1 commit into
coder:mainfrom
magurotuna:add-deno-cert
Dec 24, 2025
Merged

Add DENO_CERT environment variable for Deno TLS support#97
ammario merged 1 commit into
coder:mainfrom
magurotuna:add-deno-cert

Conversation

@magurotuna

Copy link
Copy Markdown
Contributor

This adds DENO_CERT environment variable to make Deno programs trust httpjail's proxy CA certificate.

httpjail sets environment variables like SSL_CERT_FILE, NODE_EXTRA_CA_CERTS, etc. to make programs trust the proxy's CA. However, Deno uses its own DENO_CERT variable, causing Deno programs to fail with certificate errors:

root@86de9af35c35:/# httpjail --js "r.host === 'example.com'" -- deno eval"const r = await fetch('https://example.com'); console.log(r.status); await r.bytes();"03:44:15.504 ERROR httpjail::proxy_tls: TLS handshake failed: received fatal alert: UnknownCA03:44:15.504 ERROR httpjail::proxy: Error handling HTTPS connection: received fatal alert: UnknownCAerror: Uncaught (in promise) TypeError: error sending request for url (https://example.com/): client error (Connect): invalid peer certificate: UnknownIssuerconst r = await fetch('https://example.com'); console.log(r.status); await r.bytes(); ^ at async mainFetch (ext:deno_fetch/26_fetch.js:192:12) at async fetch (ext:deno_fetch/26_fetch.js:475:11) at async file:///test/$deno$eval.mts:1:11 hint: Run again with the `--unsafely-ignore-certificate-errors` flag to bypass certificate errors.

To fix this issue, DENO_CERT is added to the list of environment variables set by httpjail. With this patch, Deno throws no errors anymore:

root@905d9a57c5be:/# httpjail --js "r.host === 'example.com'" -- deno eval"const r = await fetch('https://example.com'); console.log(r.status); await r.bytes();"200

This manual testing was performed using the Dockerfile below.

FROM rust:1.92.0-bookworm AS builder
WORKDIR /build
COPY . .
RUN cargo build --profile fast
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y \
curl \
ca-certificates \
nftables \
iproute2 \
procps \
unzip \
&& rm -rf /var/lib/apt/lists/*
# Install Node.js 24RUN curl -fsSL https://deb.nodesource.com/setup_24.x | bash - \
&& apt-get install -y nodejs
# Install DenoRUN curl -fsSL https://deno.land/install.sh | DENO_INSTALL=/usr/local sh
# Copy httpjail binaryCOPY --from=builder /build/target/fast/httpjail /usr/local/bin/httpjail
WORKDIR /
CMD ["/bin/bash"]

Closes#96

Deno uses DENO_CERT instead of standard SSL_CERT_FILE to specify
custom CA certificates. Without this, Deno programs fail with
certificate errors when running under httpjail.
@ammario
ammario enabled auto-merge (squash) December 24, 2025 19:09
@ammario
ammario disabled auto-merge December 24, 2025 19:28
@ammario
ammario merged commit 9fddbed into coder:mainDec 24, 2025
5 of 6 checks passed
@magurotuna
magurotuna deleted the add-deno-cert branch December 25, 2025 05:41
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add DENO_CERT environment variable for Deno TLS support

2 participants

@magurotuna@ammario
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Add DENO_CERT environment variable for Deno TLS support by magurotuna · Pull Request #97 · coder/httpjail · GitHub
Skip to content

Add DENO_CERT environment variable for Deno TLS support - #97

Merged
ammario merged 1 commit into
coder:mainfrom
magurotuna:add-deno-cert
Dec 24, 2025
Merged

Add DENO_CERT environment variable for Deno TLS support#97
ammario merged 1 commit into
coder:mainfrom
magurotuna:add-deno-cert

Conversation

@magurotuna

Copy link
Copy Markdown
Contributor

This adds DENO_CERT environment variable to make Deno programs trust httpjail's proxy CA certificate.

httpjail sets environment variables like SSL_CERT_FILE, NODE_EXTRA_CA_CERTS, etc. to make programs trust the proxy's CA. However, Deno uses its own DENO_CERT variable, causing Deno programs to fail with certificate errors:

root@86de9af35c35:/# httpjail --js "r.host === 'example.com'" -- deno eval"const r = await fetch('https://example.com'); console.log(r.status); await r.bytes();"03:44:15.504 ERROR httpjail::proxy_tls: TLS handshake failed: received fatal alert: UnknownCA03:44:15.504 ERROR httpjail::proxy: Error handling HTTPS connection: received fatal alert: UnknownCAerror: Uncaught (in promise) TypeError: error sending request for url (https://example.com/): client error (Connect): invalid peer certificate: UnknownIssuerconst r = await fetch('https://example.com'); console.log(r.status); await r.bytes(); ^ at async mainFetch (ext:deno_fetch/26_fetch.js:192:12) at async fetch (ext:deno_fetch/26_fetch.js:475:11) at async file:///test/$deno$eval.mts:1:11 hint: Run again with the `--unsafely-ignore-certificate-errors` flag to bypass certificate errors.

To fix this issue, DENO_CERT is added to the list of environment variables set by httpjail. With this patch, Deno throws no errors anymore:

root@905d9a57c5be:/# httpjail --js "r.host === 'example.com'" -- deno eval"const r = await fetch('https://example.com'); console.log(r.status); await r.bytes();"200

This manual testing was performed using the Dockerfile below.

FROM rust:1.92.0-bookworm AS builder
WORKDIR /build
COPY . .
RUN cargo build --profile fast
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y \
curl \
ca-certificates \
nftables \
iproute2 \
procps \
unzip \
&& rm -rf /var/lib/apt/lists/*
# Install Node.js 24RUN curl -fsSL https://deb.nodesource.com/setup_24.x | bash - \
&& apt-get install -y nodejs
# Install DenoRUN curl -fsSL https://deno.land/install.sh | DENO_INSTALL=/usr/local sh
# Copy httpjail binaryCOPY --from=builder /build/target/fast/httpjail /usr/local/bin/httpjail
WORKDIR /
CMD ["/bin/bash"]

Closes#96

Deno uses DENO_CERT instead of standard SSL_CERT_FILE to specify
custom CA certificates. Without this, Deno programs fail with
certificate errors when running under httpjail.
@ammario
ammario enabled auto-merge (squash) December 24, 2025 19:09
@ammario
ammario disabled auto-merge December 24, 2025 19:28
@ammario
ammario merged commit 9fddbed into coder:mainDec 24, 2025
5 of 6 checks passed
@magurotuna
magurotuna deleted the add-deno-cert branch December 25, 2025 05:41
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add DENO_CERT environment variable for Deno TLS support

2 participants

@magurotuna@ammario
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Add DENO_CERT environment variable for Deno TLS support by magurotuna · Pull Request #97 · coder/httpjail · GitHub
Skip to content

Add DENO_CERT environment variable for Deno TLS support - #97

Merged
ammario merged 1 commit into
coder:mainfrom
magurotuna:add-deno-cert
Dec 24, 2025
Merged

Add DENO_CERT environment variable for Deno TLS support#97
ammario merged 1 commit into
coder:mainfrom
magurotuna:add-deno-cert

Conversation

@magurotuna

Copy link
Copy Markdown
Contributor

This adds DENO_CERT environment variable to make Deno programs trust httpjail's proxy CA certificate.

httpjail sets environment variables like SSL_CERT_FILE, NODE_EXTRA_CA_CERTS, etc. to make programs trust the proxy's CA. However, Deno uses its own DENO_CERT variable, causing Deno programs to fail with certificate errors:

root@86de9af35c35:/# httpjail --js "r.host === 'example.com'" -- deno eval"const r = await fetch('https://example.com'); console.log(r.status); await r.bytes();"03:44:15.504 ERROR httpjail::proxy_tls: TLS handshake failed: received fatal alert: UnknownCA03:44:15.504 ERROR httpjail::proxy: Error handling HTTPS connection: received fatal alert: UnknownCAerror: Uncaught (in promise) TypeError: error sending request for url (https://example.com/): client error (Connect): invalid peer certificate: UnknownIssuerconst r = await fetch('https://example.com'); console.log(r.status); await r.bytes(); ^ at async mainFetch (ext:deno_fetch/26_fetch.js:192:12) at async fetch (ext:deno_fetch/26_fetch.js:475:11) at async file:///test/$deno$eval.mts:1:11 hint: Run again with the `--unsafely-ignore-certificate-errors` flag to bypass certificate errors.

To fix this issue, DENO_CERT is added to the list of environment variables set by httpjail. With this patch, Deno throws no errors anymore:

root@905d9a57c5be:/# httpjail --js "r.host === 'example.com'" -- deno eval"const r = await fetch('https://example.com'); console.log(r.status); await r.bytes();"200

This manual testing was performed using the Dockerfile below.

FROM rust:1.92.0-bookworm AS builder
WORKDIR /build
COPY . .
RUN cargo build --profile fast
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y \
curl \
ca-certificates \
nftables \
iproute2 \
procps \
unzip \
&& rm -rf /var/lib/apt/lists/*
# Install Node.js 24RUN curl -fsSL https://deb.nodesource.com/setup_24.x | bash - \
&& apt-get install -y nodejs
# Install DenoRUN curl -fsSL https://deno.land/install.sh | DENO_INSTALL=/usr/local sh
# Copy httpjail binaryCOPY --from=builder /build/target/fast/httpjail /usr/local/bin/httpjail
WORKDIR /
CMD ["/bin/bash"]

Closes#96

Deno uses DENO_CERT instead of standard SSL_CERT_FILE to specify
custom CA certificates. Without this, Deno programs fail with
certificate errors when running under httpjail.
@ammario
ammario enabled auto-merge (squash) December 24, 2025 19:09
@ammario
ammario disabled auto-merge December 24, 2025 19:28
@ammario
ammario merged commit 9fddbed into coder:mainDec 24, 2025
5 of 6 checks passed
@magurotuna
magurotuna deleted the add-deno-cert branch December 25, 2025 05:41
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add DENO_CERT environment variable for Deno TLS support

2 participants

@magurotuna@ammario