本地存储库中的客户端校验和、服务器校验和和校验策略是什么?

JFrog支持
2022-02-15 07:52

通常,有两个感兴趣的校验和:一个由Artifactory计算(基于文件内容),另一个由客户端在部署时提供。这些校验和应该是相同的,以确保二进制文件的数据完整性。

对于每个存储库,您可以配置一个校验和策略;基于此策略,Artifactory将知道在由Artifactory计算的校验和与客户端提供的校验和不匹配的情况下如何表现。

两种校验和策略的选择如下:

1.根据客户端校验和进行验证——这是本地存储库的默认校验和策略。

使用此策略,如果/当客户端将校验和作为文件头部署时,Artifactory将计算文件的校验和,然后将客户端上传的校验和与Artifactory计算的校验和进行比较。

如果在部署期间未随文件一起提供校验和,则将显示以下消息:

客户端没有发布校验和值。
如果您信任上传的工件,您可以通过单击“Fix checksum”按钮来接受实际的校验和。

通过单击“Fix Checksum”按钮,您将指示Artifactory信任由Artifactory自己生成的校验和,这样就不会比较客户端校验和和服务器校验和来检查文件内容是否有效。

如果没有提供校验和,并且没有使用“Fix checksum”来解决问题,那么当客户端试图发送get请求以访问该校验和文件时,Artifactory将返回404(未找到)错误。

在提交的校验和与Artifactory生成的校验和不匹配的情况下,Artifactory将返回409(冲突)错误,直到部署有效的校验和。

重要提示:

在文件传输过程中,甚至在部署后,文件被损坏是很容易/常见的;通过使用checksum - policy选项(确保客户端提供的校验和与Artifactory计算的校验和相匹配),用户可以确保文件的数据完整性没有受到损害。

2.信任服务器生成校验和。

Artifactory不会验证客户端发送的校验和,而是信任服务器本地计算的校验和。上传的工件可以立即使用,但是完整性可能会受到损害。

这种策略有点风险,因为服务器永远不会将Artifactory根据文件内容计算的校验和与客户端上传的校验和进行比较。

下面是一个使用Curl部署文件的例子,带有checksum头,但没有实际的字节:

-T file.jar -H "X-Checksum-Sha1:c9a355147857198da3bdb3f24c4e90bd98a61e8b""http://localhost:8081/artifactory/libs-release-local/file.jar