JAVA HTTPS SSL证书生成

本文详细介绍如何在Java环境下生成HTTPS证书,包括Tomcat和JDK的配置步骤。从生成密钥文件、证书文件,到导入密钥库,直至完成服务端与客户端的配置,确保HTTPS连接的安全。

java生成Https证书,及证书导入的步骤和过程

以下是相关的Tomcat,JDK和Windows环境:

Tomcat版本:tomcat-7.0.55

JDK版本: jdk1.6.0

目录所在的位置:

Serve的目录:D:\server\tomcat-7.0.55\

JDK的目录:D:\jdk\jdk1.6.0

1、生成服务器的密匙文件casserver.keystore

1)打开CMD切换到Serve的目录下面D:\Server\tomcat\下

2)执行:keytool -genkey -alias casserver -keypass cas123 -keyalg RSA -keystore casserver.keystore -validity 365

说明:

-alias指定别名为casserver;

-keyalg指定RSA算法;

-keypass指定私钥密码;

-keystore指定密钥文件名称为casserver.keystore;

-validity指定有效期为365天。

另外提示输入密匙库口令应与-keypass指定的cas123相同;您的名字与姓氏fron.com是CAS服务器使用的域名(不能是IP,也不能是localhost),其它项随意填。

注意:

服务器上如果有多个JDK,请确认环境变量中的JDK路径为tomcat所使用的JDK,

如果不在环境变量中,也可切换到指定JDK的bin目录下执行命令;提示的输入keystore密码应与-keypass必须与指定的相同,

否则后面tomcat启动会报IO异常(Cannot recover key)。

命令执行成功后Server目录下多出casserver.keystore文件。

3)可以看到Tomcat 下面生成casserver.keystore

 

2.生成服务端证书casserver.cer

1)根据上面导出的casserver.keystore文件就可以生成casserver.cer文件,只需在原来的Serve的目录下面D:\Server\tomcat\下执行:

keytool -export -alias casserver -storepass cas123 -file casserver.cer -keystore casserver.keystore

说明:

-alias指定别名为casserver;

-storepass指定私钥为liuqizhi;

-file指定导出证书的文件名为casserver.cer;

-keystore指定之前生成的密钥文件的文件名。

注意:-alias和-storepass必须为生成casserver.keystore密钥文件时所指定的别名和密码,否则证书导出失败

2)执行上面命令后发现多了casserver.cer文件

3.导入证书文件到cacerts 密钥库文件

 接下来就是把上面生成的服务器的证书casserver.cer导入到cacerts密钥库文件中(后面的客户端会用到这些)

keytool -import -trustcacerts -alias casserver -storepass cas123 -file casserver.cer –keystore cacerts

 

命令执行成功后Server目录下多出cacerts文件。

4.服务端Tomcat配置

在制作完成密钥文件、证书文件、密钥库文件后即可进行服务端Tomcat的配置。打开$CATALINA_HOME/conf/server.xml

<!--keystoreFile 生成的安全证书的位置--> 

<!--keystorePass设置安全证书的密码-->

<Connector protocol="HTTP/1.1" SSLEnabled="true"

         maxThreads="150" scheme="https" secure="true"

         clientAuth="false"

         sslProtocol="TLS"

         keystoreFile="D:\server\tomcat-7.0.55\casserver.keystore"  

         keystorePass="cas123"   

         port="443"   />

说明:

port一般为8443或443,最常用的是443端口(https默认端口),

这样https方式访问的时候可以不加端口号(如:https://sso.demo.com/cas/login);

keystoreFile为tomcat目录下的密钥文件;

keystorePass为私钥密码;truststoreFile为生成的信任文件,

如果此处不指定则默认为$JAVA_HOME/jre/lib/security/cacerts文件;其它属性默认即可。

5.生成客户端密钥库文件

单向认证的客户端配置只需生成客户端信任文件caserts即可。

首先将服务端生成的证书文件(之前生成的casserver.cer文件)复制到$JAVA_HOME/jre/lib/security下,

然后打开CMD窗口切换到$JAVA_HOME/jre/lib/security下并执行命令:

keytool -import -trustcacerts -alias casclient -storepass changeit -file casserver.cer -keystore cacerts

命令执行成功后JDK目录/jre/lib/security下多出cacerts文件。

6.客户端应用配置

TOMCAT修改
tomcat\conf\ server.xml 修改片断
<!--keystoreFile 生成的安全证书的位置--> 
<!--keystorePass设置安全证书的密码-->
<Connector protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false"
sslProtocol="TLS"   
keystoreFile="D:\server\tomcat-7.0.55\casserver.keystore"  
keystorePass="cas123"   
port="443"/>

7.常见配置错误

1)keytool 生成安全证书不能使用IP地址 一律使用域名
2)务必确认客户端程序使用JDK 路径正确 分清楚JDK、JRE

### 使用Java创建SSL证书文件 为了使用Java创建SSL证书文件,通常涉及几个主要步骤:生成私钥、创建证书请求(CSR)、以及最终签发自签名证书或通过认证机构(CA)颁发正式证书。以下是具体实现方法: #### 准备工作环境 确保安装了最新版本的JDK,并配置好`JAVA_HOME`环境变量以便能够访问命令行工具如`keytool`。 #### 生成密钥库并保存私钥 利用`keytool`命令来建立一个新的密钥库,并在此过程中生成一对公私钥对。此操作会同时创建一个默认有效期为90天的自签名X.509 v3类型的证书条目[^3]。 ```bash keytool -genkeypair -alias myservercert -keyalg RSA -keystore keystore.jks -validity 365 ``` #### 导出自签名证书 如果仅需测试用途,则可以直接导出刚刚生成的那个自签名证书;对于生产环境中则应向受信任CA提交申请材料获取权威认证过的数字证书。 ```bash keytool -exportcert -file server.crt -alias myservercert -keystore keystore.jks ``` #### 查看当前密钥库存储中的内容详情 可以通过下面这条指令查看刚才所建好的密钥库内存储的具体信息,包括但不限于其中含有的所有证书链及其关联属性等。 ```bash keytool -list -v -keystore keystore.jks ``` 上述过程展示了如何借助内置于JDK内的`keytool`实用程序完成整个流程的操作指南。值得注意的是,在实际项目开发当中往往还需要考虑更多细节方面的要求,比如设置更复杂的参数选项或是与其他第三方组件集成等问题[^4]。 ```java import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; import java.io.FileInputStream; import java.security.KeyStore; public class SslServer { public static void main(String[] args) throws Exception { char[] password = "password".toCharArray(); KeyStore ks = KeyStore.getInstance("JKS"); FileInputStream fis = new FileInputStream("path/to/your/keystore.jks"); ks.load(fis, password); KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); kmf.init(ks, password); SSLContext ctx = SSLContext.getInstance("TLS"); ctx.init(kmf.getKeyManagers(), null, null); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值