Any tooling would also have to upgrade to clj-http 2.0.0 and/or HttpClient 4.5, 
because before that SNI was broken even on Java 8:

https://issues.apache.org/jira/browse/HTTPCLIENT-1613?devStatusDetailDialog=repository

Supposedly fixed in 4.5 of HttpClient, which 2.0.0 of clj-http pulls in, but I 
haven't tested to confirm.

-ken
--
-----
On Fri, Jan 01, 2016 at 10:49:13PM -0500, Toby Crawley wrote:
> One potential issue with the mirrors is java 6 and HTTPS - the mirrors
> couldn't use 2048-bit dhparams[1] or SNI[2], since neither are
> supported in java 6. Yes, we all should be on java 7 or 8 at this
> point, but I believe Intellij still uses java 6 on MacOS, which would
> mean Cursive couldn't download from the mirrors.
> 
> [1]: https://weakdh.org/sysadmin.html
> [2]: https://en.wikipedia.org/wiki/Server_Name_Indication
> 
> On Fri, Jan 1, 2016 at 10:31 PM, Toby Crawley <t...@tcrawley.org> wrote:
> > Given the recent DDoS-triggered outages at linode (including the one
> > today that has been the worst yet, currently 10 hours at the time I'm
> > writing this), I've been giving some more thought to how we can make
> > future outages less painful for the community.
> >
> > I have an open issue[1] (but no code yet) to move the repository off
> > of the server and on to a block store (s3, etc), with the goal there
> > to make repo reads (which is what we use clojars for 99.9% of the
> > time) independent of the status of the server. But I'm not sure that
> > really solves the problem we are seeing today. Currently, we have two
> > points of failure for repo reads:
> >
> > (1) the server itself (hosted on linode)
> > (2) DNS for the clojars.org domain (also hosted on linode)
> >
> > moving the repo off of the server to a block store still has two
> > points of failure:
> >
> > (1) the block store (aws, rackspace, etc)
> > (2) DNS for the clojars.org domain, since we would CNAME the block
> >      store (hosted on linode)
> >
> > Though the block store provider would probably be better distributed,
> > and have more resources to withstand a DDoS (but do any block store
> > providers have 100% uptime?).
> >
> > The block store solution is complex - it introduces more moving parts
> > into clojars, and requires reworking the way we generate usage stats,
> > and how the api gets its data. It also requires reworking the way we
> > administer the repo (deletion requests, cleaning up failed/partial
> > deploys). And it may not solve the availability problem at all, since
> > we still have two points of failure.
> >
> > I think a better solution may be to have multiple mirrors of the repo,
> > either run by concerned citizens or maintained by the clojars staff. I
> > know some folks in the community already run internal caching proxies
> > or rsynced mirrors (and are probably chuckling knowingly at those of
> > us affected by the outage), but those proxies don't really help those
> > in the community that don't have that internal infrastructure. And I
> > don't want to recommend that everyone set up a private mirror - that
> > seems like a lot of wasted effort.
> >
> > Ideally, it would be nice if we had a turn-key tool for creating a
> > mirror of clojars. We currently provide a way to rsync the repo[2], so
> > the seed for a mirror could be small, and could then slurp down the
> > full repo (and could continue to do so on a schedule to remain up to
> > date). We could then publish a list of mirrors that the community
> > could turn to in times of need (or use all the time, if they are
> > closer geographically or just generally more responsive). Any deploys
> > would still need to hit the primary server, but deploys are are
> > dwarfed by reads.
> >
> > There are a few issues with using mirrors:
> >
> > (1) security - with artifacts in more places, there are more
> >     opportunities to to introduce malicious versions. This could be
> >     prevented if we had better tools for verifying that the artifacts
> >     are signed by trusted keys, and we required that all artifacts be
> >     signed, but that's not the case currently. But if we had a regular
> >     process that crawled all of the mirrors and the canonical repo to
> >     verify that the checksums every artifact are identical, this could
> >     actually improve security, since we could detect if any checksum
> >     had been changed (a malicious party would have to change the
> >     checksum of a modified artifact, since maven/lein/boot all confirm
> >     checksums by default).
> >
> > (2) download stats - any downloads from a mirror wouldn't get
> >     reflected in the stats for the artifact unless we had some way to
> >     report those stats back to clojars.org. We currently generate the
> >     stats by parsing the nginx access logs, mirrors could do the same
> >     and report stats back to clojars.org if we care enough about
> >     this. We don't get stats from the existing private mirrors, and
> >     the stats aren't critical, so this may be a non-issue, and
> >     definitely isn't something that has to be solved right away, if
> >     ever.
> >
> > The repo is just served as static files, so I think a mirror could
> > simply be:
> >
> > (1) a webserver (preferably (required to be?) HTTPS)
> > (2) a cronjob that rsyncs every N minutes
> >
> > And the cronjob would just need the rsync command in [2], so, to get
> > this started, we just need:
> >
> > (1) linode to be up
> > (2) people willing to run mirrors
> >
> > (I would say "(3) add a page to the wiki on how to use a mirror", but
> > that would destroy the symmetry of all the other 2-item lists in this
> > message)
> >
> > And it would be nice to have the process in place to verify checksums
> > soon - that would actually be a boon if we had another linode
> > compromise[3].
> >
> > Does anyone see any issues with this plan - I'm curious if there are
> > security implications (or anything else) that I haven't thought of?
> >
> > Are you willing to run a mirror?
> >
> > One issue that comes to mind is if we do decide to move the repo to a
> > block store, it actually makes mirroring more difficult unless we keep
> > a copy of the repo on disk on clojars.org as well. But I would like to
> > have mirrors in place as soon as possible, and worry about that later.
> >
> > - Toby
> >
> > [1]: https://github.com/clojars/clojars-web/issues/433
> > [2]: 
> > https://github.com/clojars/clojars-web/wiki/Data#rsync-the-whole-classic-repository
> > [3]: 
> > https://groups.google.com/d/msg/clojars-maintainers/uAVJVwRAnSU/WISqQn5E9KIJ
> 
> -- 
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with your 
> first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> --- 
> You received this message because you are subscribed to the Google Groups 
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to