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证书

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

  1. java csr 证书_Java bouncycastle API 创建 CSR 和签发证书

    引入 API org.bouncycastle bcprov-jdk15on 1.64 创建 CSR CSR,即证书请求文件(Certificate Signing Request).生成 X509 ...

  2. Java安全教程–创建SSL连接和证书的分步指南

    在有关应用JEE安全性的系列文章中,我们为您提供了另一个有关如何在Java EE应用程序中创建SSL连接和创建证书的详细教程. 如我们之前的文章中所述, 安全套接字层(SSL)/传输层安全性(TLS) ...

  3. java捕鱼设计_JAVA毕业设计教程:用swing实现捕鱼达人代码教程

    用JAVA SWING实现的捕鱼教程 开发工具:ECLIPSE 实现技术:JAVA SWING 用到的JAR包:xmlpull_1_1_3_4c.jar.dom4j-1.6.1.jar.jl1.0.j ...

  4. 如何创建一个网站?初学者的分步指南

    在2020年,任何人都可以在不了解Web开发,设计或编码的情况下建立和设计网站. 无论您是想为自己还是为企业创建网站,都可以使用正确的工具和资源轻松地做到这一点. 本分步指南将帮助您从头开始创建网站, ...

  5. java 多个ssl证书_java – 将多个SSL证书固定添加到Android KeyStore不起作用. (来自资源文件)...

    感谢@Dan Getz,现在它可以工作了. 解: public static SSLContext getSSLContext() throws Exception { if (sslContext= ...

  6. java批处理 异常处理_Java批处理教程

    java批处理 异常处理 在当今世界,互联网已经改变了我们的生活方式,其主要原因之一是大部分日常琐事都使用互联网. 这导致大量数据可用于处理. 其中涉及大量数据的一些示例是处理工资单,银行对帐单,利息 ...

  7. java泛型方法 通配符_Java泛型教程–示例类,接口,方法,通配符等

    java泛型方法 通配符 泛型是Java编程的核心功能之一,它是Java 5中引入的.如果您使用的是Java Collections ,并且版本5或更高版本,则可以肯定使用了它. 将泛型与集合类一起使 ...

  8. java并发队列_Java并发教程–阻塞队列

    java并发队列 如第3部分所述,Java 1.5中引入的线程池提供了核心支持,该支持很快成为许多Java开发人员的最爱. 在内部,这些实现巧妙地利用了Java 1.5中引入的另一种并发功能-阻塞队列 ...

  9. java 反射基础_Java基础教程:反射基础

    Java基础教程:反射基础 引入反射 反射是什么 能够动态分析类能力的程序称为反射.反射是一种很强大且复杂的机制. Class类 在程序运行期间,Java运行时系统始终为所有对象维护一个被称为运行时的 ...

最新文章

  1. 总是感觉时间不够用?程序员如何管理时间?
  2. jittor和pytorch生成网络对比之bicyclegan
  3. SAP 电商云 Spartacus UI 如何自定义 SeoMetaService
  4. gzip解压str python_有哪些你不知道的Python小工具
  5. Asp.net源码上周更新目录(5.12-5.18)
  6. 2009年4月21日 博客更新公告,敬请关注!
  7. 计算机术语翻译的最烂,我国计算机名词的翻译现状和建议
  8. FlexDisPlayRoom正在发货「可在线玩弄」
  9. 【AD】Altium Designer 原理图的绘制
  10. AlphaBlend 详解
  11. 语音搜索的基础-语音识别
  12. 某图书管理系统的类图
  13. C#动态创建lambda表达式
  14. 9 迭代器与组合模式
  15. 2022新版海螺影视主题模板M3.1全解密版本多功能苹果CMSv10后台自适应主题
  16. android 定时推送提醒,使用workManager实现每日定时推送通知
  17. Linux下无法识别Intel Dual Band Wireless-AC 3165模块
  18. 代理IP的主要用途和使用注意事项
  19. Ceph-rbd排错
  20. Linux下的USB转SATA学习

热门文章

  1. linux下redis的安装和配置
  2. 漫画:什么是布隆算法
  3. Android Bitmap OutOfMemory 解决办法
  4. android roboguice2,Android快速开发框架 roboguice
  5. browserquest php安装,请问一下browserquest-php项目换成GatewayWorker的形式需要怎么部署worker...
  6. python开方运算符_Pytorch Tensor基本数学运算详解
  7. pythondocx模板_使用python-docx-template修改word文档
  8. RabbitMQ--topic
  9. sqlserver 2005 数据库的差异备份与还原
  10. orelse_可选的orElse vs orElseGet