Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@yamori813

BearSSLについて

More than 1 year has passed since last update.

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

組み込み用のオープンソースの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

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

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  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

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?