見出し画像

シン・TWSNMP(TWSNMP FK)にPKI機能をつけるためにGo言語で練習しています

今朝は4時12分に自力で起きました。助手の猫さんは1階のベッドで寝てました。私がコーヒーを淹れていると迷惑そうに起きてきました。開発を始めてすぐの5時ぐらいに休憩と言いにきたので、すこしお世話したら、かみさんの布団に行って寝たようです。

今朝は

を作っていた時に思いついたアイデアを実現するための練習です。
gRPCをTLSやmTLS対応にするためには、秘密鍵と証明書が必要です。テストで使うなら自己署名の証明書でもよいのですが、もう少しちゃんとした証明書を作成する機能を作りたくなりました。
最初は

を利用しようと思っていましたが、ソースコードを読んで実際に動かしてみると多機能すぎるので私の頭では全体を把握できない感じでした。

というのも見つけたのですが、こっちは独自仕様で機能も少ないので使えません。
そこでPKIの仕組みをGo言語で作ってみることにしました。年寄りの脳トレとしては、かなり難しい感じです。基本からと思って調べていたら、

を見つけました。この記事のシリーズを参考にして、最新の技術もいれて練習することにしました。
とりあえず、

までできました。出力したサーバー証明書は

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 3 (0x3)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: O=Example Org, CN=intca.example.com
        Validity
            Not Before: Feb 20 20:57:01 2025 GMT
            Not After : Feb 20 20:57:01 2026 GMT
        Subject: C=JP, O=Example Org, OU=Example Org Unit, CN=www.example.org
        Subject Public Key Info:
            Public Key Algorithm: id-ecPublicKey
                Public-Key: (256 bit)
                pub:
                    04:91:be:88:90:9a:48:06:8b:90:eb:9a:88:27:77:
                    bb:d9:04:0d:81:a0:a8:1d:e2:5d:78:ce:5f:51:a4:
                    b7:b8:0c:75:b3:8b:80:7f:00:6d:98:6e:95:ae:66:
                    8e:fa:42:c6:a6:3e:2b:aa:4c:8f:ad:36:93:95:80:
                    7d:b1:36:4a:6f
                ASN1 OID: prime256v1
                NIST CURVE: P-256
        X509v3 extensions:
            X509v3 Extended Key Usage:
                TLS Web Client Authentication, TLS Web Server Authentication
            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Authority Key Identifier:
                84:AE:8B:94:C3:42:04:32:91:9A:5F:E3:F5:36:9D:C0:D7:D2:0C:57
            X509v3 Subject Alternative Name:
                DNS:www.example.com, DNS:www.example.co.jp, email:test@examle.com, IP Address:192.168.1.1
            X509v3 Key Usage:
                Digital Signature, Certificate Sign, CRL Sign
    Signature Algorithm: ecdsa-with-SHA256
    Signature Value:
        30:46:02:21:00:85:d9:ad:f6:12:ec:ca:47:a8:c2:f2:37:0b:
        54:ff:2c:9b:61:8d:a2:a5:45:01:5f:0f:06:11:f6:d1:e1:3f:
        f6:02:21:00:fa:5e:08:e0:3b:11:8d:d3:ca:e0:ae:2e:e9:8a:
        f8:28:ff:0a:65:dc:7d:b5:a9:f6:7a:d2:37:56:58:ea:cf:a5

のような感じです。
かなり、楽しくなってきました。
CRL、OCSP、ACMEとかできたらQiitaの記事の詳しく書こうと思います。
今朝は時間切れです。

明日に続く


いいなと思ったら応援しよう!

twsnmp
開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。