init
This commit is contained in:
201
doc/接口文档.md
Normal file
201
doc/接口文档.md
Normal 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
97
doc/需求文档.md
Normal 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周)
|
||||
- 系统性能优化。
|
||||
- 用户手册编写。
|
||||
- 系统部署。
|
||||
|
||||
Reference in New Issue
Block a user