GithubHelp home page GithubHelp logo

pseudo-curl's Introduction

pseudo-curl

pseudo-curl はあまりにも低機能かつ擬似的な curl コマンドです。

サーバの OpenSSL が古すぎて、curl が新しい TLS 対応をしていても libssl.so が古いために curl が新しい TLS をしゃべれない……という事態に遭遇して、そのサーバで使われる限定的な curl の使い方だけを満たすものをでっち上げるため、急場しのぎで初期バージョン v0.1 が作成されました。

動機

curl コマンドでウェブサーバに HTTP アクセスするという外形監視を行っていた監視サーバがあったものの、昨今のセキュリティの流れでウェブサーバが対応する TLS を TLSv1.2 以上としたところ、監視ができなくなるという現象が私 (@xtetsuji) の周囲で起こりました。

察する通り、原因は監視サーバが古すぎて TLSv1.2 以上に対応していないということだったのですが、この解決のためには curl の問題だけでなく、その監視サーバの Linux OS にインストールされた OpenSSL つまり libssl.so の問題に向き合う必要もありました。パッケージシステムがある Linux ディストリビューションで OpenSSL を別に入れる面倒さ以前に、OS とディストリビューションのバージョンの何もかもが何世代も古く、OpenSSL のビルドを試みたとしても glibc のバージョンで躓く可能性すらありました。

ウェブサーバの変更は既に行ってしまい、監視対応を急ぐ必要があるということだったのですが、curl だけをシステム中の libssl.so に依存しない形で TLSv1.2 以上を解するものとしてたとえ限定的な機能であっても置き換えられれば問題が解決するのではと考え、 最新の TLS を処理可能なモノリシックな HTTPS クライアントの実行バイナリを作成することができるだろう Go で書いてみようというのが事の発端であり動機 です。

幸いなことに、監視サーバが要求する非常に限定的なコマンドライン呼び出しのみ対応することで、この作戦は上手くいきました。

良くないことであることは分かっていつつも、監視サーバは外部からアクセスされないからという理由で古い状態のままだったようですが、上記の策で急場をしのぎつつ近々新しいサーバに置き換わることでしょう。

後付けではありますが、Go 言語が提供する機能(今回は TLS 機能を含んだモノリシックな実行バイナリ生成)以外での解決が困難な問題に直面したことで、私 (@xtetsuji) 自身の Go 言語学習の動機付け にもなりました。

注意など

現状と今後

  • v0.1 は、上記の動機の節での監視サーバでの要望を満たす最小限のものを急いで書いたものです
  • v0.2 以降では、Go 言語の学習の過程で機能が増えるかもしれません

License

  • MIT

Author

  • OGATA Tetseuji @xtetsuji

pseudo-curl's People

Contributors

xtetsuji avatar

Stargazers

 avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.