CA证书,openssl,enc,dgst命令,base64编码,生成私有CA,make命令生成私钥证书文件

本文详细介绍了如何使用openssl工具创建私有CA,包括生成CA证书、密钥,自签名证书,颁发和吊销用户证书的过程。同时讲解了openssl的enc和dgst命令,以及base64编码在证书管理中的应用。

一. CA证书

证书的作用:让通信双方获得真的公钥

PKI:Public Key Infrastructure
签证机构:CA(Certificate Authority)
注册机构:RA
证书吊销列表:CRL
证书存取库:
证书存取库
建立私有CA:给企业内部颁发证书
OpenCA
openssl

获取证书两种方法
• 使用证书授权机构
生成证书请求(csr)
将证书请求csr发送给CA
CA签名颁发证书

• 自签名的证书
自已签发自己的公钥

OpenSSL:开源项目

三个组件:

openssl:多用途的命令行工具,包openssl
libcrypto:加密算法库,包openssl-libs
libssl:加密模块应用库,实现了ssl及tls,包nss

补充----base64编码

base64编码
在这里插入图片描述
例如:
abc的64编码
在这里插入图片描述

a=97=64+32+1

翻译成二进制
01100001
所以就有abc的二进制为
01100001 01100010 01100011

因为base64是2的6次方
所以,将他们分隔成6位的,(如果不足,向后补0,并且最后棉麻得加上=)

011000   	010110  	001001  	100011
24			22			9			35
Y			W			J			j

ab就是不足—最后要补上=
在这里插入图片描述

二. openssl

两种运行模式:交互模式和批处理模式
openssl version:程序版本号
标准命令、消息摘要命令、加密命令
标准命令:enc, ca, req

在这里插入图片描述

对称加密

工具:openssl enc, gpg
算法:3des, aes, blowfish, twofish

1. enc命令:

帮助:man enc
选项:

 -e加密,
 -d解密 
 -des3加密算法
 -in对谁加
 -a是base64编码  
 -out生成的文件
 -salt(盐)打乱加密结果--避免一样的密码hash值一样

加密:
openssl enc -e -des3 -a -salt -in testfile -out testfile.cipher
解密:
openssl enc -d -des3 -a -salt –in testfile.cipher -out testfile
在这里插入图片描述
在这里插入图片描述

单向加密 (hash运算):

工具:md5sum, sha1sum, sha224sum,sha256sum…

openssl dgst

2. dgst命令 (hash算法):

帮助:man dgst
openssl dgst -md5 [-hex默认] /PATH/SOMEFILE
openssl dgst -md5 testfile
也可以用 -sha512等
相当于md5sum /PATH/TO/SOMEFILE
在这里插入图片描述

你的理解有误。**这个签名并不是要求下载的更新包本身包含签名**,而是你需要**对更新包文件单独生成签名**,并将签名结果嵌入到 Appcast XML 中。以下是关键点澄清和完整流程: --- ### **1. 签名与更新包的关系** - **签名是独立的**: 你提供的命令是对本地已有的更新包文件(如 `update_package.zip`)生成签名,生成的是一个**独立的签名文件**(或 Base64 字符串)。这个签名不会直接修改更新包文件本身。 - **签名需嵌入 XML**: 生成的签名(如 `MEUCIQD...`)需要作为 `sparkle:edSignature` 或 `sparkle:dsaSignature` 属性值,写入到 Appcast XML 的 `<enclosure>` 标签中。Sparkle 在下载更新包后,会通过这个签名验证文件的完整性。 --- ### **2. 完整签名流程** #### **(1) 生成签名(你的命令)** ```bash openssl dgst -sha1 -binary < update_package.zip | openssl dgst -dss1 -sign dsa_priv.pem | openssl enc -base64 ``` - **作用**:对本地 `update_package.zip` 生成 DSA 签名(Base64 格式)。 - **注意**:Sparkle 2.x **推荐使用 Ed25519 签名**(更安全),命令如下: ```bash sparkle_sign_update.sh update_package.zip dsa_priv.pem ``` #### **(2) 将签名写入 Appcast XML** ```xml <enclosure url="https://example.com/updates/update_1.0.1.zip" sparkle:version="1.0.1" sparkle:edSignature="MEUCIQD...(签名内容)..." <!-- 来自上一步 --> length="123456" <!-- 文件大小(字节) --> type="application/octet-stream" /> ``` - **关键点**: - `url` 是更新包的下载地址(文件本身无需嵌入签名)。 - `sparkle:edSignature` 是步骤 (1) 生成的签名。 - `length` 是文件大小(可选但推荐)。 #### **(3) 用户下载更新包时的验证流程** 1. Sparkle 先下载 Appcast XML,检查 `url` 和签名。 2. 用户点击更新后,Sparkle 下载 `url` 指向的 `.zip` 文件。 3. Sparkle 使用公钥(配置在客户端的 `SUPublicEDKey`)验证下载的文件是否与 XML 中的签名匹配。 - **如果签名不匹配**:更新会被拒绝(防止篡改)。 --- ### **3. 你的问题的直接回答** > **“这个签名是要求我从下载 URL 中下载下来的包是经过这个签名的吗?”** **不是**。签名是独立生成的,下载的更新包文件本身不需要包含签名。签名是通过 Appcast XML 关联的,Sparkle 会在下载后验证文件是否与签名匹配。 --- ### **4. 常见误区** - **误区1**:认为签名需要写入更新包文件。 → 实际:签名是独立的,通过 XML 传递。 - **误区2**:忽略 HTTPS 要求。 → 即使签名正确,如果 Appcast XML 或更新包通过 HTTP 传输,Sparkle 2.x 会拒绝更新(需 HTTPS)。 - **误区3**:混淆 DSA 和 Ed25519。 → Sparkle 1.x 用 DSA,2.x 必须用 Ed25519(需升级工具链)。 --- ### **5. 完整示例(Swift + 命令行)** #### **(1) 生成 Ed25519 签名** ```bash # 使用 Sparkle 2.x 工具签名 sparkle_sign_update.sh update_package.zip ed25519_priv.pem ``` 输出类似: ``` EdDSA signature for update_package.zip: MEUCIQDz7bJv38jX2k...(签名内容)... ``` #### **(2) 动态生成 XML(Swift 代码)** ```swift func generateAppcastXML(version: String, downloadURL: String, signature: String) -> String { return """ <?xml version="1.0" encoding="utf-8"?> <rss version="2.0" xmlns:sparkle="http://www.andymatuschak.org/xml-namespaces/sparkle"> <channel> <item> <title>Version \(version)</title> <sparkle:version>\(version)</sparkle:version> <enclosure url="\(downloadURL)" sparkle:version="\(version)" sparkle:edSignature="\(signature)" length="\(try! Data(contentsOf: URL(fileURLWithPath: "update_package.zip")).count)" type="application/octet-stream" /> </item> </channel> </rss> """ } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值