From 99e2e4a48cad7b723c5627495e49ad0143de46e8 Mon Sep 17 00:00:00 2001 From: TommyLike Date: Tue, 9 May 2023 17:23:47 +0800 Subject: [PATCH 1/2] Document on how to integrate COPR with signatrust --- docs/images/copr with signatrust.png | Bin 0 -> 64678 bytes docs/integrate-signatrust-with-copr.md | 154 +++++++++++++++++++++++++ 2 files changed, 154 insertions(+) create mode 100644 docs/images/copr with signatrust.png create mode 100644 docs/integrate-signatrust-with-copr.md diff --git a/docs/images/copr with signatrust.png b/docs/images/copr with signatrust.png new file mode 100644 index 0000000000000000000000000000000000000000..5c7b1797e0748b0d16b0209e22e2f9bf1009ff2d GIT binary patch literal 64678 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 t-uWFT_5@BE?>B~}Y|LPDIGTqSml= 400: + raise CoprKeygenRequestError( + msg="Failed to create key-pair for user: {}, project:{}, status_code: {}, response: {}" + .format(username, projectname, response.status_code, response.text), + request=query, response=response) +``` +2. Export the user's public key and save into local file +```python +def get_pubkey(username, projectname, log, outfile=None): + """ + Retrieves public key for user/project from signer host. + + :param outfile: [optional] file to write obtained key + :return: public keys + + :raises CoprSignError: failed to retrieve key, see error message + :raises CoprSignNoKeyError: if there are no such user in keyring + """ + usermail = create_gpg_email(username, projectname) + cmd = [SIGN_BINARY, "-u", usermail, "-p"] + + returncode, stdout, stderr = call_sign_bin(cmd, log) + if returncode != 0: + if "unknown key:" in stderr: + raise CoprSignNoKeyError( + "There are no gpg keys for user {} in keyring".format(username), + return_code=returncode, + cmd=cmd, stdout=stdout, stderr=stderr) + raise CoprSignError( + msg="Failed to get user pubkey\n" + "sign stdout: {}\n sign stderr: {}\n".format(stdout, stderr), + return_code=returncode, + cmd=cmd, stdout=stdout, stderr=stderr) + + if outfile: + with open(outfile, "w") as handle: + handle.write(stdout) + + return stdout +``` +3. Sign the rpm packages with obs-sign client. currently, the package is signed in sequence and the digest method is determined by specific mock environment. +```python +def _sign_one(path, email, hashtype, log): + cmd = [SIGN_BINARY, "-4", "-h", hashtype, "-u", email, "-r", path] + returncode, stdout, stderr = call_sign_bin(cmd, log) + if returncode != 0: + raise CoprSignError( + msg="Failed to sign {} by user {}".format(path, email), + return_code=returncode, + cmd=cmd, stdout=stdout, stderr=stderr) + return stdout, stderr +``` +4. Drop signature of rpm packages, COPR use rpm command util to drop signature. +```python +def unsign_rpms_in_dir(path, opts, log): + """ + :param path: directory with rpms to be signed + :param Munch opts: backend config + :type log: logging.Logger + :raises: :py:class:`backend.exceptions.CoprSignError` failed to sign at least one package + """ + rpm_list = [ + os.path.join(path, filename) + for filename in os.listdir(path) + if filename.endswith(".rpm") + ] + + if not rpm_list: + return + + errors = [] # tuples (rpm_filepath, exception) + for rpm in rpm_list: + try: + _unsign_one(rpm) + log.info("unsigned rpm: {}".format(rpm)) + + except CoprSignError as e: + log.exception("failed to unsign rpm: {}".format(rpm)) + errors.append((rpm, e)) + + if errors: + raise CoprSignError("Rpm unsign failed, affected rpms: {}" + .format([err[0] for err in errors])) +``` +5. Check server liveness. +```python +@app.route('/ping') +def ping(): + """ + Checks if server still alive + + :status 200: server alive + """ + app.logger.debug("got ping") + return Response("pong\n", content_type="text/plain;charset=UTF-8") +``` +6. Delete user related key pairs. it's missing in COPR project currently, but also needs to be considered. + +# Requirements for Signatrust + +To support COPR signing scenarios, Signatrust need to support the following features: +1. Considering there would be hundreds of projects/key pairs in COPR, it's reasonable to support private key pairs which +can be managed by users(clients) themselves. in the meantime the public keys will be managed by admin group with much caution. +2. Add liveness/readiness endpoint for signatrust control server. +3. **Optional**: Support to delete rpm signature in client. +4. Support to specify different digest method in signing request. + +# Possible changes for COPR + +1. Delete copr-keygen and obs-sign components +2. Integrate copr-backend with signatrust for generate/sign/delete operations, including updating invoke API/Command as well as related configuration. +3. Support delete key pairs when deleting projects. +4. Add script to migrate existing key pairs from copr-keygen to signatrust. + +# Architecture update +![architecture](./images/copr%20with%20signatrust.png) + -- Gitee From 6afb9e55d10257fbe29855c91eb98b23193a79af Mon Sep 17 00:00:00 2001 From: TommyLike Date: Tue, 9 May 2023 22:27:34 +0800 Subject: [PATCH 2/2] Fix comment issue --- docs/integrate-signatrust-with-copr.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/integrate-signatrust-with-copr.md b/docs/integrate-signatrust-with-copr.md index 0a93e5f..cef47b0 100644 --- a/docs/integrate-signatrust-with-copr.md +++ b/docs/integrate-signatrust-with-copr.md @@ -132,6 +132,7 @@ def ping(): return Response("pong\n", content_type="text/plain;charset=UTF-8") ``` 6. Delete user related key pairs. it's missing in COPR project currently, but also needs to be considered. +7. Prolong the expiring key pairs, this is an administrative tool used in COPR [code](https://github.com/fedora-copr/copr/blob/main/keygen/run/gpg-copr-prolong) # Requirements for Signatrust @@ -140,7 +141,8 @@ To support COPR signing scenarios, Signatrust need to support the following feat can be managed by users(clients) themselves. in the meantime the public keys will be managed by admin group with much caution. 2. Add liveness/readiness endpoint for signatrust control server. 3. **Optional**: Support to delete rpm signature in client. -4. Support to specify different digest method in signing request. +4. **No need**: We don't need to support to specify different digest method in signing request, cause now all the signature in COPR is calculated in sha256. see [here](https://github.com/fedora-copr/copr/issues/2705) +5. **Optional**: Support to prolong the expiring key pairs. # Possible changes for COPR -- Gitee