Help us understand the problem. What is going on with this article?

BearSSLについて

蟹さんにSSLを話させようと思いついて、調べていたところaxTLSというスタックが見つかったのだが、ビルドを試したところいろいろ手をいれないと使えなさそうだった。たまたまこれについて調べていたところBearSSLという実装がある事を知った。この実装は比較的新しい物のようです。

https://bearssl.org/

組み込み用のオープンソースのTLSのコードは他にはmbedTLS(旧PolarSSL),wolfTLS,matrixSSLなどがある。

BearSSLはカナダの人がおそらく一人で作られたMITライセンスのコードで、ざっくりみたところ非常に奇麗に書かれています。

現在のところTLS 1.0, 1.1, 1,2に対応しています。

コードは全て公開されていて、ライブラリのビルドに必要なコードはCなのですが、一部C#で書かれたプリプロセッサーでCコードを生成しているようです。

FreeBSD 11/amd64でmakeしたところすんなりビルドが通りました。

Mac OS X/Intel(雪豹)でビルドするとso作ろうとしてこけますが.aはできます。

Mac OS X/PPC(10.5)でもビルドできました。

ビルドするとbuildディレクトリにlibbearsslができます。sampleディレクトリにhttpsなサーバとクラインとのサンプルのコードがあります。

Makefile
all:    client_basic server_basic

client_basic:   client_basic.c
        cc -I../inc -L../build -lbearssl -o client_basic client_basic.c

server_basic:   server_basic.c
        cc -I../inc -L../build -lbearssl -o server_basic server_basic.c

このサンプルプログラムを実行してみます。FreeBSDの場合はLD_LIBRARY_PATHをbuildディレクトリに通してsoを読めるようにしておきます。

サーバ側

bash-3.2$ ./server_basic 8080
binding to: 0.0.0.0
bound.
accepting connection from: 127.0.0.1
SSL closed (correctly).

クライアント側

bash-3.2$ ./client_basic localhost 8080
connecting to: 127.0.0.1
connected.
HTTP/1.0 200 OK
Content-Length: 46
Connection: close
Content-Type: text/html; charset=iso-8859-1

<html>
<body>
<p>Test!</p>
</body>
</html>
closed.

サーバ側にはlocalhostの証明書が貼ってあるので、クライアント側からIPアドレスでのアクセスはエラーになります。

違うホストからのアクセスを確認したい場合はclient_basic.cを以下ようにします。

        br_ssl_client_reset(&sc, "localhost", 0);

client_basicで一般のサイトをアクセスするには乱暴かもしれませんが、以下のようにするとできます。

bash-3.2$ curl https://curl.haxx.se/ca/cacert.pem > cacert.pem
bash-3.2$ ../build/brssl ta cacert.pem > cacert.h

出来上がったcacert.hをclient_basic.cにハードコードされたTAと入れ替えてコンパイルします。

bash-3.2$ ./client_basic www.yahoo.co.jp 443
connecting to: 182.22.25.252
connected.
HTTP/1.0 200 OK
Date: Sun, 25 Mar 2018 01:26:17 GMT

まだ蟹さんでは動いていませんが、ちょっといじってみるつもりです。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away