From 9b30ce4480f6c786ffae0180675a3ed852cae8c0 Mon Sep 17 00:00:00 2001 From: CaoWangrenbo Date: Thu, 29 Oct 2026 20:50:21 +0800 Subject: [PATCH] Add demo mTLS client certificates and key Included at the repository owner's request for demonstration and integration testing only. Revocable on the robot side; not for production use. --- .gitignore | 7 +--- README.md | 3 ++ certs/README.md | 21 ++++++++++ certs/client.key | 28 +++++++++++++ certs/client_chain.crt | 95 ++++++++++++++++++++++++++++++++++++++++++ certs/client_tls.conf | 26 ++++++++++++ certs/root_ca.crt | 33 +++++++++++++++ 7 files changed, 208 insertions(+), 5 deletions(-) create mode 100644 certs/README.md create mode 100644 certs/client.key create mode 100644 certs/client_chain.crt create mode 100644 certs/client_tls.conf create mode 100644 certs/root_ca.crt diff --git a/.gitignore b/.gitignore index 0939eb3..104db5c 100644 --- a/.gitignore +++ b/.gitignore @@ -4,11 +4,8 @@ __pycache__/ *.py[cod] *.egg-info/ -# 证书与私钥(不入库) -certs/ -*.key -*.crt -*.pem +# 注意:本仓库按所有者要求提交 certs/ 下的演示证书与私钥, +# 正式项目请勿提交任何私钥材料。 # 日志与临时文件 *.log diff --git a/README.md b/README.md index 4e6b621..e40530b 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,9 @@ uv run python -m unittest discover -s tests -v # 17 项测试 `~/.zcode/workspace/draft-183385f3-.../backup/certs`。目录内需要 `client_chain.crt`、`client.key`、`root_ca.crt`。 +本仓库已按所有者要求提交 `certs/` 下的演示用客户端证书与私钥(见 +`certs/README.md`),**仅供演示与联调,不要用于生产**;材料外泄时请在机器人端吊销。 + ## 只读观察真机 ```bash diff --git a/certs/README.md b/certs/README.md new file mode 100644 index 0000000..726f7ee --- /dev/null +++ b/certs/README.md @@ -0,0 +1,21 @@ +# 演示用客户端证书 + +本目录包含连接山猫 S10 所需的 mTLS 客户端材料,**按仓库所有者要求随代码提交, +仅用于演示与联调**。这些文件不是生产凭据,仓库所有者可在端侧吊销/更换。 + +| 文件 | 说明 | +|---|---| +| `client.key` | 客户端私钥,RSA 2048 / PKCS#8 / PEM,无口令保护 | +| `client_chain.crt` | 客户端证书链(client.local ← TLS CA ← Project CA ← Root CA) | +| `root_ca.crt` | 根 CA 证书 | +| `client_tls.conf` | App 内的原始 TLS 配置模板 | + +客户端证书有效期至 **2027-04-03**,根 CA 有效期至 2036-03-31。 + +持有这套材料即可与机器人建立 mTLS 连接并下发控制指令,因此: + +- 不要把这些文件用于生产环境; +- 不要放到公开仓库或分发给无关人员; +- 如仓库权限扩大或材料外泄,请在机器人端吊销/更换客户端证书。 + +用法见上级目录 `README.md`,默认会优先查找本目录下的证书。 diff --git a/certs/client.key b/certs/client.key new file mode 100644 index 0000000..c557d05 --- /dev/null +++ b/certs/client.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCWMPaz89s03Ry9 +reK2kuTbq8DswFxl5OkuDKPZm4Bn62HxmD6AuQO8FeIOMW3mtlw7PZwLoPXihzrn +A58HzvZ8TCCdEzxkbzz4I3MQekmRgIHkSdO5Mb2bT7BCYkqXOWOz0nWC6auUgqUe +qyRTA29yT2ElOJKWdUL4jmtuyNhbnxBhCLU8oER3vybZ4EDmKBT1pY4i9CYH3VU7 +RIYuwh1qQ0/6Xd2VC2sPs9tROHvg2T5pMhwwRLhXumbcHutuTUu1vzQrSoQ3/ZGq +bUtQJBLiwzUdSvL6Awb3Z42kRL+rwTbVm/KekZUHw7V+x1ZyliOWU6nRyz8/ZizA +HSmExW27AgMBAAECggEAECXQiHV/S8uQHlahNEb5Lc26uYRPCtzV3eUZrWOaJnzO +CYHNtTJEfrGNneqzlGVmki9Ouois7Go6ANdzVDgXaTLCzjs2DYhQ3PmWvUlLOpu/ +RhJSngEv5RBoH3hePlcQa1Iv3zTiBTQXWQOb2ARbtEW+Pe27WPY04/C6spe2fKx5 +sJxS3U1T6CRldQn4F1sebocNM1O/Cxo5NOBtEzsm+dTFYSBr2sFGtKehY1+cs+kU +xDioMfubtXE+G24YtedTiCyIvuU5CVyCoUmUGdqEXuXaRmrpM9EjCmWRtBr6jSS0 +brQteu89oH5oQxtbOIuUDCMH9eHzowuqKXHJNswcSQKBgQDPHJ0Ce7MkSws64XQL +Bjlh/Ifhho6ep5OXiEX2xZY6EvL6DrFfTr7FWB7MBgj7Lguf/fnU+Watl7KPPz0B +AKyDmGMat8uyCA4nahtc3EIATpOW7PWsgIN3RyIDJHQk1Ww5Vl5FsTesKAYzSvSc +mdgfWmPir0HKYSAsv/StUVKiOQKBgQC5pL95aVE2VQIMudNesZ6xK1t8C7aQyRbu +jkhF7I0WF1YtahLHtPeoEzw2/G4nd3mjMQf6YriPC2WNYv+eMSV3wsUhrUOdYcff +zdrrJiD0bTGgyGMYXgf+Dq0FwTGCGM3I4TlMAH1zucQnce8jPJhti9JF3QgEhjsC +FfJvkph/kwKBgBSEJRmF320M8gPXKYOeDjkipuM0TRRyTTCJk0SqtgLytZcHtZJX +XpZ18DcNsf4PxZ8HraPnQMCZclq2TPi4dF5kzgxrgIYWPjCxVhyQxQj6v6wHtR5t +bJh4N2pQRiEP8zSK1bPZpkYrgNG77xdENiCE97gQ3FeL34APU9GHaMQhAoGAbSRg +tf6nEmxT8itmC2wdwkedV4aDZQf0hXf9Ia77G5vIvJZ6SBMq7xOv+RvbnzRsvPbc +m+ZiXybyI3eqlNSMFKbbwvrcn7CXFAsww8L86PcxkDd/mxndVQ5HxvRYKQZwJcPU +Lcyz9M+odRBU6cB8VRs5Gn3ictZ/5rAEgngLVCUCgYEAt+55lje/Lix9NnJXaDH8 +sL0Rcmndd0GaC3HcYqW1P08/Vyx5kd18uoIqKXBurVF0Yxnk1o5RecbTfmsdl5pB +ngc4h7s9OcAJ7qavBpeR5mQ+q/KMXkZ+PI/tS+YeegEQupU2Frew5FQPvjxLTUZf +nPv8/LdXnjVuU73Tmm/fZHg= +-----END PRIVATE KEY----- diff --git a/certs/client_chain.crt b/certs/client_chain.crt new file mode 100644 index 0000000..af727ac --- /dev/null +++ b/certs/client_chain.crt @@ -0,0 +1,95 @@ +-----BEGIN CERTIFICATE----- +MIIExDCCAqygAwIBAgIUVbCenZ3mDwTTEUQNrGttj7OzmG8wDQYJKoZIhvcNAQEL +BQAwaTELMAkGA1UEBhMCQ04xEDAOBgNVBAgMB0JlaWppbmcxEDAOBgNVBAcMB0Jl +aWppbmcxFDASBgNVBAoMC1JvYm90U2VydmVyMQ8wDQYDVQQLDAZUTFMgQ0ExDzAN +BgNVBAMMBlRMUyBDQTAeFw0yNjA0MDMwNjUxMjBaFw0yNzA0MDMwNjUxMjBaMG8x +CzAJBgNVBAYTAkNOMRAwDgYDVQQIDAdCZWlqaW5nMRAwDgYDVQQHDAdCZWlqaW5n +MRQwEgYDVQQKDAtSb2JvdFNlcnZlcjEPMA0GA1UECwwGQ2xpZW50MRUwEwYDVQQD +DAxjbGllbnQubG9jYWwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCW +MPaz89s03Ry9reK2kuTbq8DswFxl5OkuDKPZm4Bn62HxmD6AuQO8FeIOMW3mtlw7 +PZwLoPXihzrnA58HzvZ8TCCdEzxkbzz4I3MQekmRgIHkSdO5Mb2bT7BCYkqXOWOz +0nWC6auUgqUeqyRTA29yT2ElOJKWdUL4jmtuyNhbnxBhCLU8oER3vybZ4EDmKBT1 +pY4i9CYH3VU7RIYuwh1qQ0/6Xd2VC2sPs9tROHvg2T5pMhwwRLhXumbcHutuTUu1 +vzQrSoQ3/ZGqbUtQJBLiwzUdSvL6Awb3Z42kRL+rwTbVm/KekZUHw7V+x1ZyliOW +U6nRyz8/ZizAHSmExW27AgMBAAGjXjBcMBoGA1UdEQQTMBGCCWxvY2FsaG9zdIcE +fwAAATAdBgNVHQ4EFgQUGZGz2zeGnvOnK6kmc4M/i77JetIwHwYDVR0jBBgwFoAU +GPrdnLKFtoTb4HzB5EY2eITAAN8wDQYJKoZIhvcNAQELBQADggIBAE442wuNBIhV +dAEkTICgV0Nbugp+4+fV9Mmy5F0UFCb3VoUJ4CKJoFORHMCHQCRtyUPGTBJvuqr3 +RyKkAQc7T9gBvo34CTs7fkBG/sja2tlbAq9AjgzUUwHErKH5djNKqLfzUg9MjcF0 +XH/pW/MrhJSMsZbDjk+Y4URffpujxSIz/IiKjJ790Kcapyr3GbJr813XzPSB01EI +yvL/GZBCY28svVtocyBubRyUsDkNdcg+X489JJLyITonMQ3APXIEQh5o6/YaSuPT +9l3GrFeDMZE70Ex1g/RF45cIw89HzunTcpW6on2Qsp7uC5oKah+j5Ah7mCFgnUny +NuZ53MyOV+h+FVxt1zykAO/VOPZg+x6N5/jK3TDkAqLr//JJcRh6NBkW8m72AfGR +O0xTSKLZIHbg+CFvoAoQ5sRewyRWzLLT1fvqt8mIPyLCOufZlwjatKlCTY0uV1y+ +pKgtFGedrc1cS9zuF6K9CtsYhSIuCN2KB1lKdj7EvkGOsVMopGtF+XT6A9Q697kp +8E/67eH6pLIuu/4HK11e54V6ALXr02bG23u/096oVL/EoaCyjKIhP9J7WlD1C4ev +T2odKhTogoZsg0CASLc8xoA99qHzlatkv/UV4lFDbqcgrVGiQDHZNquJOuz4CTRb +HgrD09DfktcTS8EhtgX1S/4sGMKVsITM +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +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 +dw== +-----END CERTIFICATE----- diff --git a/certs/client_tls.conf b/certs/client_tls.conf new file mode 100644 index 0000000..ebab688 --- /dev/null +++ b/certs/client_tls.conf @@ -0,0 +1,26 @@ +# Android 客户端 TLS/DTLS 加密通信配置文件 + +[global] +role = "client" +verify_peer = true +security_level = 1 +hw_accel = false +secure_memory = false + +[certificates] +# 文件身份模式必须显式声明 source="file" + allow_file_identity=true +# Android 默认身份源为 android_keystore,文件私钥模式需强制开启 +source = "file" +allow_file_identity = true +# 运行时路径由 App 在代码中动态设置(从 assets 复制到 filesDir/certs/) +cert_file = client_chain.crt +key_file = client.key +ca_file = root_ca.crt + +[tcp] +keepalive_interval = 30 +nodelay = true + +[udp] +mtu = 1500 +cookie_verify = true diff --git a/certs/root_ca.crt b/certs/root_ca.crt new file mode 100644 index 0000000..1e14b51 --- /dev/null +++ b/certs/root_ca.crt @@ -0,0 +1,33 @@ +-----BEGIN CERTIFICATE----- +MIIFtzCCA5+gAwIBAgIUR+n01aMdSgMRx/foDV8RjXLjhzcwDQYJKoZIhvcNAQEL +BQAwazELMAkGA1UEBhMCQ04xEDAOBgNVBAgMB0JlaWppbmcxEDAOBgNVBAcMB0Jl +aWppbmcxFDASBgNVBAoMC1JvYm90U2VydmVyMRAwDgYDVQQLDAdSb290IENBMRAw +DgYDVQQDDAdSb290IENBMB4XDTI2MDQwMzA2NTExNloXDTM2MDMzMTA2NTExNlow +azELMAkGA1UEBhMCQ04xEDAOBgNVBAgMB0JlaWppbmcxEDAOBgNVBAcMB0JlaWpp +bmcxFDASBgNVBAoMC1JvYm90U2VydmVyMRAwDgYDVQQLDAdSb290IENBMRAwDgYD +VQQDDAdSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAub27 +kBnuApEZdIdPyQM7jKAKEDserH9gXbHGfhd7x/iRXyJ/OjkV3HFu4ojnXHmon1wc +RnwtRagrrYtgURI3bJcltdrugVmyJsOOonYpt2AFMeAj1B7XK9vAua+qTZAHwJIy +Lj6VvZ4JOfAm/RjTg1kFMTfG9uHij7Sefq7h67xYwricmJCsEoHW7rMDWJmwNx8z +p44I07Wd5jg4utzWp+tfsWv7x+lrLIT9ZVR3NN5TzbBiSqfbBjW45BpcuNKb9f5t ++MmSru4axP7mn0mGQJTnP1+osvbj19L5eQcStea0JJXzzzUyNQ7u3wiwk1iz3COT +YZy/lIF4Afia6WnB5u9OUfQ53hriurCh2mTQ19UXrBJPN6VagaI8SDdi885MFMBO +3qAjYvZ4xB6rI+f3OfTbUgf3AZi6TlSvpbHgK+rvz02aBSdhcxqMRDHwKX4F0q6l +3PVEqkQVg734a0bq3e/YTgTEdiB/ymnEIQ2zmEgelVZQaECrWbbIb/ap70218mih +QqZnECca/zx6HPQjBflnX3XTVbw7XPQ0A7mmltwlDL5x9A8sL2UwuLbeOSiVWeGi +86KwsFh8sq6XHyPrIjj75LCA8ZrblaW2bKAScksnsxITw9xvsimcURx36Fk81Zye +oAOdvKW8rSBP3P22TGgBCle8A2bxsofbDnsY8oMCAwEAAaNTMFEwHQYDVR0OBBYE +FPa8QPuXwyZTz9BTu6cdzGLsiGeXMB8GA1UdIwQYMBaAFPa8QPuXwyZTz9BTu6cd +zGLsiGeXMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggIBADG4jH4X +Uugkvn8oyjPcweyvLKyUl5jQA5zPzJxRhfL8dWj659JklQNhRY4/cvvJgMt+//kp +eAXQfuEwATgDBBuWZgJFBee/FQhV02Wahl/RZHrISkJAdR9W9RQsmdI7wDhkOzRk +R+74lPfBzlpd5J5rx605PYSbC7V+6TKpbUP+g8mNyxGPRhTCK7C2UU5301+0wyuK +aXrUP0QLaQz7psOogVnFeG1xoimq5u3PwadPIcD0adSriKwrtbxtmneFddnaLTxz +RhGhc3229eCViog7ZcMQVT4+hloD2jKyczVsnkFjEFHR+uuqUgm25xxupyJkgvzJ +3JarglY77lyB5iWJQ7VZCbxAzk9cFT066RXKmMvXbiVuJeceoJJ8F1Hjsag7Ren+ +pNgq4KYi7dYGzbZp8F5denSZKsZoKKAKLgUnF4i4WdXBdV1pzz0TM3QCo/8yNI2q +yx5v4B5DkgQA5kAY4brXfewFD1pmZiNgY+6GUNCcR+IWZ5iB9u1c/fQRnuXQR6BL +6fPFYEeyN+8yuzilNe7kf+sRXZYT9jKWvrZ10YZPwKXtdifyNprNd4AuvJsg/4xU +7Tq94LCvvCIa9VGe3A/oo48W9p4eRZAPT/bhFh8uvcoxb4IVGwfPTC9BY+dHRZ1E +zIBD7mhyDDN+jd9SnLlKf4chOsr+GZveVwvp +-----END CERTIFICATE-----