This commit is contained in:
wangjianhong
2025-07-23 17:30:33 +08:00
commit 5e4e272b3a
875 changed files with 362355 additions and 0 deletions

201
doc/接口文档.md Normal file
View File

@@ -0,0 +1,201 @@
# 接口设计
## 签发证书
POST /api/v1/certificates
> 请求示例
```json
{
"subject": "/C=CN/ST=BeiJing/L=BeiJing/O=Arrokoth/OU=Arrokoth CA Center/CN=www.yyds8848.com",
"subjectAltName": "www.yyds8848.com,www.arrokoth.com",
"alg": "rsa",
"len": 2048
}
```
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|subject|body|string| 是 |主题|
|subjectAltName|body|string| 是 |备用主题|
|alg|body|string| 否 |算法|
|len|body|string| 否 |长度|
> 返回示例
```json
{
"code": 200,
"message": "Certificate issued successfully",
"date": "2025-07-03 07:39:27",
"data": {
"certId": "1751528367115078262928cd5466747993e",
"certCn": "www.yyds8848.com",
"certDn": "CN=www.yyds8848.com,OU=Arrokoth CA Center,O=Arrokoth,ST=BeiJing,C=CN",
"publicKeyAlg": "RSA",
"signatureAlg": "SHA256-RSA",
"keyLength": 0,
"issuerCn": "Arrokoth CaRoot",
"issuerDn": "CN=Arrokoth CaRoot,OU=Arrokoth CA Center,O=Arrokoth,L=BeiJing,ST=BeiJing,C=CN,1.2.840.113549.1.9.1=#0c134361526f6f744079796473383834382e636f6d",
"serialNumber": "1152921504606847039",
"certSubAltName": "",
"beforeTime": "2025-07-03 07:39:27",
"afterTime": "2035-07-01 07:39:27",
"version": "3",
"privateKey": "-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC47MLVZQKG0XiP\ncdTBqJNr0xm4FTDQXKTY3pkkGQt4AEFvhmGiHrtAOI1sQNmMdr54SrXb85x+OCHP\nEKSOivFZiJZsMDSzxkp8bdw94C9qej2IU5bFz+Zy6YinA+isynOKxDhkp2QXC8pT\n1sY1ZDJnVXrb2Yu5SH0Y8l+f9U0L4JsRFOWgzzyqOpMmrNPZ2AZUp3p67cDYw9F0\nkNWt9xhOEDAPCXwtkwHUhSMqtk72cqRkC7q7qftjQox6WTTnwGcUG+j5sYQrnzyO\ne4NG9S2k8FNHONPayRxLRQnDfgAUrIS5MMdZamrRELqWIHVoAbeKmKqLrBrLIDoD\n4wvGZeNXAgMBAAECggEAC5dM3Qr682VffP+XD4PCqHWvvSyYMISQu/Ez6yHQvgxS\nDayqzk/Geo+GOcdU0NZD47lXGHrMD9NH4ePlVJ6b4ySfEm1Gbbrw7JyxkIVOo4oW\n9PERrcN1aorTIG4ryuIuXNUmGGpaPow5ed4n8q0dmwGDdRKijJILw/ZejQxXRcu1\nISO57BJvZO4rbx5iN8xXMKQFsUOsTXOxCnY1dwBNffLMLPrvwybklHeSkLh2aZp1\n09NLvEx+EKgTeQu6/N014dXUqVdEmPGr50tgI+qtSfRPMa5VysT17OjC3cHTCSgL\nhPxEf5YcknwWEOV13mA85O9tbw3aIVU3pF3uJv2oAQKBgQDllOlYzLvPVO/PXhNB\nQ4pBPM8xmnLoJiLpWC3+BdYVaMn69mmAH6SoNeFT4kkYRMhxpn1c+Y28dr+ALDwT\n/rvkxPzHRdmJKhFZk1Xz0gMAtOVM9SDTOfRzstAOkxJaxNejOk5Cy0UPKAXVzGvZ\nGzWZbY3Pa/1z0qDmtq8wPER7VwKBgQDONFWnXldzkCuHuGh22pJX5jw+8zx1xHZ6\nRdWGrf26btkpF7mFSa+sQ8HrKcjDhcoEUKeaHp7YgzQCBm7j50qdL9gw4zNrCKRX\net1N8LmOMK76sC9H19KcU5zpQA+x9sgddLgcLa2cWlKUStoBvGU15gO9JiVMRfMm\nCqk/FHDYAQKBgGX/0/Ck/WgvJ2BtPobHeBxl5PP318d2chpUGBL9CtF2Pg6m/dZz\nuJcXYSYAqlMC9D8yJg5xvVwXMhvDC2oiyd3o+xmZ2f1L2GuAvzZVfwoIVLvtSIkv\n/YCN2EwxYX08aUXW+MBKSUNjl7wWV3Ac26Jv/wpBw1h7Iwt97LW0gQR/AoGAE6yg\no4h31Zni3V818GkoX2SjSOpSUXY+S6pQFjqRo/EhnS8bT2FZdpk8bmCdPDKOtNyx\nMR5Mz6GtG6hbejk+QEMpYHi9FjBL5eDeLqqSOcPhXh/jUvp/qNS9eu/Wz4cZTt4t\nFtsw3mMrz+RYaqP8EClzH9/83QsriOype1BK+AECgYBuJrQpUPxJ3HZ4NmboAu+m\n7IaIN/5a1Lon8A8J+WZNHggAY1naz1ZGmfWczha7HIo7m1P3/Ic2J3Fkq9mZVhxR\n4WIMQsQKvq10jjypa7sFgpy9Qyfh+wow1w0Dh9rfmq3gdHpaQSHTBb2cVxKEVuRX\nI+PLDCSAB4lYaJyCeD6SJw==\n-----END PRIVATE KEY-----\n",
"csr": "-----BEGIN CERTIFICATE REQUEST-----\nMIICwTCCAakCAQAwfDELMAkGA1UEBhMCQ04xEDAOBgNVBAgMB0JlaUppbmcxEDAO\nBgNVBAcMB0JlaUppbmcxETAPBgNVBAoMCEFycm9rb3RoMRswGQYDVQQLDBJBcnJv\na290aCBDQSBDZW50ZXIxGTAXBgNVBAMMEHd3dy55eWRzODg0OC5jb20wggEiMA0G\nCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC47MLVZQKG0XiPcdTBqJNr0xm4FTDQ\nXKTY3pkkGQt4AEFvhmGiHrtAOI1sQNmMdr54SrXb85x+OCHPEKSOivFZiJZsMDSz\nxkp8bdw94C9qej2IU5bFz+Zy6YinA+isynOKxDhkp2QXC8pT1sY1ZDJnVXrb2Yu5\nSH0Y8l+f9U0L4JsRFOWgzzyqOpMmrNPZ2AZUp3p67cDYw9F0kNWt9xhOEDAPCXwt\nkwHUhSMqtk72cqRkC7q7qftjQox6WTTnwGcUG+j5sYQrnzyOe4NG9S2k8FNHONPa\nyRxLRQnDfgAUrIS5MMdZamrRELqWIHVoAbeKmKqLrBrLIDoD4wvGZeNXAgMBAAGg\nADANBgkqhkiG9w0BAQsFAAOCAQEAHusBCc9FJF5O+evkyDkh8Rco3M/7vBhJzrpy\nUWNjkV1vGm9yN4gLl4A1bJHyVYylll14RnA22Xpyzd8bNuKjThWylX7QKeTqN6rn\nIoupvak8oNTv8qX30ofNdEq9n1O4iWQBL5eVDc58hC8TuO1erEB8hXY4OMaIrT5T\nJlscPrnEMei263GUg+fvVqBHeRiqhz3J/OG03tr0YWuKrQC8tuyQZ/nIOwUU5BD/\nADlWVDYzzdW7Yk9xQ5+KxpPNhLrDocLOHc/cOVGklUpEEmbCEy6gwhNpI9kz/fqq\n5IduYc7cZtjELceHjTnAi6DVRhFcictTp5OFFeZ/znV8EcbQ7A==\n-----END CERTIFICATE REQUEST-----\n",
"cert": "-----BEGIN CERTIFICATE-----\nMIIEOTCCAyGgAwIBAgIIEAAAAAAAAD8wDQYJKoZIhvcNAQELBQAwgZ8xCzAJBgNV\nBAYTAkNOMRAwDgYDVQQIDAdCZWlKaW5nMRAwDgYDVQQHDAdCZWlKaW5nMREwDwYD\nVQQKDAhBcnJva290aDEbMBkGA1UECwwSQXJyb2tvdGggQ0EgQ2VudGVyMRgwFgYD\nVQQDDA9BcnJva290aCBDYVJvb3QxIjAgBgkqhkiG9w0BCQEWE0NhUm9vdEB5eWRz\nODg0OC5jb20wHhcNMjUwNzAzMDczOTI3WhcNMzUwNzAxMDczOTI3WjBqMRkwFwYD\nVQQDDBB3d3cueXlkczg4NDguY29tMRAwDgYDVQQIDAdCZWlKaW5nMQswCQYDVQQG\nEwJDTjERMA8GA1UECgwIQXJyb2tvdGgxGzAZBgNVBAsMEkFycm9rb3RoIENBIENl\nbnRlcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALjswtVlAobReI9x\n1MGok2vTGbgVMNBcpNjemSQZC3gAQW+GYaIeu0A4jWxA2Yx2vnhKtdvznH44Ic8Q\npI6K8VmIlmwwNLPGSnxt3D3gL2p6PYhTlsXP5nLpiKcD6KzKc4rEOGSnZBcLylPW\nxjVkMmdVetvZi7lIfRjyX5/1TQvgmxEU5aDPPKo6kyas09nYBlSnenrtwNjD0XSQ\n1a33GE4QMA8JfC2TAdSFIyq2TvZypGQLurup+2NCjHpZNOfAZxQb6PmxhCufPI57\ng0b1LaTwU0c409rJHEtFCcN+ABSshLkwx1lqatEQupYgdWgBt4qYqousGssgOgPj\nC8Zl41cCAwEAAaOBrDCBqTAJBgNVHRMEAjAAMB0GA1UdDgQWBBQBpl6EheRx76r1\nAg9kIJv4wI/MczAfBgNVHSMEGDAWgBQmVjU7gd9cNNNZVB5u1G8UKTF7LTALBgNV\nHQ8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwOgYDVR0fBDMwMTAvoC2gK4Yp\naHR0cDovL3d3dy55eWRzODg0OC5jb20vY2EvY3JsL0NhUm9vdC5jcmwwDQYJKoZI\nhvcNAQELBQADggEBAHuhVbldxLqHnjCPLLGuqM42udHc7q3Xv2UOhAZ+617eHc/j\nyGLvtP7Emb/StTvl56pLzmdsImrgShq0pgwbePTIfeXR3/F6z2yozs+szNu5ByvB\ne4cFzlA2iaitczl4fQ2xZc+6JN9UrCVXOiZx3nYVbaWKSVZsZR99SfDO/oS+MQGU\n4kVufKW6D2UZ2cJoL2Og2SqMA1IbwMpR6YRNUC+l1CyRrI4eKvXzNVB919iea0GA\nBMuW3l5PyNgUpvF/k/i/pbGydiPa6AvBvZiE99tTaNqCdZ1tN4v50bNukR3anUUj\nRwVPWcHnnz4ndo2HX1QQZFfVzub1v0GiukrZQO8=\n-----END CERTIFICATE-----\n",
"ca": "-----BEGIN CERTIFICATE-----\nMIIEIzCCAwugAwIBAgIUeIR55+RFLD01XCrjcxvWvlGzy7owDQYJKoZIhvcNAQEL\nBQAwgZ8xCzAJBgNVBAYTAkNOMRAwDgYDVQQIDAdCZWlKaW5nMRAwDgYDVQQHDAdC\nZWlKaW5nMREwDwYDVQQKDAhBcnJva290aDEbMBkGA1UECwwSQXJyb2tvdGggQ0Eg\nQ2VudGVyMRgwFgYDVQQDDA9BcnJva290aCBDYVJvb3QxIjAgBgkqhkiG9w0BCQEW\nE0NhUm9vdEB5eWRzODg0OC5jb20wIBcNMjUwNDI1MDEwNjIxWhgPMjA1NTA0MTgw\nMTA2MjFaMIGfMQswCQYDVQQGEwJDTjEQMA4GA1UECAwHQmVpSmluZzEQMA4GA1UE\nBwwHQmVpSmluZzERMA8GA1UECgwIQXJyb2tvdGgxGzAZBgNVBAsMEkFycm9rb3Ro\nIENBIENlbnRlcjEYMBYGA1UEAwwPQXJyb2tvdGggQ2FSb290MSIwIAYJKoZIhvcN\nAQkBFhNDYVJvb3RAeXlkczg4NDguY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A\nMIIBCgKCAQEArWhHhE0fQAcCjxvpEWAqp9wE8ZG3RQA6sE8TvaOdMBBU1slOADew\n/eQEEuxSPB/Xo9MIJvPjiQFnI6xyeRLR+yNRkbDN+txQi3D4wyMK5GBgmQuU8m5t\np0kGIA60jHzbGJl12JhvSOdafA7FkOBmb8d8GLSJpMXEXo+B6F9pvA7yVwYFf+MS\ntuQmWwJnfaA0QjY1tgbZy1eAvwl/qybacv2pKoJVhfEZ4IBuMYxO1JIffn80cjGw\nzbISz8wL+Aui8XlFwQshZw2E/RqzchG8JKplG68NtKnx4Hw+oiDaCxho28YxcGCn\nk84NDjK+Ko9ibobcd9CxjYczjJolUmL3OwIDAQABo1MwUTAdBgNVHQ4EFgQUJlY1\nO4HfXDTTWVQebtRvFCkxey0wHwYDVR0jBBgwFoAUJlY1O4HfXDTTWVQebtRvFCkx\ney0wDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEALjfBfoqjSkS2\nRk58isHXqGwt9W6RyE2p7jYFN6LQK4h6BWhaTnMjYvE/RPAjlq4b8dZgj8w03wvJ\num4iE7ho7vIXCTx5qcGGtQgCOjNMJ/IpxvdZ64Y7snWYkCYCXq+dElNNX5Zg3fkV\n1dJOE1t7aKnRxbTtBGu9ePCF7yhy8YO/ymeV5MQjPaCXdugTHdnV3GdKrccP9/82\nrXJXcFxT6MJSZGdmiUDWpyJ6Q5bkEfoM6DlFtcjaOTn7X/HWICuh2FheU0EprRkL\nX2ZpQI7f3Mt7IYblZ9dwS7Yd9VpuDbhmisAl/xCRWo1P2c/gZ4kk8soZLAvyTiTH\nvBJWIa0QSg==\n-----END CERTIFICATE-----\n"
}
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|none|Inline|
### 返回数据结构
状态码 **200**
|名称|类型|必选|约束|中文名|说明|
|---|---|---|---|---|---|
|» code|int|true|none||none|
|» message|string|true|none||none|
|» date|date|true|none||none|
|» data|object|true|none||none|
|»» certId|string|true|none||证书ID|
|»» certCn|string|true|none||证书CN|
|»» certDn|string|true|none||证书DN|
|»» publicKeyAlg|string|true|none||公钥算法|
|»» signatureAlg|string|true|none||签名算法|
|»» keyLength|string|true|none||key长度|
|»» issuerCn|string|true|none||颁发者CN|
|»» issuerDn|string|true|none||颁发者DN|
|»» serialNumber|string|true|none||这书序列号|
|»» certSubAltName|string|true|none||这书备用主题|
|»» beforeTime|string|true|none||生效时间|
|»» afterTime|string|true|none||失效时间|
|»» version|string|true|none||版本|
|»» privateKey|string|true|none||私钥|
|»» csr|string|true|none||证书请求|
|»» cert|string|true|none||证书|
|»» ca|string|true|none||CA证书|
## 查询证书
GET /api/v1//certificates/{id}
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|string| 是 |证书id|
> 返回示例
```json
{
"code": 200,
"message": "Certificate issued successfully",
"date": "2025-07-03 07:39:27",
"data": {
"certId": "1751528367115078262928cd5466747993e",
"certCn": "www.yyds8848.com",
"certDn": "CN=www.yyds8848.com,OU=Arrokoth CA Center,O=Arrokoth,ST=BeiJing,C=CN",
"publicKeyAlg": "RSA",
"signatureAlg": "SHA256-RSA",
"keyLength": 0,
"issuerCn": "Arrokoth CaRoot",
"issuerDn": "CN=Arrokoth CaRoot,OU=Arrokoth CA Center,O=Arrokoth,L=BeiJing,ST=BeiJing,C=CN,1.2.840.113549.1.9.1=#0c134361526f6f744079796473383834382e636f6d",
"serialNumber": "1152921504606847039",
"certSubAltName": "",
"beforeTime": "2025-07-03 07:39:27",
"afterTime": "2035-07-01 07:39:27",
"version": "3",
"privateKey": "-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC47MLVZQKG0XiP\ncdTBqJNr0xm4FTDQXKTY3pkkGQt4AEFvhmGiHrtAOI1sQNmMdr54SrXb85x+OCHP\nEKSOivFZiJZsMDSzxkp8bdw94C9qej2IU5bFz+Zy6YinA+isynOKxDhkp2QXC8pT\n1sY1ZDJnVXrb2Yu5SH0Y8l+f9U0L4JsRFOWgzzyqOpMmrNPZ2AZUp3p67cDYw9F0\nkNWt9xhOEDAPCXwtkwHUhSMqtk72cqRkC7q7qftjQox6WTTnwGcUG+j5sYQrnzyO\ne4NG9S2k8FNHONPayRxLRQnDfgAUrIS5MMdZamrRELqWIHVoAbeKmKqLrBrLIDoD\n4wvGZeNXAgMBAAECggEAC5dM3Qr682VffP+XD4PCqHWvvSyYMISQu/Ez6yHQvgxS\nDayqzk/Geo+GOcdU0NZD47lXGHrMD9NH4ePlVJ6b4ySfEm1Gbbrw7JyxkIVOo4oW\n9PERrcN1aorTIG4ryuIuXNUmGGpaPow5ed4n8q0dmwGDdRKijJILw/ZejQxXRcu1\nISO57BJvZO4rbx5iN8xXMKQFsUOsTXOxCnY1dwBNffLMLPrvwybklHeSkLh2aZp1\n09NLvEx+EKgTeQu6/N014dXUqVdEmPGr50tgI+qtSfRPMa5VysT17OjC3cHTCSgL\nhPxEf5YcknwWEOV13mA85O9tbw3aIVU3pF3uJv2oAQKBgQDllOlYzLvPVO/PXhNB\nQ4pBPM8xmnLoJiLpWC3+BdYVaMn69mmAH6SoNeFT4kkYRMhxpn1c+Y28dr+ALDwT\n/rvkxPzHRdmJKhFZk1Xz0gMAtOVM9SDTOfRzstAOkxJaxNejOk5Cy0UPKAXVzGvZ\nGzWZbY3Pa/1z0qDmtq8wPER7VwKBgQDONFWnXldzkCuHuGh22pJX5jw+8zx1xHZ6\nRdWGrf26btkpF7mFSa+sQ8HrKcjDhcoEUKeaHp7YgzQCBm7j50qdL9gw4zNrCKRX\net1N8LmOMK76sC9H19KcU5zpQA+x9sgddLgcLa2cWlKUStoBvGU15gO9JiVMRfMm\nCqk/FHDYAQKBgGX/0/Ck/WgvJ2BtPobHeBxl5PP318d2chpUGBL9CtF2Pg6m/dZz\nuJcXYSYAqlMC9D8yJg5xvVwXMhvDC2oiyd3o+xmZ2f1L2GuAvzZVfwoIVLvtSIkv\n/YCN2EwxYX08aUXW+MBKSUNjl7wWV3Ac26Jv/wpBw1h7Iwt97LW0gQR/AoGAE6yg\no4h31Zni3V818GkoX2SjSOpSUXY+S6pQFjqRo/EhnS8bT2FZdpk8bmCdPDKOtNyx\nMR5Mz6GtG6hbejk+QEMpYHi9FjBL5eDeLqqSOcPhXh/jUvp/qNS9eu/Wz4cZTt4t\nFtsw3mMrz+RYaqP8EClzH9/83QsriOype1BK+AECgYBuJrQpUPxJ3HZ4NmboAu+m\n7IaIN/5a1Lon8A8J+WZNHggAY1naz1ZGmfWczha7HIo7m1P3/Ic2J3Fkq9mZVhxR\n4WIMQsQKvq10jjypa7sFgpy9Qyfh+wow1w0Dh9rfmq3gdHpaQSHTBb2cVxKEVuRX\nI+PLDCSAB4lYaJyCeD6SJw==\n-----END PRIVATE KEY-----\n",
"csr": "-----BEGIN CERTIFICATE REQUEST-----\nMIICwTCCAakCAQAwfDELMAkGA1UEBhMCQ04xEDAOBgNVBAgMB0JlaUppbmcxEDAO\nBgNVBAcMB0JlaUppbmcxETAPBgNVBAoMCEFycm9rb3RoMRswGQYDVQQLDBJBcnJv\na290aCBDQSBDZW50ZXIxGTAXBgNVBAMMEHd3dy55eWRzODg0OC5jb20wggEiMA0G\nCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC47MLVZQKG0XiPcdTBqJNr0xm4FTDQ\nXKTY3pkkGQt4AEFvhmGiHrtAOI1sQNmMdr54SrXb85x+OCHPEKSOivFZiJZsMDSz\nxkp8bdw94C9qej2IU5bFz+Zy6YinA+isynOKxDhkp2QXC8pT1sY1ZDJnVXrb2Yu5\nSH0Y8l+f9U0L4JsRFOWgzzyqOpMmrNPZ2AZUp3p67cDYw9F0kNWt9xhOEDAPCXwt\nkwHUhSMqtk72cqRkC7q7qftjQox6WTTnwGcUG+j5sYQrnzyOe4NG9S2k8FNHONPa\nyRxLRQnDfgAUrIS5MMdZamrRELqWIHVoAbeKmKqLrBrLIDoD4wvGZeNXAgMBAAGg\nADANBgkqhkiG9w0BAQsFAAOCAQEAHusBCc9FJF5O+evkyDkh8Rco3M/7vBhJzrpy\nUWNjkV1vGm9yN4gLl4A1bJHyVYylll14RnA22Xpyzd8bNuKjThWylX7QKeTqN6rn\nIoupvak8oNTv8qX30ofNdEq9n1O4iWQBL5eVDc58hC8TuO1erEB8hXY4OMaIrT5T\nJlscPrnEMei263GUg+fvVqBHeRiqhz3J/OG03tr0YWuKrQC8tuyQZ/nIOwUU5BD/\nADlWVDYzzdW7Yk9xQ5+KxpPNhLrDocLOHc/cOVGklUpEEmbCEy6gwhNpI9kz/fqq\n5IduYc7cZtjELceHjTnAi6DVRhFcictTp5OFFeZ/znV8EcbQ7A==\n-----END CERTIFICATE REQUEST-----\n",
"cert": "-----BEGIN CERTIFICATE-----\nMIIEOTCCAyGgAwIBAgIIEAAAAAAAAD8wDQYJKoZIhvcNAQELBQAwgZ8xCzAJBgNV\nBAYTAkNOMRAwDgYDVQQIDAdCZWlKaW5nMRAwDgYDVQQHDAdCZWlKaW5nMREwDwYD\nVQQKDAhBcnJva290aDEbMBkGA1UECwwSQXJyb2tvdGggQ0EgQ2VudGVyMRgwFgYD\nVQQDDA9BcnJva290aCBDYVJvb3QxIjAgBgkqhkiG9w0BCQEWE0NhUm9vdEB5eWRz\nODg0OC5jb20wHhcNMjUwNzAzMDczOTI3WhcNMzUwNzAxMDczOTI3WjBqMRkwFwYD\nVQQDDBB3d3cueXlkczg4NDguY29tMRAwDgYDVQQIDAdCZWlKaW5nMQswCQYDVQQG\nEwJDTjERMA8GA1UECgwIQXJyb2tvdGgxGzAZBgNVBAsMEkFycm9rb3RoIENBIENl\nbnRlcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALjswtVlAobReI9x\n1MGok2vTGbgVMNBcpNjemSQZC3gAQW+GYaIeu0A4jWxA2Yx2vnhKtdvznH44Ic8Q\npI6K8VmIlmwwNLPGSnxt3D3gL2p6PYhTlsXP5nLpiKcD6KzKc4rEOGSnZBcLylPW\nxjVkMmdVetvZi7lIfRjyX5/1TQvgmxEU5aDPPKo6kyas09nYBlSnenrtwNjD0XSQ\n1a33GE4QMA8JfC2TAdSFIyq2TvZypGQLurup+2NCjHpZNOfAZxQb6PmxhCufPI57\ng0b1LaTwU0c409rJHEtFCcN+ABSshLkwx1lqatEQupYgdWgBt4qYqousGssgOgPj\nC8Zl41cCAwEAAaOBrDCBqTAJBgNVHRMEAjAAMB0GA1UdDgQWBBQBpl6EheRx76r1\nAg9kIJv4wI/MczAfBgNVHSMEGDAWgBQmVjU7gd9cNNNZVB5u1G8UKTF7LTALBgNV\nHQ8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwOgYDVR0fBDMwMTAvoC2gK4Yp\naHR0cDovL3d3dy55eWRzODg0OC5jb20vY2EvY3JsL0NhUm9vdC5jcmwwDQYJKoZI\nhvcNAQELBQADggEBAHuhVbldxLqHnjCPLLGuqM42udHc7q3Xv2UOhAZ+617eHc/j\nyGLvtP7Emb/StTvl56pLzmdsImrgShq0pgwbePTIfeXR3/F6z2yozs+szNu5ByvB\ne4cFzlA2iaitczl4fQ2xZc+6JN9UrCVXOiZx3nYVbaWKSVZsZR99SfDO/oS+MQGU\n4kVufKW6D2UZ2cJoL2Og2SqMA1IbwMpR6YRNUC+l1CyRrI4eKvXzNVB919iea0GA\nBMuW3l5PyNgUpvF/k/i/pbGydiPa6AvBvZiE99tTaNqCdZ1tN4v50bNukR3anUUj\nRwVPWcHnnz4ndo2HX1QQZFfVzub1v0GiukrZQO8=\n-----END CERTIFICATE-----\n",
"ca": "-----BEGIN CERTIFICATE-----\nMIIEIzCCAwugAwIBAgIUeIR55+RFLD01XCrjcxvWvlGzy7owDQYJKoZIhvcNAQEL\nBQAwgZ8xCzAJBgNVBAYTAkNOMRAwDgYDVQQIDAdCZWlKaW5nMRAwDgYDVQQHDAdC\nZWlKaW5nMREwDwYDVQQKDAhBcnJva290aDEbMBkGA1UECwwSQXJyb2tvdGggQ0Eg\nQ2VudGVyMRgwFgYDVQQDDA9BcnJva290aCBDYVJvb3QxIjAgBgkqhkiG9w0BCQEW\nE0NhUm9vdEB5eWRzODg0OC5jb20wIBcNMjUwNDI1MDEwNjIxWhgPMjA1NTA0MTgw\nMTA2MjFaMIGfMQswCQYDVQQGEwJDTjEQMA4GA1UECAwHQmVpSmluZzEQMA4GA1UE\nBwwHQmVpSmluZzERMA8GA1UECgwIQXJyb2tvdGgxGzAZBgNVBAsMEkFycm9rb3Ro\nIENBIENlbnRlcjEYMBYGA1UEAwwPQXJyb2tvdGggQ2FSb290MSIwIAYJKoZIhvcN\nAQkBFhNDYVJvb3RAeXlkczg4NDguY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A\nMIIBCgKCAQEArWhHhE0fQAcCjxvpEWAqp9wE8ZG3RQA6sE8TvaOdMBBU1slOADew\n/eQEEuxSPB/Xo9MIJvPjiQFnI6xyeRLR+yNRkbDN+txQi3D4wyMK5GBgmQuU8m5t\np0kGIA60jHzbGJl12JhvSOdafA7FkOBmb8d8GLSJpMXEXo+B6F9pvA7yVwYFf+MS\ntuQmWwJnfaA0QjY1tgbZy1eAvwl/qybacv2pKoJVhfEZ4IBuMYxO1JIffn80cjGw\nzbISz8wL+Aui8XlFwQshZw2E/RqzchG8JKplG68NtKnx4Hw+oiDaCxho28YxcGCn\nk84NDjK+Ko9ibobcd9CxjYczjJolUmL3OwIDAQABo1MwUTAdBgNVHQ4EFgQUJlY1\nO4HfXDTTWVQebtRvFCkxey0wHwYDVR0jBBgwFoAUJlY1O4HfXDTTWVQebtRvFCkx\ney0wDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEALjfBfoqjSkS2\nRk58isHXqGwt9W6RyE2p7jYFN6LQK4h6BWhaTnMjYvE/RPAjlq4b8dZgj8w03wvJ\num4iE7ho7vIXCTx5qcGGtQgCOjNMJ/IpxvdZ64Y7snWYkCYCXq+dElNNX5Zg3fkV\n1dJOE1t7aKnRxbTtBGu9ePCF7yhy8YO/ymeV5MQjPaCXdugTHdnV3GdKrccP9/82\nrXJXcFxT6MJSZGdmiUDWpyJ6Q5bkEfoM6DlFtcjaOTn7X/HWICuh2FheU0EprRkL\nX2ZpQI7f3Mt7IYblZ9dwS7Yd9VpuDbhmisAl/xCRWo1P2c/gZ4kk8soZLAvyTiTH\nvBJWIa0QSg==\n-----END CERTIFICATE-----\n"
}
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|none|Inline|
### 返回数据结构
状态码 **200**
|名称|类型|必选|约束|中文名|说明|
|---|---|---|---|---|---|
|» code|int|true|none||none|
|» message|string|true|none||none|
|» date|date|true|none||none|
|» data|object|true|none||none|
|»» certId|string|true|none||证书ID|
|»» certCn|string|true|none||证书CN|
|»» certDn|string|true|none||证书DN|
|»» publicKeyAlg|string|true|none||公钥算法|
|»» signatureAlg|string|true|none||签名算法|
|»» keyLength|string|true|none||key长度|
|»» issuerCn|string|true|none||颁发者CN|
|»» issuerDn|string|true|none||颁发者DN|
|»» serialNumber|string|true|none||这书序列号|
|»» certSubAltName|string|true|none||这书备用主题|
|»» beforeTime|string|true|none||生效时间|
|»» afterTime|string|true|none||失效时间|
|»» version|string|true|none||版本|
|»» privateKey|string|true|none||私钥|
|»» csr|string|true|none||证书请求|
|»» cert|string|true|none||证书|
|»» ca|string|true|none||CA证书|
## 撤销证书
DELETE /api/v1//certificates/{id}
### 请求参数
|名称|位置|类型|必选|说明|
|---|---|---|---|---|
|id|path|string| 是 |证书id|
> 返回示例
```json
{
"code": 200,
"message": "1751549288338860850448a772b47c3ad17",
"date": "2025-07-03 07:39:27"
}
```
### 返回结果
|状态码|状态码含义|说明|数据模型|
|---|---|---|---|
|200|[OK](https://tools.ietf.org/html/rfc7231#section-6.3.1)|none|Inline|
### 返回数据结构
状态码 **200**
|名称|类型|必选|约束|中文名|说明|
|---|---|---|---|---|---|
|» code|int|true|none||none|
|» message|string|true|none||none|
|» date|date|true|none||none|

97
doc/需求文档.md Normal file
View File

@@ -0,0 +1,97 @@
# 小型CA系统需求文档
## 1. 概述
小型CA系统是一个用于证书签发和黑名单查询的应用程序采用前后端分离架构。前端使用Vue框架构建用户界面方便用户提交证书签发请求和查询黑名单后端使用Go语言开发通过调用OpenSSL命令行工具实现证书相关操作并提供API接口供前端调用。
## 2. 功能需求
### 2.1 证书签发
- **功能描述**允许用户提交证书签发请求系统根据用户提供的信息调用OpenSSL命令行工具生成证书并将生成的证书返回给用户。
- **输入**:用户提交的证书签发请求,包括但不限于域名、组织信息、有效期等。
- **输出**:生成的证书文件,包括证书文件、私钥文件和签发者证书。
### 2.2 黑名单查询
- **功能描述**提供API接口供用户查询当前的黑名单列表。
- **输入**:无。
- **输出**当前的黑名单列表包含被禁止的域名、IP地址等信息。
### 2.3 证书撤销
- **功能描述**:允许管理员撤销已签发的证书,并将其加入黑名单。
- **输入**:需要撤销的证书序列号或域名。
- **输出**:撤销操作结果状态。
### 2.4 权限管理
- **功能描述**:提供基于角色的访问控制(RBAC)机制。
- **角色定义**
- 管理员:可执行所有操作,包括证书签发、撤销和黑名单管理
- 操作员:可执行证书签发和黑名单查询
- 审计员:仅可查询黑名单和操作日志
- **权限验证**所有API请求必须携带有效的JWT令牌进行身份验证
## 3. 非功能需求
### 3.1 性能
- 系统应能支持并发的证书签发请求和黑名单查询请求响应时间不超过2秒。
### 3.2 安全性
- 所有功能应具有基于角色的访问控制机制,不同权限用户只能访问授权功能。
- 证书签发过程应遵循安全的加密标准,确保证书的安全性。
- 所有API请求必须通过HTTP传输并使用JWT进行身份验证。
- 敏感操作(如证书撤销)需要二次验证。
- 系统应记录详细的操作日志,便于审计追踪。
### 3.3 可扩展性
- 系统应易于扩展,支持未来增加新的证书类型或功能。
## 4. 架构设计
### 4.1 前后端分离架构
- **前端**使用Vue框架构建用户界面负责展示和收集用户输入并将请求发送到后端API。
- **后端**使用Go语言和Gin框架构建API服务提供证书签发和黑名单查询等功能并调用OpenSSL命令行工具处理证书相关操作。
### 4.2 数据库
- 使用MongoDB存储证书签发请求和黑名单信息。
### 4.3 证书签发流程
1. 用户通过前端提交证书签发请求。
2. 后端接收请求并验证用户权限。
3. 后端调用OpenSSL命令行工具生成证书。
4. 生成的证书存储在数据库中,并返回给前端。
### 4.4 黑名单管理流程
1. 用户通过前端请求查询黑名单。
2. 后端验证用户权限并从数据库读取黑名单信息。
3. 管理员可通过前端提交证书撤销请求。
4. 后端验证管理员权限并执行撤销操作,将被撤销证书加入黑名单。
5. 系统记录操作日志并返回结果。
## 5. 技术选型
### 5.1 前端技术栈
- **框架**Vue.js
- **构建工具**Vue CLI
- **样式**CSS Modules 或 Tailwind CSS
### 5.2 后端技术栈
- **语言**Go
- **框架**Gin
- **数据库**MongoDB
- **证书签发工具**OpenSSL命令行工具
## 6. 开发计划
### 6.1 第一阶段1 - 2周
- 设计数据库模型。
- 实现后端API接口。
- 实现证书签发功能。
### 6.2 第二阶段3 - 4周
- 实现黑名单查询功能。
- 前端界面开发。
- 系统集成测试。
### 6.3 第三阶段5周
- 系统性能优化。
- 用户手册编写。
- 系统部署。