签署Java代码

在上一篇文章中,我们讨论了如何保护移动代码 。

提到的措施之一是签名代码。 这篇文章探讨了Java程序如何工作。

数字签名

数字签名的基础是密码学 ,特别是公钥密码学 。 我们使用一组加密密钥:私有密钥和公共密钥。

私钥用于签名文件,并且必须保持秘密。 公钥用于验证使用私钥生成的签名。 由于键之间的特殊数学关系,这是可能的。

签名和公钥都需要转移给接收者。

证明书

为了信任文件,需要验证该文件上的签名。 为此,需要一个与用于签署文件的私钥相对应的公钥。 那么我们如何才能信任公钥呢?

这是证书的来源。证书包含公用密钥和标识该密钥所有者的专有名称 。

信任来自证书本身已签名的事实。 因此,证书还包含签名和签名者的专有名称。

当我们控制通信的两端时,我们既可以提供证书又可以完成证书 。 例如,这对于您编写的连接到您控制的服务器的移动应用程序效果很好。

如果您不能同时控制两端,那么我们需要一个替代方案。 签名者的专有名称可用于查找签名者的证书。 使用该证书中的公钥,可以验证原始证书中的签名。

我们可以以这种方式继续创建证书链 ,直到我们明确信任的签名者为止。 这通常是公认的证书颁发机构 (CA),例如VeriSign或Thawte 。

密钥库

在Java中,私钥和证书存储在称为keystore的受密码保护的数据库中。

每个密钥/证书组合由一个称为别名的字符串标识。

代码签名工具

Java附带了两个用于代码签名的工具: keytool和jarsigner 。

使用jarsigner程序使用存储在密钥库中的证书对jar文件进行签名。

使用keytool程序创建私钥和相应的公钥证书,从/向/从密钥库检索/存储那些证书,以及管理密钥库。

keytool程序无法创建由其他人签名的证书。 它可以创建证书签名请求 ,但是您可以将其发送到CA。 它还可以将CA的响应导入密钥库。

替代方法是使用支持此类CA功能的工具如OpenSSL或BSAFE 。

代码签名环境

代码签名应该在安全的环境中进行,因为涉及私钥,并且私钥需要保密。 如果私钥落入他人之手,则第三方可能会使用您的密钥对他们的代码签名 ,从而诱使客户信任该代码。

这意味着您可能不想在构建机器上维护密钥库,因为该机器可能对很多人都可用。 一种更安全的方法是引入专用的签名服务器:

您还应该使用不同的签名证书进行开发和生产。

时间戳记

证书仅在有限的时间内有效。 使用公钥证书已过期的私钥签名的任何文件都不应再受信任,因为这些文件可能已在证书过期后进行了签名。

我们可以通过给文件加上时间戳来减轻此问题。 通过将受信任的时间戳记添加到文件,即使签名证书过期,我们也可以信任它。

但是,我们如何信任时间戳? 好吧,当然可以通过使用时间戳管理局进行签名! OpenSSL程序也可以帮助您。

超越代码签名

签名代码时,仅证明该代码来自您。 为了使客户能够信任您的代码,它必须是可信任的。 您可能希望设置一个完整的安全开发生命周期 (SDL),以确保它尽可能地多。

在这方面要考虑的另一件事是第三方代码。 大多数软件包都嵌入了商业和/或开源库。 理想情况下,这些库由其作者签名。 但是无论如何,您都需要拥有所有权,因为客户不在乎在您自己编写的代码还是在所使用的库中是否发现了漏洞。

参考: 安全软件开发博客上的JCG合作伙伴 Remon Sinnema 签署Java代码 。

翻译自: https://www.javacodegeeks.com/2012/11/signing-java-code.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370733.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蜘蛛搜索引擎_SEO:搜索引擎蜘蛛要引导,不能佛系优化

又是一个不眠的夜晚,工作对生活节奏不断地敲打,我们新一代的年轻小伙不得不进步,满怀热情来挑战我们对于工作的激情,虽然每一天工作都是重复地进行,但是每一天都有我们留下的痕迹,为世界的美好增添一道绚丽…

SQL数据库排序规则修改

修改SQL数据库排序规则: 1.修改为单用户模式 2.然后关闭所有的查询窗口,修改Options的Collocation属性,如:Chinese_PRC_90_CI_AS 3.再修改为多用户模式 例如: ALTER DATABASE SRMain SET SINGLE_USER WITH ROLLBACK IMMEDIATE Go…

属于计算机病毒主要特征的是,[单选] 不属于计算机病毒的主要特征的是()

[单选] 不属于计算机病毒的主要特征的是()更多相关问题已知两直线l1:mx+y-20和l2:(m+2)x+y+40与两坐标轴围成的四边形有外接圆,则实数m的值为()A.1B.&#xf…

小程序滴滴车主板块的银行卡管理左滑删除编辑

最近在类似于滴滴软件的一款小程序,工程确实有点大,很多东西都是第一次做。这次记录一下关于左滑删除的一个代码记录。主要的思想就是计算滑动距离的大小来使用css中的 transition 控制滑动的效果,主流的都是控制边距margin来达到左滑的效果。…

华菱重卡仪表指示说明_仪表装置11种常见故障的解决方法

