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

java ssl证书

一步步 在有关应用JEE安全性的系列文章中,我们为您提供了另一个有关如何在Java EE应用程序中创建SSL连接和创建证书的详细教程。 如我们之前的文章中所述, 安全套接字层(SSL)/传输层安全性(TLS)将启用客户端和Web服务器之间的安全连接。 客户端将使用HTTPS连接来使用Web资源。 Java提供了各种基于安全性的API,可以帮助与客户端建立安全连接并以加密格式发送/接收消息:

  • Java密码体系结构(JCA)
  • Java密码扩展(JCE)
  • Java安全套接字扩展(JSSE)

为了启用SSL连接,Web服务器需要具有数字证书 ,该数字证书将允许客户端信任Web应用程序的真实性。 想要发送加密消息的应用程序向证书颁发机构(CA)申请数字证书。 CA验证应用程序所有者详细信息和其他标识详细信息,并颁发数字证书。
在公共密钥基础结构(PKI)方案中,数字证书由CA颁发,其中包含专有名称(DN)/所有者名称/主题,用于唯一标识证书的序列号,所有者的公共密钥,颁发日期,有效期,专有名称CA的名称,颁发机构(CA)的数字签名,用于创建签名的签名算法 。 CA颁发的数字证书可以保存在注册表中,以便进行身份验证的用户可以使用所有者的公共密钥。

浏览器如何使用证书识别应用程序或网站的真实性?

所有商业CA与主要的Web浏览器都有关系,因此其根证书被嵌入在其浏览器中。 可以通过证书存储检查浏览器的SSL兼容性,该证书存储提供有关存储在浏览器存储中的CA证书的信息。 另外,CA网站还提供有关浏览器的SSL兼容性的信息。

下图显示了示例网站http://abcgen.uk的证书详细信息。 下面的证书向客户保证所有者的真实性已得到验证,并且数字证书已颁发给ABCGen Idiotechie plc,其通用名称为www.abcgen.uk。

注意:出于安全原因,我们未对实时网站进行任何引用。 本文中使用的示例仅用于说明和学习目的。 此示例显示证书由Verisign颁发为Class 3,这表明Verisign已对所有者进行了独立的验证和确认。 这不是指定的PKI标准。 下一个字段表示此证书的有效性。 指纹表示公钥,但采用编码格式。 使用加密散列函数SHA1和MD5对数据进行散列。

样本证书详细信息

下图显示了证书层次结构。 第一项表示根证书,第二项表示扩展的验证。 证书颁发机构(CA)提供称为扩展验证的更高安全性证书。 所有主要的Web浏览器的密钥库都将包含有关根和扩展验证的信息,这将使它们能够验证特定应用程序的真实性。

证书层次结构

希望大家都明白了。 现在,让我们尝试一些编码。

使用的产品:

  • IDE: Netbeans 7.2
  • Java开发工具包(JDK):版本6
  • Glassfish服务器: 3.1
  • 身份验证机制:基于表单的身份验证
  • 验证服务器: LDAP OpenDS v2.2

目的:

在Web服务器和客户端之间创建SSL连接。

第1步:

在Glassfish服务器中创建服务器证书
在Windows中打开命令提示符->转到{domain_dir} / config目录,其中{domain_dir}表示Glassfish域路径。
例如C:\ NetBeans \ 7.2 \ config \ GF3 \ domain1 \ config>

第2步:

我们将使用keytool命令生成证书。 Keytool是Java SE 6提供的密钥和证书管理实用程序。
运行keytool命令,如下所示:

>keytool -genkey -alias server-alias -keyalg RSA -keypass changeit -storepass changeit -ke
ystore keystore.jks
The command will ask for the following details:
What is your first and last name?
[Unknown]:  localhost  <<For testing purposes we need to use localhost since it maps to the application server hostname. Ideally in production environments this field should include application server’s name.>>
What is the name of your organizational unit?
[Unknown]:  idiotechie
What is the name of your organization?
[Unknown]:  idiotechie
What is the name of your City or Locality?
[Unknown]:  edinburgh
What is the name of your State or Province?
[Unknown]:  EDN
What is the two-letter country code for this unit?
[Unknown]:  GB
Is CN=localhost, OU=idiotechie, O=idiotechie, L=edinburgh, ST=EDN, C=GB correct?
[no]:  YES

第三步:

将生成的证书导出到server.cer文件。

>keytool -export -alias server-alias -storepass changeit -file server.cer -keystore keysto
re.jks
Certificate stored in file <server.cer>

第4步:

将证书添加到信任库文件

>keytool -import -v -trustcacerts -alias server-alias -file server.cer -keystore cacerts.j
ks -keypass changeit -storepass changeit
Owner: CN=localhost, OU=idiotechie, O=idiotechie, L=edinburgh, ST=EDN, C=GB
Issuer: CN=localhost, OU=idiotechie, O=idiotechie, L=edinburgh, ST=EDN, C=GB
Serial number: 519e7165
Valid from: Thu May 23 20:43:33 BST 2013 until: Wed Aug 21 20:43:33 BST 2013
Certificate fingerprints:
MD5:  34:B7:71:CD:C9:56:9A:EA:0C:F2:91:50:EA:7F:4B:64
SHA1: AA:DE:EC:1B:27:8E:BC:3A:7A:82:8C:B7:FA:C3:AA:11:2F:97:1F:2C
Signature algorithm name: SHA1withRSA
Version: 3
Trust this certificate? [no]:  YES
Certificate was added to keystore
[Storing cacerts.jks]

步骤5:

验证证书是否已成功添加到密钥库中。

