试图了解authenticode代码签名和强命名.
我是否正确地认为,如果我对引用一些dll(不是强名称)的exe进行代码签名,恶意用户可以替换我的DLL并以一种看起来像是由我签名但正在运行的方式分发应用程序他们的代码?
假设这是真的,看起来你真的不想在没有强烈命名整个事情的情况下签署.NET应用程序,否则你会让人们能够在你编写的应用程序的幌子下执行代码?
我不确定的原因是,我在网上找到的文章(包括使用SN + Authenticode的MSDN文档)似乎都没有提到这一点,这似乎是一个相当重要的理解点(如果我理解正确) ?
我试图了解代码签名过程的工作原理.我的目标是获取使用公司A的企业证书签名的.ipa文件,更改捆绑包ID,然后使用公司B的App Store Distribution证书再次签名并发布到App Store.
首先,这甚至可能吗?我在这里读到" ......我很确定你不能(也不应该)使用这个工具来重新签名App Store分发证书 ".有人可以详细说明吗?
我已经尝试了许多脚本喜欢这个和这个和这个,但一些调整后,他们都似乎有同样的问题,当我尝试发送应用程序使用应用程序加载器的审查.我到达的错误是:
任何人都可以帮助我吗?请注意,我知道如何通过出口证书等来做到这一点 - 但在这里我正在探索B公司是否能够自己做到这一点,如果我给他们公司A的.ipa文件.我可以更详细地解释我在做什么,如果需要的话 - 只要问一下.
谢谢!
编辑:我已经知道这个封闭的SO问题,但我发布了一个新问题,因为我认为我的更具体,我不是要求通用的方法来实现我想要的 - 我只想看看所描述的场景是可能的.
我的安装程序在构建过程中使用代码签名证书"签署"DLL.
我注意到如果我尝试连续构建两次,第二次构建失败,因为DLL已经签名所以签名代码扼流圈.显然,我可以通过在构建中签署DLL的副本来解决这个问题,但问题引起了我的兴趣:
是否可以"取消签名"DLL,如果没有,为什么不......?
Travis CI无法构建我的应用程序,因为Xcode项目设置为需要代码签名而Travis没有我的证书.我可以通过禁用代码签名来解决此问题,但随后沙盒和授权将无法正常工作.我知道,从普通的命令行构建的时候,你可以传递CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO到xcodebuild禁用代码签名,但你怎么特拉维斯CI做到这一点?
这是我的.travis.yml:
language: objective-c
xcode_workspace: "Mac Linux USB Loader.xcworkspace"
xcode_scheme: "Mac Linux USB Loader"
Run Code Online (Sandbox Code Playgroud)
这就是错误(我已经编写了许多以前引用Cocoapods的行,因为它们不相关:
Check dependencies
Code Sign error: No code signing identities found: No valid signing identities (i.e. certificate and private key pair) matching the team ID “T47PR9EQY5” were found.
Run Code Online (Sandbox Code Playgroud) 这不是关于如何签署.apk文件的问题.我想知道签名实际意味着什么以及如何实施.
在.apk文件里面有META-INF文件夹,里面有两个文件.
第一个是CERT.SF包含各种组件的SHA1哈希,如下所示:
Name: res/layout/main.xml
SHA1-Digest: Cox/T8fN1X9Hv4VqjH9YKqc/MsM=
Name: AndroidManifest.xml
SHA1-Digest: wZ418H9Aix1LNch3ci7c+cHyuZc=
Name: resources.arsc
SHA1-Digest: P+uoRrpFyVW6P3Wf+4vuR2ZSuXY=
Name: classes.dex
SHA1-Digest: cN3zXtGii9zuTOkBqDTLymeMZQI=
Run Code Online (Sandbox Code Playgroud)
还有一个名为CERT.RSA的文件.我认为这是验证签名的公钥.
我的问题是,整个.apk文件的签名存储在哪里?实际上签了什么?它可能是
如果您能够向我指出详细签名和验证过程的文档,那也会好得多.
在我的组织中,我们使用具有强名称程序集的snk文件.我们自己生成snk.
此外,我们在二进制文件上使用代码签名签名.我们从Verisign获得了pfx.
尝试使用TFS 2010 上的Team Build(MSBuild)构建项目时出现此错误:
C:\ Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1970):
无法导入以下密钥文件:CCC.pfx.
密钥文件可能受密码保护.
要更正此问题,请尝试再次导入证书,或使用以下密钥容器名称手动将证书安装到强名称CSP:VS_KEY_C00C673BBB353901C:\ Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1970):
导入密钥文件"CCC.pfx"已取消.
它在Visual Studio 2010中构建正常.程序集使用PFX文件进行签名.通常在Visual Studio中,我们会在第一次构建时提示输入密码,但之后再也不会...
我试过跑:
sn -i companyname.pfx VS_KEY_3E185446540E7F7A
Run Code Online (Sandbox Code Playgroud)
正如Stack Overflow问题中建议的其他回复无法导入密钥文件'blah.pfx' - 错误'密钥文件可能受密码保护'.我已尝试按Stack Overflow问题中的建议导入个人证书存储区使用MSBuild对ClickOnce或程序集结果进行错误MSB3321签名.但一切都无济于事,仍然是同样的错误.
我该怎么做?我是否必须以某种方式将证书添加到构建服务运行的Windows帐户或类似的东西?
或者,如何在Team Build中完成构建而不使用签名?我只是想检查它编译并运行单元测试.我不需要签名.
我最近升级到Xcode 10并开始更新我们的应用程序以切换4.2的过程在重建第三方框架并为各种问题添加变通方法一天左右之后,我能够在新的模拟器上运行我们的应用程序.
但是,当我尝试在我的个人电话上运行(运行iOS 12.0 GM)时,我在安装应用程序时遇到了错误,如标题中所述.
我知道在SO和互联网上有很多关于这个主题的已经 回答的 问题,但是我无法让这些问题起作用.
它已经阻止了我一天半左右,所以我想知道是否有人对如何减轻这种情况有任何见解.
到目前为止我采取的步骤还没有奏效(也许他们将来会为其他人工作!):
code sign on copy检查所有复制的框架Developer,而不是Distribution任何帮助将不胜感激 :)
更新:我尝试在新机器上从头开始重新下载和重建,并出现同样的问题.有趣的是,我可以存档和验证应用程序就好了.
还尝试使用相同的包ID签署一个空项目,它工作正常.所以问题出在我们的第三方框架或者从Xcode 9.4过渡时启用的一些奇怪的设置.开始逐个删除第三方框架,直到我可以编译它.
更新2:仍然没有运气.试图清除大多数框架而没有任何东西.这是设备日志,想知道是否Skipping a profile because of error 0xe8008012与它有关:
https://gist.github.com/joshuawright11/6889ce1a0872262df77f97d63830baa5
更新3 …
我正在尝试在TFS 2008上设置持续集成构建.在我要构建的项目中,我使用密钥进行签名.此密钥使用密码.我无法构建它,因为在构建期间TFS想要显示一个无法显示的对话框.我想我需要在服务器上手动构建项目,但只有TFS资源管理器和构建部件安装在服务器上.有关如何使我的项目正确构建的任何建议?
这是TFS给出的错误:
C:\ WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets(1805,7):错误MSB4018:"ResolveKeySource"任务意外失败.System.InvalidOperationException:当应用程序未在UserInteractive模式下运行时显示模式对话框或窗体不是有效操作.指定ServiceNotification或DefaultDesktopOnly样式以显示来自服务应用程序的通知.在Microsoft.Build.Tasks.ResolveKeySource.Execute()的Microsoft.Build.Tasks.ResolveKeySource.ResolveAssemblyKey()上的System.Windows.Form.ShowDialog(IWin32Window所有者)处的System.Windows.Forms.Form.ShowDialog()
因此,我正在尝试将所有的ant构建脚本转换为gradle,并且除了如何在gradle.properties文件中配置签名之外,我已经能够找到所有这些资源和文档.
ant.properties就像这样:
key.alias=alias
key.store.password=password
key.store=keystore.file
key.alias.password=password
Run Code Online (Sandbox Code Playgroud)
但是我如何在gradle中做同样的事情呢?
code-signing ×10
android ×2
c# ×2
ios ×2
strongname ×2
xcode ×2
.net ×1
app-store ×1
authenticode ×1
build ×1
certificate ×1
delay-sign ×1
dll ×1
gradle ×1
ios12 ×1
macos ×1
msbuild ×1
tfs ×1
tfsbuild ×1
travis-ci ×1
winapi ×1
x509 ×1
xcode10 ×1