1. 转速表工作不正常或停止工作首先检查转速表背面的黑色3孔插头与插座接触是否良好及电压正常与否。3个端子的连接情况:端子a是电源负极,与仪表盘14孔白色插座上的棕色导线连接后搭铁(仪表盘上所有搭铁点均由棕色导线汇集在一起,并通过胶布包…

WADL中的JSON模式

在其他工作之间&#xff0c;我最近一直在审查WADL规范&#xff0c;以解决一些文档问题&#xff0c;以生成更新版本。 因为显而易见的一件事是缺少对XML以外的语言的语法支持-是的&#xff0c;您可以使用JSON <-> XML Schema的映射&#xff0c;但这对于JSON纯粹主义者而言…

怎么用python自制计算公式_如何使用Python和Numpy计算r平方?

我最初发布下面的基准是为了推荐numpy.corrcoef&#xff0c;愚蠢地没有意识到原来的问题已经使用了corrcoef&#xff0c;实际上是在询问高阶多项式拟合。我已经使用statsmodels为多项式r-squared问题添加了一个实际的解决方案&#xff0c;并且我已经离开了原始的基准测试&#…

ASP .NET SVN emmet 插件

学习 ASP .NET 时间的第三周&#xff1a; 来讲讲如何在 visual studio 2013...上搭载 SVN吧: 废话不多说&#xff1a; One Step&#xff1a; 电脑上已安装 visual studio 2013 等版本&#xff08;未安装时 红色区域是不存在的&#xff09; Two Step&#xff1a; 从官网上下载对…

Python之路3【知识点】白话Python编码和文件操作(截载)

无意发现这篇文章讲的比较好&#xff0c;存下来供参考&#xff1a; http://www.cnblogs.com/luotianshuai/p/5735051.html转载于:https://www.cnblogs.com/shikaihong/p/7778880.html

Http协议入门

[在此处输入文章标题] 1 web web入门 1&#xff09;web服务软件作用: 把本地资源共享给外部访问 2&#xff09;tomcat服务器基本操作 &#xff1a; 启动: %tomcat%/bin/startup.bat 关闭&#xff1a; %tomcat%/bin/shutdown.bat 访问tomcat主页&#xff1a; http://loca…

计算机硬件系统都是看得见的,计算机组成硬件系统).doc

计算机组成硬件系统)各位计算机协会的成员大家好&#xff0c;很高兴大家能陪我们走过这段难忘的时光。为了让大家更好的学到东西&#xff0c;我们特地将计算机方面的东西整理成技术文档&#xff0c;共大家使用&#xff0c;祝大家学得愉快&#xff01;湘信院计算机协会一&#x…

Google Guava –期货

这篇文章是我在Google Guava上的系列文章的延续&#xff0c;这次涵盖了Future。 Futures类是用于使用Future / ListenableFuture接口的静态实用程序方法的集合。 Future是提交给ExecutorService的异步任务&#xff08;可运行或可调用&#xff09;的句柄。 Future界面提供以下方…

iptables 配置后连接不上数据库_Linux服务器配置-VSFTP服务配置(三)

上文&#xff1a;Linux服务器配置-VSFTP服务配置(二)一、vsftpd服务防火墙配置1、主动(POST)模式 FTP 防火墙配置CentOS6 系统 iptables 的配置iptables -t filter --line-number -nL INPUT#显示现有防火墙规则&#xff0c;查看是否开启20、21号端口。iptables -t filter -I IN…

下标索引必须为正整数类型或逻辑类型_Python3 基本数据类型

Python中的变量不需要声明。每个变量在使用前都必须赋值&#xff0c;变量赋值以后该变量才会被创建。在Python中&#xff0c;变量就是变量&#xff0c;它没有类型&#xff0c;我们所说的"类型"是变量所指的内存中对象的类型。Python 3中有六个标准的数据类型&#xf…

noip模拟赛 写代码

分析&#xff1a;这其实就是括号匹配题&#xff0c;一眼贪心题&#xff0c;不过一开始贪错了&#xff0c;以为([)]是合法的......其实括号之间不能嵌套. 一开始的想法是尽量往左边填左括号&#xff0c;因为每种括号的数量都确定了&#xff0c;那么左括号和右括号的数量也就确定…

[CF797C] Minimal string(贪心,栈)

题目链接&#xff1a;http://codeforces.com/contest/797/problem/C 题意&#xff1a;给个字符串&#xff0c;求字典序最小的出栈顺序。 一开始想用优先队列记录全局最小的字符&#xff0c;然后每次入栈的时候检查当前字符是不是最小的&#xff0c;如果是那么同时pop。这样做的…

让我们紧缩大数据

作为开发人员&#xff0c;我们的重点是简单&#xff0c;有效的解决方案&#xff0c;因此&#xff0c;最有价值的原则之一就是“保持简单和愚蠢”。 但是使用Hadoop map-reduce很难坚持这一点。 如果我们要评估多个Map Reduce作业中的数据&#xff0c;那么最终将得到与业务无关但…

行内元素和块元素以及行内块元素的特点

一、背景 初学html&#xff0c;接触很多标签 <h1>、<p>、<span>、<ul>、<em>等&#xff0c;当写出简单的小页面的时候&#xff0c;例如仅仅是一篇带有标题的文章&#xff0c;标题 <h1>标签单独一行&#xff0c;不管后面有多大的空间&…

软件测试的功能测试和性能测试,大型软件的功能测试流程及性能测试流程

大型软件具有涉及子模块繁多、建设过程复杂、功能全面、性能具有较高要求的特点。依据ISO/IEC 9126软件产品评估标准&#xff0c;需要对软件的功能性、可靠性、可用性、效率、可维护性、可移植性等方面进行评估。因此&#xff0c;需要有一种方法能够对大型软件进行测试&#xf…

vue 分模块打包 脚手架_Vue面试官最爱的底层源码问题,你可以这样回答!

最近看到身边很多人都在投简历&#xff0c;有因为企业裁员的&#xff0c;有因为自己想跳槽的&#xff0c;原因不一&#xff0c;但是最终大家都会需要接触到面试这个事情。但是很多人对待面试不够认真&#xff0c;只会等待结果&#xff0c;不去努力。所以这边想整理一些懒人面试…