>keytool -list -v -keystore keystore.jks
Enter keystore password:
Alias name: server-alias
Creation date: 23-May-2013
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=localhost, OU=idiotechie, O=idiotechie, L=edinburgh, ST=EDN, C=GB
Issuer: CN=localhost, OU=idiotechie, O=idiotechie, L=edinburgh, ST=EDN, C=GB
Serial number: 519e7165
Valid from: Thu May 23 20:43:33 BST 2013 until: Wed Aug 21 20:43:33 BST 2013
Certificate fingerprints:
MD5:  34:B7:71:CD:C9:56:9A:EA:0C:F2:91:50:EA:7F:4B:64
SHA1: AA:DE:EC:1B:27:8E:BC:3A:7A:82:8C:B7:FA:C3:AA:11:2F:97:1F:2C
Signature algorithm name: SHA1withRSA
Version: 3

步骤6:

验证证书是否已成功添加到信任存储中。

>keytool -list -keystore cacerts.jks
Enter keystore password:server-alias, 23-May-2013, trustedCertEntry,
Certificate fingerprint (MD5): 34:B7:71:CD:C9:56:9A:EA:0C:F2:91:50:EA:7F:4B:64

因此,现在证书在密钥库和信任库中都可用。 密钥库包含服务器的私钥,而信任库仅包含CA证书或公用密钥。 这是对证书和密钥的更清晰的划分,其中私钥可以保存在密钥库中更安全的环境中,而公钥可以保存在信任库中的更易访问的选项中。
但是,在此示例中,由于我们没有CA证书,因此服务器证书存储在受信任的存储区中。

步骤7:

从服务器配置的角度来看,让我们转到服务器管理控制台。
然后单击配置->服务器配置-> HTTP服务-> http-listeners-2。
Http-Listeners-2表示安全的HTTPS端口8181。 单击SSL选项卡,然后根据我们上面创建的证书将“证书昵称”修改为“服务器别名”。

应用程序服务器SSL设置

步骤8:

重新启动服务器。

至此,所有与服务器相关的配置都已完成。

让我们进入应用程序代码。
我们将使用与http://idiotechie.com/secure-web-application-in-java-ee6-using-ldap/相同的应用程序代码。

唯一需要的更改是在web.xml中 ,其中的传输保证将从无更改为机密。

<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>

当应用程序希望阻止其他实体查看传输内容时,将使用机密保护模式。

生成,部署和运行应用程序。

现在,即使您尝试键入URL http:// localhost:9999 / SampleWebApp / index.jsp ,服务器也会通过https:// localhost:8181 / SampleWebApp / index.jsp将用户重定向到安全的HTTPS连接。 由于服务器生成的证书是自签名证书,而不是来自CA的证书,因此浏览器会发出警告消息,通知该网站的安全证书不可信任。 这是因为浏览器的信任库不包含这些证书。

安全的应用程序

我们可以将证书添加到浏览器的例外列表中,以避免将来出现警告。 现在,让我们尝试从Mozilla Firefox浏览器检查示例应用程序的证书详细信息:

Localhost证书详细信息

希望我的读者能够理解如何创建数字证书和保护Web应用程序。 如果您喜欢本文,请在社交网站上分享,并帮助我们成长。

在下面下载示例代码:


参考: Java安全教程–分步指南 ,可通过Idiotechie博客上的JCG合作伙伴 Mainak Goswami 创建SSL连接和证书 。

翻译自: https://www.javacodegeeks.com/2013/06/java-security-tutorial-step-by-step-guide-to-create-ssl-connection-and-certificates.html

java ssl证书

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

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

相关文章

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…

martin fowler_用Java和Java 8创建内部DSL,采用Martin Fowler的方法

martin fowler目前&#xff0c;我正在阅读Martin Fowler撰写的有关DSL- 特定领域语言的精彩书籍。 围绕DSL的嗡嗡声&#xff0c;围绕轻松支持DSL创建的语言&#xff0c;以及DSL的使用&#xff0c;使我好奇地了解和学习DSL的这一概念。 到目前为止&#xff0c;这本书的使用经验令…

2021高考厦门一中成绩查询,2021年厦门中考成绩和分数线什么时候公布(附查询入口)...

每年中考结束后很多考生和家长都很关心成绩什么时候公布&#xff0c;中考分数线什么时候公布&#xff1f;然而你离彻底解放就只差一步——查分数&#xff01;查分数&#xff0c;比上考场考试还要紧张啊&#xff01;考分不知道&#xff0c;玩耍似心跳。那么2019年厦门中考成绩什…

Java开发人员应该知道的前20个库和API

优秀且经验丰富的Java开发人员的特征之一是对API的广泛了解&#xff0c;包括JDK和第三方库。 我花了很多时间来学习API&#xff0c;尤其是在阅读了Effective Java 3rd Edition之后 &#xff0c;Joshua Bloch建议在Java 3rd Edition中使用现有的API进行开发&#xff0c;而不是为…

计算机桌面文字重影,电脑桌面字有重影怎么办

1.电脑字体重影怎么办可以尝试以下4种方法&#xff1a;1. 右击“我的电脑”&#xff0c;依次单击“属性/高级/性能设置”在“视觉效果”页中将“在桌面上为图标标签使用阴影”选中&#xff0c;单击确定即可。2. 右键桌面空白处右击&#xff0c;在“排列图标”里去掉“锁定桌面的…

打磨锤子计算机专业,钳工磨锤子实训心得体会

钳工磨锤子实训心得体会实训是职业技能实际训练的简称,是指在学校控制状态下,按照人才培养规律与目标,对学生进行职业技术应用能力训练的教学过程。钳工磨锤子实训心得体会&#xff0c;我们来看看。钳工磨锤子实训心得体会1前言&#xff1a;通过这次的钳工实习报告&#xff0c;…