ubuntu生成密钥和证书_基于浏览器的密钥生成以及与浏览器的密钥/证书存储的交互...

ubuntu生成密钥和证书

想象以下情况:
您需要从访问您的网站的用户那里获取一个密钥(在非对称情况下为用户的公共密钥 ),并希望浏览器记住私有部分,而不会因冗长的导入过程而困扰用户。 老实说,实际上,您甚至不希望用户处理加密细节,这些细节是许多用户无法知道或不正确知道的。 它应该简单地工作,并且在最佳情况下,用户甚至不应该注意到加密正在发挥作用!
例如,想象一下整个企业范围内的证书颁发机构 ,其中员工可以申请证书或续订登录到公司Webmail系统所需的证书。 这不是员工的主要任务的一部分,因此该过程必须简单,快速且无需阅读任何内容。 非常感谢-或在本例中为Netscape -HTML发行了,因为HTML 5甚至是独立于浏览器的,也是官方标准的一部分,带有专用于密钥生成的标签: <KeyGen />。 简而言之,该标记可以强制用户的浏览器创建一个非对称密钥对,对相应的公共密钥和服务器提供的质询进行签名,最后将其发送回服务器(更确切地说,发送至表单操作中定义的位置)属性)。 私钥会自动加密并存储在浏览器的密钥存储区中。 用于公共密钥,质询和签名封装的格式称为SPKAC 。 如果服务器以X.509证书作为响应,则证书直接链接到私钥并存储在浏览器的证书存储区中。 结果,浏览器现在拥有服务器提供的(可能是新创建的)证书和相应的私钥。 所有这些只需单击一次提交按钮即可。 (是的,也许用户还应该在表单字段中添加一些详细信息……)这是在Java中的操作方法。 为了简单起见,我们将通过直接注册为Servlet在服务器端使用快速且肮脏的解决方案。

首先,我们将从初始网站开始,该网站提供一个表格,在该表格中必须输入证书申请者的一些详细信息。 请注意,这些表单域不是由签名与新生成私钥保护! 该签名仅保护公共密钥,而在这种情况下(为简单起见)该挑战是硬编码的,但必须是服务器在现实世界中选择的新值。 因此,必须保护两者:网站的交付,包括表单(它包含安全性关键值,挑战,表单操作,……必须受到完整性保护)以及将数据传输回服务器。 再一次, 如果您无法保护通信并至少确保安全目标的完整性,那么攻击者可能会破坏您的整个安全概念!

<form action="CreateCertificate" method="POST">
<table><tbody><tr><td>Country name</td><td>C</td><td><input name="c" type="text" value="" /></td></tr><tr><td>Common name</td><td>CN</td><td><input name="cn" type="text" value="" /></td></tr><tr><td>Organizational unit</td><td>OU</td> <td><input name="ou" type="text" value="" /></td></tr><tr><td>Organization</td><td>O</td><td><input name="o" type="text" value="" /></td></tr><tr><td></td><td><keygen challenge="replaceMe" keyparams="2048" keytype="rsa" name="newSPKAC"></keygen></td><td><input type="submit" value="Generate!" /></td></tr></tbody>
</table>
</form>

在服务器端,必须为表单操作目标注册一个处理类。 这是在您的web.xml配置文件中完成的。

<web-app version="3.0" xmlns:xsi="..." xmlns="..." xsi:schemalocation="..."><servlet><servlet-name>CreateCertificate</servlet-name><servlet-class>com.blogspot.armoredbarista.examples.certificates.CreateCertificate</servlet-class></servlet><servlet-mapping><servlet-name>CreateCertificate</servlet-name><url-pattern>/CreateCertificate</url-pattern></servlet-mapping><session-config><session-timeout>30</session-timeout></session-config>
</web-app>

这将导致对路径/ CreateCertificate的任何调用都由CreateCertificate类处理。 反过来,CreateCertificate类执行名称中所期望的操作:它创建一个证书,其中包括收到的公共密钥和请求者的详细信息。 公钥和质询包含在SPKAC结构中,该结构由KeyGen标记创建(在本例中,该名称由名称newSPKAC标识)。

