サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Switch 2
zenn.dev/satoken
はじめに 前回、OAuthサーバを自作してみました。 せっかくなのでOIDCの機能を追加してOIDCサーバとしても振る舞えるようにしたいと思います。 コードは以下になります。 準備 jwtを作るときの署名用にopensslコマンドでキーペアを作成しておきます。 pemファイルはmain.goと同じフォルダに置いておきます。 $ openssl genrsa > private-key.pem $ openssl rsa -in private-key.pem -pubout -out public-key.pem 実装 追加・変更した個所を説明していきます。 まずOAuthサーバに2つエンドポイントを追加しました。 /certs 公開鍵をJWKで返すエンドポイント /userinfo Userプロファイルを返すエンドポイント /certsエンドポイントでは作成したJWKをJSONで返します
はじめに 1/24~26の3日間 仕事をサボっ.... 調整をしてポリテクセンター関東で行われた組込みLinuxデバイスドライバ開発技術というセミナーを受講してきました。 カーネルのVersionが2.6、対象のマイコンボードがSH-4というとても古いものだったので今回はラズパイで復習しながら、セミナーの内容を共有したいと思います。 ↑がセミナーで使用したボードです。 LEDやタクトスイッチ、赤外線センサやモータがボートに付いているのでそれを制御するドライバを作成しました。 セミナーのテキストは2部構成で内容は以下の通りです。 第1部CPUボード編 1章 ターゲットボードの確認 2章 CPUボードの機能とデバイスドライバの確認 3章 デバイスドライバ概要 4章 モジュールの作成 5章 キャラクタデバイスの作成 6章 デバイスドライバの作成 第2部拡張IOボード編 7章 属性ファイルの利用
はじめに 冬休みに12ステップで作る 組込みOS自作入門を完走したをkozosを完走しました。 そのときの備忘録になります。 12STEPの各内容は以下のようになっています。 第1部 ブート・ローダーの作成 1stステップ 開発環境の作成 2ndステップ シリアル通信 3rdステップ 静的変数の読み書き 4thステップ シリアル経由でファイルを転送する 5thステップ ELFフォーマットの展開 6thステップ もう一度,Hello World 第2部 OSの作成 7thステップ 割込み処理を実装する 8thステップ スレッドを実装する 9thステップ 優先度スケジューリング 10thステップ OSのメモリ管理 11thステップ タスク間通信を実装する 12thステップ 外部割込みを実装する 1STEP、1commit単位でまとめて進めていきました。レポジトリは以下にあります。 環境構築 マ
はじめに オライリーでポートスキャナ自作ではじめるペネトレーションテストという本が発売されました。 2章ではScapyを利用して実際にパケットを作成して、nmapのようなポートスキャナ自作します。 パケットのカプセル化などNWの仕組みから丁寧に解説されていてとても良書だと思います。 ただ筆者はPythonよりGolang派なので2章のプログラムをGolangに書き換えてみました。 ※オリジナルはこちら gopacket入門 gopacketはGolangでパケットを読み込んだり作ったりするためのライブラリです。 プログラムを作る前に必要なパッケージをインストールしておきます。 ubuntu 22.04で動作確認をしています。
はじめに つい最近HTTP3のRFC9114として正式に発行されました。 HTTP3はQUICプロトコル上で実装されているものです。 HTTP3はGoogleのTOPページなど既に日常的に使われています。 業務でQUICやHTTP3でコードを書くことはまだあまりないと思いますが、まぁいずれそういう時代もくるでしょう。 そういう時が来たときにあたふたするわけにはいかないので、今回はQUICとHTTP3プロトコルスタックを実装して学んでみることにします。 今回のルールとゴールです。 udpパケットの送信と受信にnetパッケージを使用する TLSは自分で実装したものを使用、crypto/tlsは使わない RFC9000とRFC9001とWiresharkでパケット見ながら実装 quic-goは使わない quic-goのHTTP3サーバに対してGetリクエストを送り、サーバからメッセージを受信した
はじめに つい先日、HTTP3がRFC9114として正式に発表されました。 RFC読むよりとりあえずパケット見る派なので、とりあえずコード書いて動かしてキャプチャしたいところです。 quic-goは http3 ディレクトリがあり、対応してそうなのでサンプルコードを書いてみました。 数日前にcommitが入っていて開発も活発そうですね。 サンプルのサーバ側コードを試す時はお手数ですが、opensslやmkcertコマンドなどでご自分で公開鍵&秘密鍵を生成してください。 クライアント まずはクライアントのコードを書いてみます。 go.docを見ると、RoundTrip という関数に *http.Request を渡すとHTTP3のクライアントコードになりそうです。 こんなコードになりました。 package main import ( "crypto/tls" "fmt" "github.c
はじめに 前回までの記事でTLS1.2プロトコルスタックを自作してみました。 ただ皆さんご存知の通り、TLS1.2の脆弱性の対策やQUICなど新しいプロトコルへの対応を考慮して設計したTLS1.3が2018年にリリースされ普及が進んでいます。 使用率ではまだTLS1.2が一般的ですが今後は1.3へと置き換えが進んでいくと、どこかの時点で逆転するのでしょう。そのときに慌てて学ぶよりも、今1.3も実装して学ぶことにします😊 まぁ1.2作れたしイケるでしょう(死亡フラグ😇😇😇) 今回の実装方針です。 crypto/tls は一切使わずTLS1.3のフルハンドシェイクをオレオレで実装する 使える部分は前回までのTLS1.2の実装を再利用する cipher suitesは TLS_CHACHA20_POLY1305_SHA256 を使う TLS1.3でハンドシェイクしてからnginxにHTT
はじめに 前回自作でTCPIP+HTTPを実装して動作を確認することができました。 しかしご覧頂いた方はおわかりのように、通信はHTTP=平文でやり取りされておりパスワードなど機密情報が用意に見れてしまう状態です。 普段我々がブラウザに安心してパスワードを入力しているのは通信がTLSで暗号化されているからです。ではそのTLSの仕組みはどうなっているのでしょう? 恥ずかしい限りですが僕はわかりません。😇😇😇 ということで以下を読みながらTLSプロトコルを自作してみてその仕組みを学ぶことにします。 マスタリングTCP/IP情報セキュリティ編 RFC5246 プロフェッショナルSSL/TLS 今回の実装方針です。 TLS1.2プロトコルを自作する 暗号化などの処理はcryptパッケージの関数を適時利用する tcp接続にはconnectを使う 鍵交換はまずRSAで作成する TLS_RSA_W
はじめに とりあえずIT業界に入ったら読んでおけという名著はいろいろありますが、その中の1冊がマスタリングTCP/IP入門編でしょう。 僕も買ってはいたものの読むのを途中で挫折していたので、今回しっかり読んでTCP/IPを再勉強してみたいと思います。 マスタリングTCP/IPを読みながらその他わからんことはググりつつ、golangでTCPIPプロトコルそのものを自作してみます。 方針は以下のようにします。 ethernetから作る データのやり取りにnetパッケージは一切使わない (訂正、PCのIPやMacアドレスを取るのにだけ使用しますた) データのやり取りに使うのはsyscallのsendtoとrecvfromだけ socketはRAW_SOCKETを使う golangやネットワークについても初心者の駆け出しですので間違えや実装ミス、変なコードがあるかもですが、生暖かい目でよろしゅうお
はじめに 前回の記事に引き続きAuth屋さんのOIDC本を読みました。 今回もチュートリアルのcurlとブラウザで行っている部分をgolangに置き換えてみたいと思います。 方針は前回の実装と同じです。 httpサーバを起動させる アクセスするとgoogleにリダイレクトさせる callbackを受けたら認可コードでトークンリクエストをする 取得したトークンでプロフィールにアクセスする OAuthではGoogleのPhoto APIにアクセスしましたが、プロフィール情報にアクセスするのが違いとなります。 IDトークンの検証も行いますが勉強のためなるべくライブラリなどは使用せず標準pkgで愚直に書いてみます。 golangに最近入門したのでお見苦しいコードを書いているかもですがご笑覧ください🙇♂️🙇♂️🙇♂️ 最終的なコードは以下にあります。 準備 OAuthでGoogleに設定
はじめに Auth屋さんの本やその他有識者のBlogなどを読むことで少しながらOAuthやOIDCの仕組みが理解できてきました。 そんななかで以下の記事が大変勉強になりました。 ↑の記事ではRubyで実装されているのですが、これを参考というかほぼ丸コピですがgolangで実装してみたいと思います。 コードは以下にあります。 仕様 OAuthサーバでは認可エンドポイントとトークンエンドポイントを実装する必要があります。 認可とトークンエンドポイントの2つに加えてユーザ認証を行うエンドポイントを作ります。 今回は元記事と同じようにFormに入力したユーザ&パスワードを受け取り確認します。 RFC6749に関する仕様は元記事の2.注意点と同じになるはずです。 「はずです」というのは恥ずかしながらまだ完全な理解に至っておらず今もRFCを読みながら答え合わせ中です。 ぜひ認識違いがあればご指摘くださ
このページを最初にブックマークしてみませんか?
『satokenさんの記事一覧』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く