在某种情况下,我使用jpackage实用程序尝试创建一个签名的DMG文件以交付给我的用户。我需要签署这个DMG的原因是因为我想对软件进行公证。顺便说一下,我不确定是否可以使用jpackage进行公证,但我还是在尝试。
然而,我在使用jpackage的内置代码签名选项时遇到了问题,这是成功公证的先决条件。
我正在使用选项运行jpackage --mac-sign --mac-软件包签名-前缀CardrDebate --mac-签名-密钥-用户名“开发人员ID应用程序:**********(*******)”
(我已经编辑了实际的开发人员ID,因为这是在StackOverflow上公开的)。
创建jpackage应用程序映像后,我通过导航到几个生成的.dylib文件并尝试codeign -vvv {filename}.dylib
来测试生成的代码是否实际上已签名,并且codeign表示该对象根本没有签名(不是它是错误的签名,而是它根本没有签名)。
因此,我认为我的问题是由于我(可能)在macOS上不正确地使用了jpack的签名选项。我应该如何使用这些?
仅供参考 - 在JDK 14.0.1中深入研究了这个问题,并希望将知识作为另一个临时解决方案进行共享,直到jpackage正常工作。
在JDK 14源路径中:src/JDK.incutor.jpackage/macosx/classes/JDK/inculator/jpackage/internal
MacAppBundler文件。java包含以下行(81
其中SIGNING_KEY_USER从命令行获取--mac-signing-key-user-name参数的值。
对于这些行,使用jpackage来签署DMG总是失败。(“开发人员ID应用程序:”与我的证书名称不匹配。)
更改这些行以删除“开发者ID应用程序:”和以下“”符号。在调用jpackage时,使用证书的全名作为参数值:
--mac签名密钥用户名“第三方mac开发人员应用程序:John Smith(ABCDEFGHIJ)”
jpackage现在(显然)将构建并签署DMG。实际上我并没有尝试提交给苹果商店,所以这可能仍然是不完整的。
有趣的是,MacAppStoreBundler.java源确实包含正确的“第三方Mac开发人员应用程序:”和“第三方Mac开发人员安装程序:”前缀字符串,因此怀疑jpackager实际上调用了错误的方法 - 但尚未解决。可能jpackage需要有一些额外的参数来指定应该做什么(但你会认为“--type dmg”会调用正确的逻辑)。
复制的基本(笨拙)步骤:
我会继续回答我自己的问题,因为我最终想出了如何签署我的申请并从苹果公证服务处成功公证(我的产品是http://cardr.x10.bz).
>
使用jpack的app-image选项生成未签名的应用包。
使用自动 bash 脚本对应用程序捆绑包内的所有 dylib 和可执行文件进行编码,使用代码符号 -vvv --选项运行时 --深层 --强制 --签名“开发人员 ID 应用程序: ********”
这是一个多步骤的过程,所以我将它拆分为A / B / C。
3A)在 MyApp.app/Contents/mods/ 中查找包含嵌入式.dylib文件的所有jar文件,并将这些文件解压缩到特定文件夹(或编写一个小程序来为您执行此操作)。对我来说,我的应用程序依赖于 JavaFX,因此许多 JavaFX 库在 jar 文件中包含 .dylib 文件。但是,如果您只使用默认的 Java 库,则应该能够跳到步骤 4,因为默认的 Java 库不包含 .dylib 文件。我们需要执行此步骤的原因是,Apple的公证服务也会检查这些嵌入式.dylib文件以进行编码。
3B)使用一个自动化的bash脚本,通过< code > code sign-vvv-options runtime-deep-force-sign " Developer ID Application:* * * * * * * "对您刚刚提取的所有dylib文件进行协同设计
3c)将每个签名的. dylib文件添加回各自的jar文件中,以替换原始的未签名的嵌入式. dylib文件。这是一个可能会派上用场的命令:
jar uf
现在您已经签署了.app中的每个可执行文件和dylib文件,现在是时候签署.app本身了。运行
codesign-vvv--force--sign“开发者ID应用程序:*********”MyApp.app
。
现在您已经签署了. app,您需要在应用程序包上运行jpack以从中创建DMG或PKG。请随意使用jpack mac签名功能,它将签署外部DMG/PKG。请注意,属性
--mac-signing-key-user-name"My Developer Account Name (*******)"
不应包含证书的“Developer ID Application/Installer”部分。
最后,您已经创建了一个签名的PKG/DMG,可以进行公证。使用
xcrun altools--notarize-app--username
如果公证成功(应该),您可以使用
xcrun stapler stapleMyApp.pkg
将应用程序的票证钉在PKG安装程序上。
希望这有帮助!
我在macos上有IdentityServer4。Idv在本地主机上具有自签名证书。它一直有效,直到macos更新到蒙特利。无法使用Safari、Chrome和Firefox。Safari在空白页面上搜索,Chrome显示error ERR\u SSL\u PROTOCOL\u error。 该证书从6月份起一直有效,到蒙特利为止没有任何问题。 我试图做的是: 创建了密钥大小为4096的新证书。
问题内容: 问题: 我正在使用OpenSAML构建对发布到我们服务器上的SAML 2.0响应进行身份验证的方法。我已经完成了大部分工作,并能够访问断言的各个方面。唯一的问题是,当我尝试使用下面的公钥来验证签名时,它指出“ 签名未针对凭证的密钥进行验证 ”。 有任何想法吗? 公钥: 签名: 实现方式: 问题答案: 好吧,事实证明上面的代码 是 正确的。样本SAML响应不正确。我想从这一切中学到的教训
问题内容: 我有一个外部服务,在定义的事件发生后会给我回电,并用其私钥签署他的请求。 我已经存储了如下公钥: 因此,我的工作是通过验证签名来检查请求的内容是否未更改。 这是我的算法: 但是目前,我的算法已停止在此消息的“ PublicKey publicKey = keyFactory.generatePublic(publicKeySpec)”步骤处: 那么,如何以java api接受的方式加载
给了我一个错误: javax.net.ssl.sslHandShakeException:Sun.Security.Validator.ValidatorException:PKIX路径构建失败:Sun.Security.Provider.CertPath.SunCertPathBuilderException:找不到请求目标的有效证书路径
我正在使用Firebase Google登录。它可以通过USB调试完美地工作。但当我生成签名的APK时,它停止工作。无法登录。在Android5.1上使用它
我有基于C的应用程序,它们是用openssl smime签名的。 我希望使用C语言通过OpenSSL编程验证这些s/mime签名。我花了很多时间搜索类似的场景,但没有得到相关页面。 我已经下载了(openssl-1.0.2a)并在LinuxEnv上编译。我已经将编译的静态库集成到我的项目中。 请让我知道如何进行签名验证,或者请指导我需要调用哪个API来验证s/mime签名。