summaryrefslogtreecommitdiff
path: root/public/index.atom
diff options
context:
space:
mode:
Diffstat (limited to 'public/index.atom')
-rw-r--r--public/index.atom39
1 files changed, 39 insertions, 0 deletions
diff --git a/public/index.atom b/public/index.atom
index 8f3fefa..3c5961a 100644
--- a/public/index.atom
+++ b/public/index.atom
@@ -140,6 +140,45 @@
</entry>
<entry xmlns="http://www.w3.org/2005/Atom">
+ <link rel="alternate" type="text/html" href="./crt-sh-architecture.html"/>
+ <link rel="alternate" type="text/markdown" href="./crt-sh-architecture.md"/>
+ <id>https://lukeshu.com/blog/crt-sh-architecture.html</id>
+ <updated>2018-02-09T00:00:00+00:00</updated>
+ <published>2018-02-09T00:00:00+00:00</published>
+ <title>The interesting architecture of crt.sh</title>
+ <content type="html">&lt;h1 id="the-interesting-architecture-of-crt.sh"&gt;The interesting architecture of crt.sh&lt;/h1&gt;
+&lt;p&gt;A while back I wrote myself a little dashboard for monitoring TLS certificates for my domains. Right now it works by talking to &lt;a href="https://crt.sh/" class="uri"&gt;https://crt.sh/&lt;/a&gt;. Sometimes this works great, but sometimes crt.sh is really slow. Plus, it’s another thing that could be compromised.&lt;/p&gt;
+&lt;p&gt;So, I started looking at how crt.sh works. It’s kinda cool.&lt;/p&gt;
+&lt;p&gt;There are only 3 separate processes:&lt;/p&gt;
+&lt;ul&gt;
+&lt;li&gt;Cron
+&lt;ul&gt;
+&lt;li&gt;&lt;a href="https://github.com/crtsh/ct_monitor"&gt;&lt;code&gt;ct_monitor&lt;/code&gt;&lt;/a&gt; is program that uses libcurl to get CT log changes and libpq to put them into the database.&lt;/li&gt;
+&lt;/ul&gt;&lt;/li&gt;
+&lt;li&gt;PostgreSQL
+&lt;ul&gt;
+&lt;li&gt;&lt;a href="https://github.com/crtsh/certwatch_db"&gt;&lt;code&gt;certwatch_db&lt;/code&gt;&lt;/a&gt; is the core web application, written in PL/pgSQL. It even includes the HTML templating and query parameter handling. Of course, there are a couple of things not entirely done in pgSQL…&lt;/li&gt;
+&lt;li&gt;&lt;a href="https://github.com/crtsh/libx509pq"&gt;&lt;code&gt;libx509pq&lt;/code&gt;&lt;/a&gt; adds a set of &lt;code&gt;x509_*&lt;/code&gt; functions callable from pgSQL for parsing X509 certificates.&lt;/li&gt;
+&lt;li&gt;&lt;a href="https://github.com/crtsh/libcablintpq"&gt;&lt;code&gt;libcablintpq&lt;/code&gt;&lt;/a&gt; adds the &lt;code&gt;cablint_embedded(bytea)&lt;/code&gt; function to pgSQL.&lt;/li&gt;
+&lt;li&gt;&lt;a href="https://github.com/crtsh/libx509lintpq"&gt;&lt;code&gt;libx509lintpq&lt;/code&gt;&lt;/a&gt; adds the &lt;code&gt;x509lint_embedded(bytea,integer)&lt;/code&gt; function to pgSQL.&lt;/li&gt;
+&lt;/ul&gt;&lt;/li&gt;
+&lt;li&gt;Apache HTTPD
+&lt;ul&gt;
+&lt;li&gt;&lt;a href="https://github.com/crtsh/mod_certwatch"&gt;&lt;code&gt;mod_certwatch&lt;/code&gt;&lt;/a&gt; is a pretty thin wrapper that turns every HTTP request into an SQL statement sent to PostgreSQL, via…&lt;/li&gt;
+&lt;li&gt;&lt;a href="https://github.com/crtsh/mod_pgconn"&gt;&lt;code&gt;mod_pgconn&lt;/code&gt;&lt;/a&gt;, which manages PostgreSQL connections.&lt;/li&gt;
+&lt;/ul&gt;&lt;/li&gt;
+&lt;/ul&gt;
+&lt;p&gt;The interface exposes HTML, ATOM, and JSON. All from code written in SQL.&lt;/p&gt;
+&lt;p&gt;And then I guess it’s behind an nginx-based load-balancer or somesuch (based on the 504 Gateway Timout messages it’s given me). But that’s not interesting.&lt;/p&gt;
+&lt;p&gt;The actual website is &lt;a href="https://groups.google.com/d/msg/mozilla.dev.security.policy/EPv_u9V06n0/gPJY5T7ILlQJ"&gt;run from a read-only slave&lt;/a&gt; of the master DB that the &lt;code&gt;ct_monitor&lt;/code&gt; cron-job updates; which makes several security considerations go away, and makes horizontal scaling easy.&lt;/p&gt;
+&lt;p&gt;Anyway, I thought it was neat that so much of it runs inside the database; you don’t see that terribly often. I also thought the little shims to make that possible were neat. I didn’t get deep enough in to it to end up running my own instance or clone, but I thought my notes on it were worth sharing.&lt;/p&gt;
+</content>
+ <author><name>Luke Shumaker</name><uri>https://lukeshu.com/</uri><email>lukeshu@sbcglobal.net</email></author>
+ <rights type="html">&lt;p&gt;The content of this page is Copyright © 2018 &lt;a href="mailto:lukeshu@sbcglobal.net"&gt;Luke Shumaker&lt;/a&gt;.&lt;/p&gt;
+&lt;p&gt;This page is licensed under the &lt;a href="https://creativecommons.org/licenses/by-sa/3.0/"&gt;CC BY-SA-3.0&lt;/a&gt; license.&lt;/p&gt;</rights>
+ </entry>
+
+ <entry xmlns="http://www.w3.org/2005/Atom">
<link rel="alternate" type="text/html" href="./http-notes.html"/>
<link rel="alternate" type="text/markdown" href="./http-notes.md"/>
<id>https://lukeshu.com/blog/http-notes.html</id>