public class CreateCertificate extends HttpServlet {/*** Processes requests for both HTTP GET and POST methods.** @param request servlet request* @param response servlet response* @throws ServletException if a servlet-specific error occurs* @throws IOException if an I/O error occurs*/protected void processRequest(final HttpServletRequest request,final HttpServletResponse response)throws ServletException, IOException {OutputStream out = response.getOutputStream();byte[] content = "An error occured".getBytes("UTF-8");try {String c = request.getParameter("c");String cn = request.getParameter("cn");String o = request.getParameter("o");String ou = request.getParameter("ou");String newSPKAC = request.getParameter("newSPKAC");X509Certificate cert = createCertificate(c, cn, ou, o, newSPKAC);content = cert.getEncoded();response.setContentType("application/x-x509-user-cert");response.setHeader("Pragma", "No-Cache");response.setDateHeader("EXPIRES", -1);} catch (...) {// error processing} finally {out.write(content);out.flush();out.close();}}/*** Handles the HTTP* GET method.** @param request servlet request* @param response servlet response* @throws ServletException if a servlet-specific error occurs* @throws IOException if an I/O error occurs*/@Overrideprotected void doGet(final HttpServletRequest request,final HttpServletResponse response)throws ServletException, IOException {processRequest(request, response);}/*** Handles the HTTP* POST method.** @param request servlet request* @param response servlet response* @throws ServletException if a servlet-specific error occurs* @throws IOException if an I/O error occurs*/@Overrideprotected void doPost(final HttpServletRequest request,final HttpServletResponse response)throws ServletException, IOException {processRequest(request, response);}
}

在这种情况下,用于响应的ContentType是application / x-x509-user-cert。

就这样。 用户输入详细信息并单击按钮后,他应该在浏览器的证书存储中找到新证书:

关于SPKAC 轻巧拆卸的最后一句话: BouncyCastle可以帮助您抵抗ASN.1和DER野兽!

参考: Java安全和相关主题博客中的JCG合作伙伴 Christopher Meyer, 基于浏览器的密钥生成以及与浏览器的密钥/证书存储的交互 。

翻译自: https://www.javacodegeeks.com/2013/06/browser-based-key-generation-and-interaction-with-the-browsers-keycertificate-store.html

ubuntu生成密钥和证书

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

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

相关文章

JPA persistence.xml SQL脚本定义

您可以在将在运行时执行的JPA持久性上下文定义中定义并链接到SQL脚本。 有标准化的属性来定义脚本&#xff0c;以分别说明如何创建模式&#xff0c;批量加载数据和删除模式&#xff1a; <persistence version"2.1" xmlns"http://xmlns.jcp.org/xml/ns/persi…

如何使用JPA和Hibernate映射JSON集合

介绍 开源的hibernate-types项目允许您将Java对象或Jackson JsonNode为JPA实体属性。 最近&#xff0c;感谢我们的杰出贡献者&#xff0c;我们添加了对类型安全集合的支持&#xff0c;该集合也可以作为JSON持久化。 在本文中&#xff0c;您将了解如何实现此目标。 Maven依赖 …

android listview mapview,RelativeLayout和并列ListView/MapView

我尝试使用RelativeLayout并排放置ListView和MapView。然而我的MapView总是高于ListView。RelativeLayout和并列ListView/MapView这里是我的main.xml布局&#xff1a;android:orientation"vertical"android:layout_width"fill_parent"android:layout_heigh…

android数据流分类,【Android工程之类】1 MVVM架构 - MVVM与单向数据流

前言这个系列将讲述使用MVVM架构、LiveData、Room、Kodein、Retrofit、EventBus来建立一个统一的、优雅的、可维护的TODO程序&#xff0c;本系列分为多个章节&#xff0c;从0开始一步一步引入这些优秀的库。下图展示的是Jetpack组件库包含的内容&#xff0c;这套的架构方案的核…

java ssl证书_Java安全教程–创建SSL连接和证书的分步指南

java ssl证书在有关应用JEE安全性的系列文章中&#xff0c;我们为您提供了另一个有关如何在Java EE应用程序中创建SSL连接和创建证书的详细教程。 如我们之前的文章中所述&#xff0c; 安全套接字层&#xff08;SSL&#xff09;/传输层安全性&#xff08;TLS&#xff09;将启用…

android运行的线程中,android中线程是否运行在单独的进程中?

android sdk中的描述Caution:Aservice runs in the main thread of its hosting process—the servicedoesnotcreateits own thread anddoesnotrunin a separate process (unless you specify otherwise). This meansthat, if your service is going to do any CPU intensive w…

通过Okta的单点登录保护Spring Boot Web App的安全

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕&#xff1f; 尝试使用Okta API进行托管身份验证&#xff0c;授权和多因素身份验证。 您可以使用SpringBoot和Okta在不到20分钟的时间内启动具有完整用户身份和授权管理的企…

java ee cdi_Java EE CDI程序化依赖关系消歧示例–注入点检查

java ee cdi在本教程中&#xff0c;我们将看到在注入Java EE CDI bean时如何避免程序依赖消除歧义。 我们已经在Jave EE依赖关系消除歧义示例中展示了如何避免CDI Bean中的依赖关系歧义消除。 在这里&#xff0c;我们将向您展示如何以动态方式避免依赖消除歧义。 我们将通过检查…

在EL表达式中引用ADF Faces组件

EL表达式通常用于在页面上指定ADF Faces组件的属性值。 有趣的是&#xff0c;我们可以使用component关键字来引用要为其评估EL表达式的组件实例。 这是略与此类似Java中。 例如&#xff0c;在以下代码段中&#xff0c;按钮的提示被评估为按钮的文本值&#xff0c;并且它的visi…

atom自动补全html代码,Atom - Emmet插件的使用详解(HTML/CSS代码自动补全)

一、Emmet的安装与介绍Emmet (前身为 Zen Coding) 是一个能大幅度提高前端开发效率的工具&#xff0c;能够实现 HTML、CSS 的快速编写。官网地址&#xff1a;http://emmet.io/官方文档&#xff1a;http://docs.emmet.io/cheat-sheet/Atom的emmet介绍页面&#xff1a;https://at…

html怎么做出相框的效果,PS滤镜制作漂亮的实木相框效果

一、新建一个600 * 800像素的文件&#xff0c;然后新建一个图层&#xff0c;前景颜色设置为红色&#xff0c;背景设置为深红色&#xff0c;执行&#xff1a;滤镜 > 渲染 > 纤维&#xff0c;参数设置如下图。二、执行&#xff1a;图像 > 旋转画布 > 逆时针90度&…

crawler4j_迷你搜索引擎–使用Neo4j,Crawler4j,Graphstream和Encog的基础知识

crawler4j继续执行正在实现搜索引擎的Programming Collection Intelligence &#xff08;PCI&#xff09;的第4章。 我可能比做一次运动所咬的东西要多。 我认为&#xff0c;与其使用本书中所使用的常规关系数据库结构&#xff0c;不如说我一直想看看Neo4J&#xff0c;所以现在…

html图片显示原始大小,我如何使PHP / HTML图像在单击时显示原始大小?

如果您要使用纯JavaScript&#xff0c;则可以设置onclick事件侦听器并获取图像的实际大小(确定图像在浏览器中的原始大小吗&#xff1f;)&#xff0c;然后将此大小设置为image。(如果您希望第二次单击将其设置为旧尺寸&#xff0c;请将旧尺寸保存到全局变量中&#xff0c;然后进…

OWASP依赖性检查Maven插件–必须具备

我不得不非常遗憾地承认&#xff0c;我对OWASP依赖检查maven插件一无所知。 自2013年以来似乎已经存在。显然GitHub上已有千个项目正在使用它。 过去&#xff0c;我手动检查了依赖项&#xff0c;以根据漏洞数据库对其进行检查&#xff0c;或者在很多情况下&#xff0c;我只是完…

html数据填充,JS使用模板快速填充HTML控件数据

图片 图片名称 类型 大小 尺寸 上传日期 操作

html selsec 文字靠右,EDA课程设计

计辅助工具&#xff0c;集成了SOPC和HardCopy设计流程&#xff0c;并且继承了Maxplus II 友好的图形界面及简便的使用方法。Altera Quartus II 作为一种可编程逻辑的设计环境, 由于其强大的设计能力和直观易用的接口&#xff0c;越来越受到数字系统设计者的欢迎。设计原理多功能…

Spring Data Solr教程:将自定义方法添加到单个存储库

我的Spring Data Solr教程的前一部分教我们如何使用查询方法创建静态查询。 自然而然的下一步将是描述如何使用Spring Data Solr创建动态查询。 但是&#xff0c;在继续讨论该主题之前&#xff0c;我们必须了解如何将自定义方法添加到单个存储库。 这篇博客文章将帮助我们了解如…

html用c 绑定sql,HTML、SQL、C++及C综合测试六(含答案).pdf

1、在HTML 文档中,标签的( )属性可以创建跨多个行的单元格 (选择一项)A、COLSPAN B、ROW C、ROWSPAN D、SPAN2、当安装完SQL Server2005数据库时,系统默认当前的超级管理员是( ) (选择一项)A、sa B、master C、administrator D、super3、某C#中的main()方法如下所示,则编译运行…

基于Spring的应用程序-迁移到Junit 5

这是有关将基于Gradle的Spring Boot应用程序从Junit 4迁移到闪亮的新Junit 5的快速文章。Junit 4测试继续与Junit 5 Test Engine抽象一起工作&#xff0c;该抽象为在不同编程模型中编写的测试提供支持。例如&#xff0c;Junit 5支持能够运行JUnit 4测试的Vintage Test Engine。…

查询阜阳2021高考成绩,2021年阜阳高考成绩排名及成绩公布时间什么时候出来

阜阳高考结束后&#xff0c;每年都有很多家长和考试不知道阜阳高考成绩排名如何查询、阜阳高考成绩什么时候公布以及查询方式&#xff0c;本文小编整理了阜阳高考成绩查询排名的相关知识。一、阜阳高考成绩公布时间及查询方式根据往年阜阳高考成绩公布时间预测&#xff0c;2021…