mac osx 数字签名


签名证书获取

mac上文件签名需要获取 Developer ID Application 证书, 具体怎么获取证书参考文章 或者google 相关的文章即可

注意:和移动端IOS的证书不是一套

证书导入

手动导入

​ 双击证书,输入密码会自动导入,再钥匙访问串里面可以看到导入的证书

指令导入

# 将证书导入mac 系统钥匙串 再使用develoer id 来签名
#step1 解锁钥匙串
security unlock-keychain -p **** login.keychain

# 将证书文件导入到系统的login 钥匙串中 之后再使用原始的签名逻辑即可 P12Path p12证书文件路径 p12 注意证书不能有空格 需要将证书文件copy到此目录
security import "$SignatureSecretKeyPath" -k login.keychain -P **** -A
# **** 表示当前证书的密码
security unlock-keychain -p **** login.keychain
# **** 表示当前账号的密码
# 注意几个密码的区分

签名指令

codesign -s identity [-i identifier] [-r requirements] [-fv] [path ...]
codesign -v [-R requirement] [-v] [path|pid ...]
codesign -d [-v] [path|pid ...]
codesign -h [-v] [pid ...]

需要签名的内容

  • mac 下的库文件 framework
  • mac 下的动态库 dylib
  • mac 下nodejs C++ 生成的 .node 文件
  • 包含的 子app文件
  • electron 本身带有的 库文件和子app 例如 Helper.app 等

脚本

#!/bin/bash -ilex
#脚本主要用来实现mac签名
#该函数递归查找 framework、dylib、node文件签名
function CodeSignFiles(){
    for element in `ls $1`
    do
        dir_or_file=$1"/"$element
        if [ -d $dir_or_file ]
        then
            strFileExName=${dir_or_file##*.}
            #echo "$strFileExName"
            #echo "$dir_or_file"
            if [[ "${dir_or_file##*.}"x = "framework"x ]];then
                echo ""
            else
                CodeSignFiles $dir_or_file
            fi;

        else
            strFileExName=${dir_or_file##*.}
            if [[ "${dir_or_file##*.}"x = "dylib"x ]];then
                #echo "$dir_or_file"
                codesign --force --verify --verbose --sign "$OSX_SIGN" "$dir_or_file"
            elif [[ "${dir_or_file##*.}"x = "node"x ]]; then
                #echo "$dir_or_file"
                codesign --force --verify --verbose --sign "$OSX_SIGN" "$dir_or_file"
            fi
        fi
    done
}

# 接收 electron-builder生成之后的 app 路径,以及 app 名字
App_path=$1
AppProductName=$2
if [ ! -n "$1" ] ;then
    echo "you should input app path...."
      exit 1
fi

if [ ! -n "$2" ] ;then
    echo "you should input app name...."
      exit 1
fi

#export OSX_SIGN = 'Developer ID Application: ****** Co., Ltd (*****)'
# 递归签名 electron-builder生成之后的 app 路径
CodeSignFiles "$App_path/Contents/Resources/"

# 签名electron app 自带的
codesign --force --verify --verbose --sign "$OSX_SIGN" "$App_path/Contents/Frameworks/Mantle.framework/Versions/A"
codesign --force --verify --verbose --sign "$OSX_SIGN" "$App_path/Contents/Frameworks/ReactiveCocoa.framework/Versions/A"
codesign --force --verify --verbose --sign "$OSX_SIGN" "$App_path/Contents/Frameworks/Squirrel.framework/Versions/A"
codesign --force --verify --verbose --sign "$OSX_SIGN" "$App_path/Contents/Frameworks/Electron Framework.framework/Versions/A"
codesign --force --verify --verbose --sign "$OSX_SIGN" "$App_path/Contents/Frameworks/Mantle.framework/"
codesign --force --verify --verbose --sign "$OSX_SIGN" "$App_path/Contents/Frameworks/ReactiveCocoa.framework/"
codesign --force --verify --verbose --sign "$OSX_SIGN" "$App_path/Contents/Frameworks/Squirrel.framework/"
codesign --force --verify --verbose --sign "$OSX_SIGN" "$App_path/Contents/Frameworks/Electron Framework.framework/"
codesign --force --verify --verbose --sign "$OSX_SIGN" "$App_path/Contents/Frameworks/$AppProductName Helper EH.app/" --timestamp=none
codesign --force --verify --verbose --sign "$OSX_SIGN" "$App_path/Contents/Frameworks/$AppProductName Helper NP.app/" --timestamp=none
codesign --force --verify --verbose --sign "$OSX_SIGN" "$App_path/Contents/Frameworks/$AppProductName Helper.app/" --timestamp=none
codesign --force --verify --verbose --sign "$OSX_SIGN" "$App_path/Contents/MacOS/$AppProductName" --timestamp=none

codesign -f -s "$OSX_SIGN" -v "$App_path" --deep --timestamp=none


# 查看签名状态 如果是 accep 则表示签名成功
echo "### verifying signature"
codesign -vvv -d "$App_path"
spctl -a -t exec -vv "$App_path"


所有图片均来自网络


   转载规则


《mac osx 数字签名》 Smoking 采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
 上一篇
《学习力:颠覆职场学习的高效方法》 《学习力:颠覆职场学习的高效方法》
三大策略功利性 聚焦寻找解决方案去阅读不需要一定得全部读完,能够有效的减少大量意志力去读完一本书,而且需要深入学习才能了解解决方法,能够有效的避免浅读,找到方法之后自然应用于实际,可以有效避免遗忘。这些正式大脑阻碍我们学习的问题,
2019-05-28
下一篇 
windows 数字签名 windows 数字签名
获取数字签名证书​ 这个不具体分析,网上可以找到很多文章怎么获取数字签名证书 签名工具 signtool.exesigntool [command] [options] [file_name | ...] 全部指令详解参考 文档
2019-05-24
  目录