java签署ssl_签署Java代码

java签署ssl

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

提到的措施之一是签名代码。 这篇文章探讨了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

java签署ssl

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

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

相关文章

服务器中有两个R文件夹,一台服务器中配置多个git sshkey

需求背景:GitHub上有两个项目,需要拉取到同一台服务器,并且都需要通过ssh的方式拉取假设两个项目分别叫: proj1 和 proj2一、分别生成 ssh key# 先生成 proj1 的 sshkey$ ssh-keygen -t rsa -C "888888qq.com"image.png…

1-26HashSet简介

Set的特点 Set里面存储的元素不能重复,没有索引,存取顺序不一致。 package com.monkey1024.set;import java.util.HashSet;/*** Set的特点:元素不能重复,没有索引,存取顺序不一致**/ public class HashSetTest01 {publ…

C++ 异常 与 ”为什么析构函数不能抛出异常“ 问题

C 用异常使得可以将正常执行代码和出错处理区别开来。 比如一个栈,其为空时,调用其一个pop 函数,接下来怎么办? 栈本身并不知道该如何处理,需要通知给其调用者(caller),因为只有调用…

适用于Java开发人员的Groovy吗? 认识Gradle,Grails和Spock

Java开发人员最感兴趣的Groovy用例有哪些? 尽管已经存在了一段时间,但是似乎只有Groovy最近才开始使用Groove。 对于某些人来说,它基本上只是另一种深奥的JVM语言,但是由于一些流行的工具可以帮助您使用Java,因此它比…

批量获取服务器cpu信息,获取服务器的cpu利用率

你得到的错误是什么?这就是我正在使用同样的东西(剥离了一下)。它显示每物理处理器的负载。strComputer "."Dim arrProcessors : ReDim arrProcessors(2,0)Set objWMIService GetObject("winmgmts:" _& "{impersonationLevelimperso…

CEPH FILESYSTEM

参考文档: CEPH FILESYSTEM:http://docs.ceph.com/docs/master/cephfs/ CephFS best practices:http://docs.ceph.com/docs/master/cephfs/best-practices/ MDS STAT:http://docs.ceph.com/docs/master/cephfs/mds-states/ Mount …

条款11 在operator=中处理“自我赋值”

“自我赋值”发生在对象被赋值给自己时: 1 classWidget {...}; 2 Widget w; 3 ... 4 w w; //赋值给自己这看起来有点愚蠢,但它合法,所以不要认定客户绝不会那么做。此外赋值动作并不总是那么可被一眼辨认出来,例如: a[…

定时器实现方式之TimerTask、Timer

在未来某个指定的时间点或者经过一段时间延迟后执行某个事件,这时候就需要用到定时器了。定时器的实现方式有很多种,今天总结最简单的实现方式。java 1.3引入了定时器框架,用于在定时器上下文中控制线程的执行,其由类Timer和Timer…

jaxb 处理_休息使用Jersey –包含JAXB,异常处理和客户端程序的完整教程

jaxb 处理最近,我开始使用Jersey API开发一个Restful Web服务项目。 在线提供了一些教程,但是我遇到了异常处理方面的一些问题,而且在使用JaxB并提供异常处理方法的完整项目中找不到任何地方。 因此,一旦我能够使用带有异常处理和…

并查集(UnionFindSet)

小米的校招题:朋友圈(25分)假如已知有n个人和m对好友关系(存于数字r)。如果两个人是直接或间接的好友(好友的好友的好友...),则认为他们属于同一个朋友圈,请写程序求出这…

Spring Boot配置文件放在jar外部

https://www.cnblogs.com/xiaoqi/p/6955288.html 在当前目录创建文件夹config,把配置文件放到config目录,然后启动 java -jar export.jar --spring.config.locationconfig/config.properties转载于:https://www.cnblogs.com/Andrew520/p/10491927.html

Apache Camel Intellij IDEA插件的工作已开始

仅仅因为圣诞节并不意味着骆驼停滞不前。 在23日晚上,我花了一些时间进行研究,并开始研究IDEA的Apache Camel插件的小原型。 它已经存在了很长时间。 原因是Apache Camel为目录提供了有关工具的大量有用信息。 该目录包含有关每个Camel组件&#xff0c…

Python函数参数传递:传值还是传引用

引子 首先来看一个列子: def change(val):val.append(100)val [T, Z, Y] nums [0, 1] change(nums) print(nums)123456123456 猜猜结果应该是什么? 如果Python函数参数的传递是传值的话,结果应该是[0, 1],如果是传引用的话&am…

activitemq与spring的整合

activitemq整合spring 一.activmq的点对点模型 pom.xml: <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLoca…

Python遍历字典的四种方法对比

#!/usr/bin/python from time import clockl [(x,x) for x in xrange (10000000)] d dict(l) t0 clock() # 方法一 for i in d: n d[i]t1 clock() # 方法二&#xff1a;最慢 for k,v in d.items(): n vt2 clock() # 方法三: 最快&#xff0c;推荐方法 for k,v in d.ite…

jboss启动初始页面_JBoss BRMS最佳实践– BPM流程初始化层的提示

jboss启动初始页面我过去发布过一些有关迁移策略的文章&#xff0c;仔细研究了流程层&#xff0c;并提供了一些有关jBPM的最佳实践 &#xff0c;它们都涉及到BPM策略的非常具体的部分。 我想重新讨论最佳实践的主题&#xff0c;然后在智能集成企业级别上&#xff0c;我们讨论使…

Python 学习笔记 多进程 multiprocessing

Python 解释器有一个全局解释器锁(PIL)&#xff0c;导致每个 Python 进程中最多同时运行一个线程&#xff0c;因此 Python 多线程程序并不能改善程序性能&#xff0c;不能发挥多核系统的优势&#xff0c;可以通过这篇文章了解。 但是多进程程序不受此影响&#xff0c; Python 2…

Django 学习笔记第一课

Django web 框架介绍&#xff1a; MVC框架的核心思想 核心思想&#xff1a;解耦&#xff1b; 好处&#xff1a;可扩展性&#xff0c;向后兼容&#xff0c;低耦合&#xff0c;高内聚&#xff1b; 普通web结构框架MVC框架 M:model 主要用于数据库层次的封装&#xff1b; V:view…

记住要重置线程上下文类加载器

我很难思考与Java 加载有关的东西&#xff0c;而不是与类加载器有关的东西。 在使用应用程序服务器或OSGi的情况下尤其如此&#xff0c;在这些应用程序服务器或OSGi中&#xff0c;经常使用多个类加载器&#xff0c;并且透明地使用类加载器的能力降低了。 我同意OSGI Alliance B…

EntityFramework Code-First—领域类配置之DataAnnotations

本文出自&#xff1a;https://www.cnblogs.com/tang-tang/p/5510574.html 一、摘要 EF Code-First提供了一个可以用在领域类或其属性上的DataAnnotation特性集合&#xff0c;DataAnnotation特性会覆盖默认的EF约定。 DataAnnotation存在于两个命名空间里&#xff1a; System.Co…