JSSE定制SSL

JSSE定制SSL
JSSE定制SSL

用JSSE定制SSL连接

JSSE(Java Security Socket Extension,Java安全套接字扩展)是Sun为了解决在Internet上的安全通讯而推出的解决方案。它实现了SSL和TSL(传输层安全)协议。在JSSE中包含了数据加密,服务器验证,消息完整性和客户端验证等技术。通过使用JSSE,开发人员可以在客户机和服务器之间通过TCP/IP协议安全地传输数据。这篇文章主要描述如何使用JSSE接口来控制SSL连接。

首先我通过一个简单的客户机/服务器程序来介绍如何利用JSSE进行编程。当建立客户端时,我们需要配置KeyStore和TrustStore文件,这样在程序中我们才可以从客户端的文件系统中加载它们。然后文章将讨论授权和身份验证方面的问题。通过从KeyStore中选择不同的授权,客户端程序可以连接到不同的服务器。

运行例子程序

下载例子程序

在运行JSSE程序前,你需要正确安装JSSE。如果你安装了J2SE 1.4,JSSE已经被自动安装并配置好了,如果你使用的是其他版本的Java,你需要从官方站点上下载并安装JSSE,安装过程这里就不再赘述。由于JSSE是在J2SE 1.4中才成为标准的,并且J2SE 1.4中的JSSE和以前的JSSE有一些细微的差别,而且文中的例子都是在J2SE 1.4下调试的,因此推荐你使用J2SE 1.4运行这些例子。

在深入介绍JSSE之前,让我们来一个简单的客户机/服务器程序,程序中包含了两个文件:SimpleSSLServer和SimpleSSLClient。在运行程序之前,你需要配置下面这些KeyStore和TrestStore文件:

· 一个客户端的KeyStore文件,该文件中包含了对Alice和Bob的授权。

· 一个服务器端的KeyStore文件,该文件中包含了对server的授权。

· 一个名为clientTrust的客户端TrustStore文件,该文件中包含了对server的授权。

· 一个名为serverTrust的服务器端TrustStore文件,该文件中包含了对Alice和Bob的授权。使用keytool可以帮助你创建这些文件(该工具在Java的bin目录下):

· 一个客户端的KeyStore文件,该文件中包含了对Alice和Bob的授权。

在命令窗口中输入下面的命令:

窗口中会出现下面的提示,根据提示输入相应的信息:

通过相同的方式可以建立对Bob的授权。

注意在名字与姓氏一栏中填写Bob。在完成后可以键入下面的命令来检测是否已经正确完成了授权。

· 一个服务器端的KeyStore文件,该文件中包含了对server的授权。

在命令窗口中键入下面的命令:

注意将密码设为password,名字与姓氏设定为Server。完成授权后同样可以通过上面提到的命令来检测。

· 一个名为clientTrust的客户端TrustStore文件,该文件中包含了对server的授权。以及一个名为serverTrust的服务器端TrustStore文件,该文件中包含了对Alice和Bob的授权。

这样keytool就在当前目录下创建了三个授权文件。然后我们将server.cer文件导入到clientTrust文件中;将alice.cer和bob.cer导入到serverTrust文件中:

到目前为止,在当前目录下包含clientKeys,serverKeys,clientTrust,serverTrust四个文件。完成了KeyStore和TrustStore的设置后就可以运行例子程序了。首先需要运行服务器程序:

在命令行中我们指定了keyStore属性为serverKeys。由于服务器程序需要获得客户端的授权信息,我们指定trustStore为serverTrust。这样SSLSimpleServer就可以验证由SSLSimpleClient提供的授权信息。当服务器程序成功运行后,你会看到下面的提示:

这时候服务器会等待客户端发出建立连接的申请。如果你希望在另一个端口上运行服务器程序,可以在命令中指定-port xxx参数,其中xxx是端口号。

然后在另一个命令窗口中运行客户端程序:

客户端程序会试图向本机的49152端口建立SSL连接。同样你可以通过-port参数指定端口号,也可以通过-host参数指定主机名称。当连接成功后,会出现下面的提示信息:

同时在服务器端会提示用户客户端已经连接成功。

SimpleSSLServer

让我们先来看一下SimpleSSLServer。在main()方法中,程序获得了缺省的SSLServerSocketFactory 对象;然后利用SSLServerSocketFactory创建一个SimpleSSLServer对象,最后调用start()方法启动SimpleSSLServer对象。

由于服务器是在一个单独的线程中运行的,main()方法启动了服务器之后就退出了。start()方法启动了一个新的线程,该线程执行run()方法中的代码。在run()方法中创建了一个SSLServerSocket 对象,然后设定服务器需要进行客户端验证:

调用run()方法后,程序进入了一个死循环,等待客户端的连接申请。循环中的每个Socket对应一个HandshakeCompletedListener对象(该对象是用来显示客户验证信息中的标识名称[distinguished name]的)。Socket的InputStream对象被包装在一个InputDisplayer对象中,这个InputDisplayer对象运行在另外一个线程中,用来将Socket接收到的数据发送到System.out。下面的代码是SimpleSSLServer 中的主循环体:

程序中的SimpleHandshakeListener类实现了HandshakeCompletedListerner接口。在SimpleHandshakeListener类中实现了handshakeCompleted()方法,该方法在SSL握手阶段完成后将被JSSE调用。它将显示出客户端的标识名称:

用红色字体表示的两行代码是这段代码的核心:getPeerCertificates()方法返回一个X509Certificated 对象的数组。这些X509Certificated对象创建了客户端的身份标识。在数组中的第一个元素是客户端的验证信息,而最后一个通常是CA验证。当我们有了客户端的验证信息后。我们可以得到其中的标识名称,并将它传送到System.out。

SimpleSSLClient

SimpleSSLClient类比较简单,但是在后面的一些比较复杂的例子中的类会继承该类。在getSLLSocketFactory()方法中,程序返回缺省的工厂类:

在runClient()方法中,程序处理了输入参数后,获得SSLSockFactory对象,调用connect()方法连接到服务器程序。在connect()方法中,程序首先创建一个SSLSocket对象,然后调用SSLSocket对象的startHandshang()方法启动和服务器端的握手过程。当握手过程完成后,会触发一个HandshakeCompletedEvent事件。在服务器端的HandshakeCompletedListener对象会处理这个事件。事实上,JSSE可以自动启动握手过程,但是必须是在第一次有数据通过Socket传输的情况下。由于在例子程序中,直到用户在键盘上输入信息后才会有数据通过Socket传输,而我们希望服务器端及时报告连接情况,因此我们用startShake()方法来手工激活握手过程。

SimpleSSLClient类中的transmit()方法也很简单。首先程序将输入流包装到一个Reader对象中,然后将输出流包装到一个Writer对象中;最后将数据流输出到Socket:

定制KeyStore和TrustStore

还记得我们是如何运行客户端的吗?我们需要在命令行中指定keyStore, keyStorePasword, trustStore和trustStorePassword参数,以至于整个命令显得过于冗长。事实上你可以在程序中指定KeyStore和TrustStore,后面的例子中将告诉你如何实现这一点。同时在例子中还会演示如何配置多个SSLSocketFactory对象,其中每个SSLSocketFactory对象对应不同的KeyStore和TrustStore设置。如果没有这种技术,在同一个虚拟机上的所有安全连接都只能使用同一个KeyStore和TrustStore。对于比较小的应用程序,这也许不会产生问题;但是对于那些比较大的应用程序来说,这绝对是一个严重的缺陷。

在下面的例子中,我们将使用CustomTrustStoreClient来动态定义KeyStore和TrustStore。首先让我们先运行一下CustomTrustStoreClient:

为什么运行CustomTrustStoreClient时不需要指定KeyStore和TrustStore参数呢?这是应为在CustomTrustStoreClient的代码中指定了KeyStore(ClientKeys)和TrustStore(ClientTruts)以及它们的密钥(password)。如果你想使用其他的KeyStore、TrustStore或密钥,可以使用-ks、-kspass、-ts 和-tspass参数来指定。下面让我们来看一下CustomTrustStoreClient的getSSLSocketFactory()方法。该方法通过调用getTrustManager()方法获得一个TurstManager对象数组,通过调用getKeyManagers

()方法获得一个KeyManager对象数组。然后利用得到的TurstManager和KeyManager对象数组构造一个SSLContext对象,最后通过SSLContext对象的getSocketFactory()方法来配置JSSE。需要注意的是在调用SSLContext类的init()方法时使用的参数。第一个参数是KeyManager对象数组。第二个参数和第一个参数类似,是TrustManager数组。如果前两个参数被设定为null,程序将使用缺省的KeyManager 和TrustStore(缺省的KeyStore来源于系统属性中的https://www.360docs.net/doc/269855335.html,.ssl.keyStore和

https://www.360docs.net/doc/269855335.html,.ssl.keyStorePassword属性;缺省的TrustStore来源于系统属性中的https://www.360docs.net/doc/269855335.html,.ssl.trustStore和https://www.360docs.net/doc/269855335.html,.ssl.trustStorePassword属性)。通过设定第三个参数可以指定JSSE中的随机数产生器(Random Number Generate, RNG)。由于在SSL中随机数的产生是一个很敏感的问题,错误使用这个参数会导致安全连接变得不安全,因此我在例子中使用了null。这样程序将使用缺省的并且是安全的SecureRandom对象。

下面让我们看一看CustomKeyStoreClient类中的getKeyMangers()方法是如何初始化KeyManagers对象数组的:

首先的任务是获得一个KeyManagerFactory对象,但是你必须知道应该使用哪种算法。JSSE中提供了一个缺省的KeyManagerFactory算法(程序员也可以通过指定ssl.KeyManagerFacotory.algorithm属性指定缺省算法)。获得KeyManagerFactory对象后就可以加载KeyStore文件了,程序中通过一个InputStream对象将信息从文件送入KeyStore对象中。在这个过程之前,KeyStore对象需要知道输入流的格式(例子中我使用的是jks)和密钥。当我们完成了KeyStore的加载后,我们就可以用它来初始化KeyManagerFactory对象了。通常在JSSE中,在KeyStore中的所有证书使用和KeyStore相同的密码,但是通过创建KeyManagerFactory对象你可以突破这个限制。在初始化了KeyManagerFactory对象后,通常使用getKeyManager()方法来获得KeyManager对象数组。程序员通过使用和getKeyMangers()方法类似的流程来初始化TrustManager数组,这里我就不再重复了。

实现一个KeyManager类

到目前为止,我们已经知道如何在程序中动态生成KeyStore和TrustStore了。最后一个例子将告诉你如何实现一个KeyManager类。

当运行前几个例子的时候,不知道大家是否注意到服务器端显示的授权的标识名称。在前面我们授权给了两个人:Alice和Bob,在运行程序时JSSE会从中任选一个。在我的计算机上JSSE选择的总是Bob,或许在你的计算机上情况会有所不同。下面让我们来看一看最后一个例子程序:SelectAliasClient。这个例子使你能够在运行客户端时使用指定的授权。例如你需要指定使用Alice的授权,由于Alice的别名是alice,你需要在命令窗口中键入下面的命令:

当客户端和服务器端成功连接后,客户器端会出现下面的信息:

为了使程序使用指定的授权,我们需要实现X509KeyManager接口(X509KeyManager是JSSE中最常用的KeyManager)。X509KeyManager接口在SSL握手阶段使用了几个方法来获得授权。下面是

X509KeyManager接口获得授权的过程:

1.JSSE调用chooseClientAlias()方法获得指定的授权。

2.chooseClientAlias()方法调用X509KeyManager接口的getClientAlaises()方法获得SSLSocket 对象使用的所有授权的别名,然后检查指定的授权别名是否有效。

3.JSSE将别名作为参数调用X509KeyManager接口的getCertificateChain()和getPrivateKey()方法,这样就获得了指定授权的相关信息。

在例子程序中,X509KeyManager接口的实现类是AliasForcingKeyManager。在该类中最重要的方法就是就是chooseClientAlias()方法。下面是该方法的源代码:

我们可以看到在程序中,chooserClientAlias()方法实际上多次调用了getClientAliases()方法,每次都针对不同的授权类型。AliasForingKeyManager还实现了X509KeyManager接口的其他五个方法,在这里就不再一一赘述了。

然后我们就可以在程序中用AliasForingKeyManager对象来替代KeyManager对象了。在getSSLSocketFactory()方法中,我们只需要将通过调用getKeyManagers()方法获得KeyManager 对象数组,然后将其强制转化为AliasForcingKeyManager对象就可以了。下面是新的getSSLSocketFactory ()方法的代码:

我们可以使用同样的方法来替换TrustManager对象,这样我们就可以控制JSSE验证授权的机制。具体的实现就留给读者朋友去解决了。

小结

在这篇文章中,我们讲述了使用JSSE的一些小技巧。读完这篇文章后,我相信大家因该知道如何通过编程实现下面的任务:

· 使用HandshagCompletedListerner对象来获得关于连接的信息。

· 从SSLContext对象中获得一个SLLSocketFactory对象。

· 使用动态的TrustStroe或KeyStore。

· 突破在JSSE中KeySotre的密钥的每个授权的密钥必须相同的限制。

· 通过实现自己的KeyManager类来指定JSSE使用的授权。

如果大家有兴趣的话,还可以进一步将这些技术进行扩展。例如你可以在JSSE的其他类中使用

X509KeyManager接口,也可以在TrustStore和KeyStore的实现类中从数据库中读取授权信息。但是在使用自己编写的TrustStore,KeyStore,TrustManager和KeyManager的时候,需要非常小心,因为任何一个细微的错误都可能导致SSL连接不再是安全的了。

Generating the Keystore and tructstore

For SSL to work you need to create a public/private key pair, which will be stored in a keystore. Generate this using the genkey command that comes with the JDK.

SSL证书验证过程解读

SSL证书验证过程解读及申请使用注意事项 SSL证书和我们日常用的身份证类似,是一个支持HTTPS网站的身份证明,由受信任的数字证书颁发机构CA(如沃通CA)验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。SSL证书里面包含了网站的域名,证书有效期,证书的颁发机构以及用于加密传输密码的公钥等信息,由于公钥加密的密码只能被在申请证书时生成的私钥解密,因此浏览器在生成密码之前需要先核对当前访问的域名与证书上绑定的域名是否一致,同时还要对证书的颁发机构进行验证,如果验证失败浏览器会给出证书错误的提示。 本文将对SSL证书的验证过程以及个人用户在访问HTTPS网站时,对SSL证书的使用需要注意哪些安全方面的问题进行描述。 一、数字证书的类型 实际上,我们使用的数字证书分很多种类型,SSL证书只是其中的一种。证书的格式是由X.509标准定义。SSL证书负责传输公钥,是一种PKI(Public Key Infrastructure,公钥基础结构)证书。 我们常见的数字证书根据用途不同大致有以下几种: 1、SSL证书:用于加密HTTP协议,也就是HTTPS。 2、代码签名证书:用于签名二进制文件,比如Windows内核驱动,Firefox插件,Java 代码签名等等。 3、客户端证书:用于加密邮件。 4、双因素证书,网银专业版使用的USB Key里面用的就是这种类型的证书。 这些证书都是由受认证的证书颁发机构CA(Certificate Authority)来颁发,针对企业与个人的不同,可申请的证书的类型也不同,价格也不同。CA机构颁发的证书都是受信任的证书,对于SSL证书来说,如果访问的网站与证书绑定的网站一致就可以通过浏览器的验证而不会提示错误。 二、SSL证书申请与规则 SSL证书可以向CA机构通过付费的方式申请,也有CA机构提供免费SSL证书如沃通CA。 CA机构颁发的证书有效期一般只有一年到三年不等,过期之后还要再次申请,在ssl 证书应用中企业网站应用较多。但是随着个人网站的增多,以及免费SSL证书的推出,个人网站ssl证书应用数量也在飞速增加。在百度开放收录https网站后,预计https网站将迎来井喷。 在申请SSL证书时需要向CA机构提供网站域名,营业执照,以及申请人的身份信息等。网站的域名非常重要,申请人必须证明自己对域名有所有权。此外,一个证书一般只绑定一个域名,比如你要申请域名时绑定的域名是https://www.360docs.net/doc/269855335.html,,那么只有在浏览器地址是

如何通过SSL证书开启服务器443端口

如何通过SSL证书开启服务器443端口 前阵子遇到个问题,因为我们的网站是外贸网站,需要通过Paypal付款,但是,客户通过PP付款之后居然不能生成订单号,后来发现服务器的443端口是关闭状态,好了,问题来了:如何开启服务器的443端口呢? 深圳国际快递https://www.360docs.net/doc/269855335.html,在这里分享一下开启443端口的经验: 第一:当然是配置硬件,把防火墙令443端口放行!具体办法朋友可以去百度一下哈,其实落伍里面也有! 第二,创建SSL证书,我个人觉得这个比较重要,下面把具体的方法分享给一下。 #LoadModule ssl_module modules/mod_ssl.so 的#去掉,开启SSL功能。 然后我们要新建一个SSL虚拟目录,监听443端口 一般情况下我使用centos的虚拟列表都会放到/etc/httpd/conf.d/目录下 依旧是在这个目录下新建一个ssl.conf,并且在你的网站列表新建一个ssl文件夹,我的习惯是/var/www/vhosts/ssl 将你的server.crt和ca-server.crt文件以及你原来生成的server.key文件一起上传到ssl文件夹内。 进入/etc/httpd/conf.d/ 输入 vi ssl.conf 使用vi编辑器编辑ssl.conf内容如下 DocumentRoot "/var/www/vhosts/site_dir/httpdocs" SSLEngine on SSLProtocol all -SSLv2 SSLCertificateFile /var/www/vhosts/ssl/server.crt SSLCertificateKeyFile /var/www/vhosts/ssl/server.key SSLCACertificateFile /var/www/vhosts/ssl/ca-server.crt SetEnvIf User-Agent ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 然后将你的域名强制https进行访问 将 RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} 当然,这个证书是在自己服务器上创建的,自己使用还是可以的,但是在浏览器中,这

Linux下利用openssl 生成SSL证书步骤

Linux下利用openssl 生成SSL证书步骤 1、概念 首先要有一个CA根证书,然后用CA根证书来签发用户证书。 用户进行证书申请:一般先生成一个私钥,然后用私钥生成证书请求(证书请求里应含有公钥信息),再利用证书服务器的CA根证书来签发证书。 2、后缀详解 .key格式:私有的密钥 .csr格式:证书签名请求(证书请求文件),含有公钥信息,certificate signing request 的缩写 .crt格式:证书文件,certificate的缩写 .crl格式:证书吊销列表,Certificate Revocation List的缩写 .pem格式:用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式 3、添加 index.txt 和 serial 文件 cd /etc/pki/CA/ touch /etc/pki/CA/index.txt touch /etc/pki/CA/serial echo 01 > /etc/pki/CA/serial 4、CA根证书的生成 4.1 生成CA私钥(.key) openssl genrsa -out ca.key 2048 [root@CA]# openssl genrsa -out ca.key 2048 Generating RSA private key, 2048 bit long modulus .............+++ .....+++ e is 65537 (0x10001) 4.2 生成CA证书请求(.csr) openssl req -new -key ca.key -out ca.csr [root@CA]# openssl req -new -key ca.key -out ca.csr You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value,

SSL证书配置

1.确定配置好java的环境变量 2.生成密钥库 新建一个密钥临时目录/home/genkey,并cd到/home/genkey 参数alias的为密钥标识第2、3、4步的命令中的alias必须完全一致 输入以下命令: keytool -genkey -alias tomcat -keyalg RSA -keysize 1024 -validity 3650 -keypass changeit -storepass changeit -keystore server.keystore -validity 3600 按照提示输入信息,第一个名字与姓氏必须为localhost,其他可以随意填写。 执行成功后/home/genkey下生成了一个server.keystore文件。 Tomcat: 3.导出证书 keytool -export -trustcacerts -alias tomcat -file server.cer -keystore server.keystore -storepass changeit 执行成功后/home/genkey下生成了一个server.cer文件。

4.导入到java信任库中 keytool -import -trustcacerts -alias tomcat -file server.cer -keystore /opt/Java/jdk1.6.0_35/jre/lib/security/cacerts -storepass changeit /opt/Java/jdk1.6.0_35修改为服务器java安装目录再执行 5.修改tomcat配置 打开tomcat目录下conf/server.xml,修改keystoreFile及keystorePass WAS: 6.进入was控制台界面

SSL证书工具使用说明

天威诚信SSL证书工具使用说明 天威诚信SSL证书工具专业版,集CSR生成、CSR校验、证书格式转换和证书配置检测于一体,在客户端上即可完成CSR 在线自动生成并能快速校验CSR信息,实现不同证书间的格式互转,快速有效的检测出证书的安装状态,操作简单,易于上手,是SSL证书安装使用过程中不可或缺的得力干将。 一,CSR生成 按照工具提示的信息填写您申请证书的真实信息,点击生成CSR文件。下图为填写示例:

*注:目前主流密钥算法为RSA,长度为2048位,签名算法为SHA256。 通过点击保存私钥文件和CSR文件,保存文件到本地。私钥文件您需要在本地备份并妥善保管,CSR申请文件需要提交给商务人员。 二,CSR校验 字符串校验:您可以打开制作的CSR文件,并把字符串复制到空白框中并点击“验证CSR 文件”。

文件校验:通过添加本地CSR文件并进行验证。 二,证书格式转换 1,PEM转JKS 1,首先准备好server.pem证书文件和server.key私钥文件。 2,将证书签发邮件中的包含服务器证书代码的文本复制出来(包括“-----BEGIN CERTIFICATE-----”和“-----END CERTIFICATE-----”)粘贴到记事本等文本编辑器中。在服务器证书代码文本结尾,回车换行不留空行,并粘贴中级CA证书代码(包括“-----BEGIN CERTIFICATE-----”和“-----END CERTIFICATE-----”,每串证书代码之间均需要使用回车换行不留空行),修改文件扩展名,保存包含多段证书代码的文本文件为server.pem文件。 3,在源证书文件中录入server.pem,源私钥文件中录入server.key文件。(如果您的.key 私钥文件没有设置密码,源私钥密码处可以为空) 4,在“目标证书别名”选择中这是JKS文件密钥别名,并在“目标证书密码”中设置JKS 文件密码。

制作和使用SSL证书

制作和使用SSL证书 在Linux环境下,一般都安装有OPENSSL。下面的内容就是用OPENSSL快速制作root 证书以及客户端证书的步骤和方法。 1、初始准备工作 1)创建一个我们制作证书的工作目录 # mkdir CA # cd CA # mkdir newcerts private 2)制作一个我们创建证书时需要的配置文件,内容可以参考见 # cd CA # vi 3)创建我们自己的证书库的索引 # echo '01' >serial # touch 2、制作一个root证书 执行下面的命令 # openssl req -new -x509 -extensions v3_ca -keyout private/ \ -out -days 3650 -config ./ 在屏幕上会出现如下的交互内容,按照提示相应的信息。注意,一定要记住PEM,这个在以后生成客户端证书时都需要。 Using configuration from ./ Generating a 1024 bit RSA private key .......++++++ ..........................++++++ writing new private key to 'private/' Enter PEM pass phrase:demo Verifying password - Enter PEM pass phrase:demo ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value,

SSL双向认证证书制作过程流程

SSL双向认证证书制作流程 ——含单向SSL 一、证书制作: 1、生成服务器密钥(库): keytool -genkey -alias server -keyalg RSA -keysize 2048 -validity 3650 -dname "CN=localhost,OU=DTY,O=BMC,L=Beijing,ST=Beijing,C=CN" -keypass 123456 -keystore server.jks -storepass 123456 CN:要签名的[域名]或[IP](说明:此处为要配置SSL服务器IP 或域名) OU:组织单位名称,如:[公司注册简称] O:组织名称,如:[公司英文全称] L:城市或地区名称,如:[Beijing] ST:州或省份名称,如:[Beijing] C:单位的两字母国家代码,如:[CN] 2、验证生成的服务器密钥(库): keytool -list -v -keystore server.jks -storepass 123456

3、为步骤1生成的服务器密钥(库)创建自签名的证书: keytool -selfcert -alias server -keystore server.jks -storepass 123456 4、验证生成的服务器密钥(库): keytool -list -v -keystore server.jks -storepass 123456

5、导出自签名证书: keytool -export -alias server -keystore server.jks -file server.cer -storepass 123456 说明:此证书为后续要导入到浏览器中的受信任的根证书颁发机构。 6、生成客户端密钥(库): 说明:keytool –genkey命令默认生成的是keystore文件,但为了能顺利导入到IE或其他浏览器中,文件格式应为PKCS12。 稍后,此P12文件将导入到IE或其他浏览器中。 keytool -genkey -alias client -keyalg RSA -keysize 2048 -validity 3650 -dname

Apache安装配置SSL证书方法教程

Apache SSL证书安装配置方法教程 1.1 SSl证书安装环境简介 Centos 6.4 操作系统; Apache2.2.*或以上版本; Openssl 1.0.1+; SSL 证书一张(备注:本指南使用https://www.360docs.net/doc/269855335.html, 域名OV SSL 证书进行操作,通用其它版本证书) 1.2 网络环境要求 请确保站点是一个合法的外网可以访问的域名地址,可以正常通过或http://XXX 进行正常访问。 2.1 生成请求文件csr 首先下载openssl软件,可以去openssl官网下载: https://www.360docs.net/doc/269855335.html,/source/ 下载后安装到本地计算机。 2.1.1 查看openssl 在终端输入openssl version 查看openssl当前版本。 图 1 2.1.2 生成key私钥文件 使用以下命令来生成私钥:opensslgenrsa -des3 -out https://www.360docs.net/doc/269855335.html,.key 2048,生成的私钥保存在当期目录。

图 2 2.1.3 生成csr文件 使用以下命令来生成私钥:opensslreq -new -key https://www.360docs.net/doc/269855335.html,.key -out https://www.360docs.net/doc/269855335.html,.csr 图 3 Country Name (2 letter code) [GB]: 输入国家地区代码,如中国的CN State or Province Name (full name) [Berkshire]: 地区省份 Locality Name (eg, city) [Newbury]: 城市名称 Organization Name (eg, company) [My Company Ltd]: 公司名称 Organizational Unit Name (eg, section) []: 部门名称

SSL证书验证过程

SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。SSL证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道(Secure socket layer(SSL)安全协议是由Netscape Communication公司设计开发。该安全协议主要用来提供对用户和服务器的认证;对传送的数据进行加密和隐藏;确保数据在传送中不被改变,即数据的完整性,现已成为该领域中全球化的标准。由于SSL技术已建立到所有主要的浏览器和WEB服务器程序中,因此,仅需安装服务器证书就可以激活该功能了)。即通过它可以激活SSL协议,实现数据信息在客户端和服务器之间的加密传输,可以防止数据信息的泄露。保证了双方传递信息的安全性,而且用户可以通过服务器证书验证他所访问的网站是否是真实可靠。 SSL证书安全认证的原理: 安全套接字层(SSL) 技术通过加密信息和提供鉴权,保护您的网站安全。一份SSL 证书包括一个公共密钥和一个私用密钥。公共密钥用于加密信息,私用密钥用于解译加密的信息。浏览器指向一个安全域时,SSL 同步确认服务器和客户端,并创建一种加密方式和一个唯一的会话密钥。它们可以启动一个保证消息的隐私性和完整性的安全会话。 SSL证书的功能: a 确认网站真实性(网站身份认证):用户需要登录正确的网站进行在线购物或其它交易活动,但由于互联网的广泛性和开放性,使得互联网上存在着许多假冒、钓鱼网站,用户如何来判断网站的真实性,如何信任自己正在访问的网站,可信网站将帮你确认网站的身份。 b 保证信息传输的机密性:用户在登录网站在线购物或进行各种交易时,需要多次向服务器端传送信息,而这些信息很多是用户的隐私和机密信息,直接涉及经济利益或私密,如何来确保这些信息的安全呢?可信网站将帮您建立一条安全的信息传输加密通道。 其实现原理图如下图1所示: SSL证书的原理在SSL会话产生时,服务器会传送它的证书,用户端浏览器会自动的分析服务器证书,并根据不同版本的浏览器,从而产生40位或128位的会话密钥,用于对交易的信息进行加密。所有的过程都会自动完成,对用户是透明的,因而,服务器证书可分为两种:最低40位和最低128位(这里指的是SSL会话时生成加密密钥的长度,密钥越长越不容易破解)证书。 最低40位的服务器证书在建立会话时,根据浏览器版本不同,可产生40位或128位的SSL会话密钥用来建立用户浏览器与服务器之间的安全通道。而最低128位的服务器证书不受浏览器版本的限制可以产生128位以上的会话密钥,实现高级别的加密强度,无论是IE或Netscape浏览器,即使使用强行攻击的办法破译密码,也需要10年。

常见SSL证书问题集锦

常见SSL证书问题集锦 1. 如何实现用户用访问http时自动跳转到https的访问地址? 实现网页的自动跳转有两种方式: A 增加重定向到https B 在页面中加入自动跳转代码。例如:<—< meta http-equiv=”Refresh” content=”秒数; url=跳转的文件或地址”>—> 2. 同一张服务器证书是否可以配置在多台服务器上? 不可以。Verisign的签署协议中禁止客户在多台服务器上配置同一张证书。 3. 多台服务器多个域名,该如何选购SSL证书? 一般来讲,一个网站(一个域名)对应一个SSL证书,因为SSL证书是绑定域名的。只有通配型证书和多域型证书才支持多个域名。通配型证书适合于同一台物理服务器下的同一域名下的多个子域,如您在同一台物理服务器上有多个网站: https://www.360docs.net/doc/269855335.html, https://www.360docs.net/doc/269855335.html, https://www.360docs.net/doc/269855335.html, https://www.360docs.net/doc/269855335.html, 申请通配型SSL证书时填写的通用名称(Common Name)为: *https://www.360docs.net/doc/269855335.html, 。 与通配型证书只支持子域不同的是,多域型SSL证书支持任何域名,不仅限于子域,如:https://www.360docs.net/doc/269855335.html,、https://www.360docs.net/doc/269855335.html,、 https://www.360docs.net/doc/269855335.html,、https://www.360docs.net/doc/269855335.html,、https://www.360docs.net/doc/269855335.html,、https://www.360docs.net/doc/269855335.html,、https://www.360docs.net/doc/269855335.html,、 https://www.360docs.net/doc/269855335.html,等等。不仅适合于有多个域名需要部署SSL证书的单位,更适合于虚拟主机服务提供商为不同单位的不同域名的网站部署SSL证书。 请注意:以上两种证书都使用于同一台物理服务器,如果您有多台物理服务器在使用同一个域名(负载均衡方式),则您需要为多台服务器购买多服务器许可证即可。 4. 部分客户端访问IIS服务器时,证书链中的中级证书过期怎么办?

JDK自带工具keytool生成ssl证书

JDK自带工具keytool生成ssl证书 前言: 因为公司项目客户要求使用HTTPS的方式来保证数据的安全,所以木有办法研究了下怎么生成ssl证书来使用https以保证数据安全。 百度了不少资料,看到JAVA的JDK自带生成SSL证书的工具:keytool,外加看了同事的心得体会,自己总结了一下具体的使用方法和使用过程中发现的问题及解决办法。 1:什么是HTTPS? HTTPS其实是有两部分组成:HTTP + SSL / TLS, 也就是在HTTP上又加了一层处理加密信息的模块,并且会进行身份的验证。 问题: Firebug和postman之类的浏览器调试工具,为什么获取到的是明文? 解答: SSL是对传输的数据进行加密,针对的是传输过程的安全。 firebug之类的浏览器调试工具, 因为他们得到的是客户端加密之前/解密之后的数据,因此是明文的。 2:什么是自签名证书? 就是自己生成的证书,并不是官方生成的证书。 除非是很正式的项目,否则使用自己签发的证书即可,因为官方生成证书是要花钱滴。 3:进入正题,使用JDK自带工具KeyTool 生成自签发证书!第一步:为服务器生成证书 打开CMD命令行工具,cd到C盘根目录或者是jdk的bin目录下,如下图所示:

附录1:常用keytool命令

使用keytool命令生成证书: keytool -genkey -alias tomcat(别名) -keypass 123456(别名密码) -keyalg RSA(算法) -keysize 1024(密钥长度) -validity 365(有效期,天单位) -keystore D:/keys/tomcat.keystore(指定生成证书的位置和证书名称) -storepass 123456(获取keystore信息的密码) 方便复制版: keytool -genkey -alias tomcat -keypass 123456 -keyalg RSA -keysize 1024 -validity 365-keystore D:/keys/tomcat.keystore -storepass 123456 图例: 回车执行后如下图: 点击回车即可在D:/keys/文件夹内生成名为:tomcat.keystore的文件。 成功后无提示信息 注意: ①D:/keys/ 目录需要提前手动创建好,否则会生成失败 ②提示输入域名的时候不能输入IP地址 问题①的错误信息如下:

JDK自带工具keytool生成ssl证书

J D K自带工具 k e y t o o l生成s s l证 书 -CAL-FENGHAI.-(YICAI)-Company One1

JDK自带工具keytool生成ssl证书 前言: 因为公司项目客户要求使用HTTPS的方式来保证数据的安全,所以木有办法研究了下怎么生成ssl证书来使用https以保证数据安全。 百度了不少资料,看到JAVA的JDK自带生成SSL证书的工具:keytool,外加看了同事的心得体会,自己总结了一下具体的使用方法和使用过程中发现的问题及解决办法。 1:什么是HTTPS HTTPS其实是有两部分组成:HTTP + SSL / TLS, 也就是在HTTP上又加了一层处理加密信息的模块,并且会进行身份的验证。问题: Firebug和postman之类的浏览器调试工具,为什么获取到的是明文 解答: SSL是对传输的数据进行加密,针对的是传输过程的安全。 firebug之类的浏览器调试工具, 因为他们得到的是客户端加密之前/解密之后的数据,因此是明文的。2:什么是自签名证书 就是自己生成的证书,并不是官方生成的证书。 除非是很正式的项目,否则使用自己签发的证书即可,因为官方生成证书是要花钱滴。 3:进入正题,使用JDK自带工具KeyTool 生成自签发证书!第一步:为服务器生成证书 打开CMD命令行工具,cd到C盘根目录或者是jdk的bin目录下,如下图所示:

附录1:常用keytool命令

使用keytool命令生成证书: keytool -genkey -alias tomcat(别名) -keypass 123456(别名密码) -keyalg RSA(算法) -keysize 1024(密钥长度) -validity 365(有效期,天单位) -keystore D:/keys/(指定生成证书的位置和证书名称) -storepass 123456(获取keystore信息的密码) 方便复制版: keytool -genkey -alias tomcat -keypass 123456 -keyalg RSA -keysize 1024 -validity 365 -keystore D:/keys/ -storepass 123456 图例: 回车执行后如下图: 点击回车即可在D:/keys/文件夹内生成名为:的文件。 成功后无提示信息 注意: ①D:/keys/ 目录需要提前手动创建好,否则会生成失败 ②提示输入域名的时候不能输入IP地址 问题①的错误信息如下:

SSL证书安装文档

证书的申请及操作说明书 2013.02.21

一说明 证书购买原因:因为项目需求,要用到SSL证书,所以需要买SSL证书,我们是从北京埃欧信科技有限公司代买的证书。 购买方式:我们是按域名购买的证书,也就是说,证书是绑定域名的。当然也可以按照企业去购买。 需要文件:主要是我们需要先在本地用JAV A的keytool命令生成keystores文件,即后缀为kdb的文件,和csr文件。也就是密钥文件和证书文件,这个密钥文件很重要,它里面有申请证书的信息,譬如需要授权的域名,组织机构信息等。Csr文件更为重要,本人就是在这里吃了大亏,绕了很多弯路,后来发现kdb文件和csr文件不匹配,最后从新提交申请,从新授权了一下才可以的。所以再做keytool命令时候,应该格外仔细和认真。 操作说明:本人申请的是window服务器weblogic容器的SSL证书linux的就不清楚了,因为项目中是windows服务器。我要购买的域名为https://www.360docs.net/doc/269855335.html,(仅供参考)。 第一步骤: 首先在一台安装有sun JDK的机器上进行如下操作: 1.点【开始】在【运行】中输入cmd进入DOS窗口,进入到jdk的bin目录下 如图 2.然后输入如下命令 (1)keytool-genkey-alias tomcat-keyalg rsa-keystore d:\mydomain.kdb-keysize2048如图: 提示输入密码,(这个密码很重要,要记好这个密码,之后还要用)。 本人输入的密码是:changeit 然后会出现如图所示界面 如图:

说明:首先本人是按照域名购买SSL证书的对吧,那么这里最关键的就是您的名字与姓氏是什么?因为美国的证书机构会根据这个的名字确定域名,您明白吗?就是说这里填的应该是要被授权的域名。 其次,组织单位名称,组织名称,这个就随便啦,简单填写一下,这个不会出现在授权的证书显示的页面上,所以简单些一下就OK,但是建议是英文或者汉语拼音。 之后,城市或区域名称?州或省份名称?这个也不是很重要,但是建议填写城市的英文名称或者中文名字的汉语拼音。 最后,该单位的两字母国家代码?这个因为咱们都是中国人嘛所以填写CN注意CN 要大写哦! 最后问是否确认?输入y按回车即可! (2)在操作完上述操作后,会出现如图所示界面: 如图: 这里是问tomcat的主密码:这个密码也要记住,因为之后配置容器的时候要用到该密码。 我填写的是changeit建议和上面的密码相同。 在操作完上述步骤后,可以到D盘下看看是否生成了我们的密钥文件。 (3)继续,输入如下命令,生成咱们的csr文件吧 keytool-certreq-alias tomcat-keystore d:\mydomain.kdb-file d:\mydomain.csr

SSL证书请求文件(CSR)生成方法Apache

文档出处:https://www.360docs.net/doc/269855335.html,/ 提供者QQ:2209630389 重要注意事项 An Important Note Before You Start 在生成CSR文件时同时生成您的私钥,如果您丢了私钥或忘了私钥密码,则颁发证书给您后不能安装成功!您必须重新生成私钥和CSR文件,免费重新颁发新的证书。为了避免此情况的发生,请在生成CSR后一定要备份私钥文件和记住私钥密码,最好是在收到证书之前不要再动服务器。 By far the most common problem users have when going through this process is related to private keys. If you lose or cannot access a private key, you cannot use the certificate we issue to you and will need to request a free reissue. To ensure this never happens, we advise that a backup of the private key file is made and that a note is made of the password that is used to protect the export of the private key. “openssl”用于生成私钥和CSR,OpenSSL一般安装在/user/bin下,如果您的系统安装在其他目录,请指定正确的目录路径。 The utility "openssl" that you use to generate the private key and CSR comes with the OpenSSL toolkit and is usually installed under /usr/bin. If you have installed it elsewhere you will need to modify these instructions appropriately. 以下所有命令假设您已经成功安装OpenSSL,将产生2048位的密钥,加密算法 采用3DES,您必须使用您要申请SSL证书的域名来命名密钥文件。 The following sequence of commands will generate a 2048 bit key, encrypt it using the triple-DES cipher, and create a CSR based upon it (they assume that you have openssl in your path - if not then you should prefix the openssl command with the path to the binary). You should use the domain name that you are wishing to have certified as the core of the filenames. You should also make sure you do not overwrite existing keys and CSR's: 1. 生成私钥 Generate the private key 请使用以下命令来生成私钥 Please type the following command at the prompt: openssl genrsa -des3 -out https://www.360docs.net/doc/269855335.html,.key 2048

openssl生成ssl证书

x509证书链 x509证书一般会用到三类文件,key,csr,crt。 Key 是私用密钥,openssl格式,通常是rsa算法。 csr是证书请求文件,用于申请证书。在制作csr文件的时候,必须使用自己的私钥来签署申请,还可以设定一个密钥。 crt是CA认证后的证书文件(windows下面的csr,其实是crt),签署人用自己的key给你签署的凭证。 1.key的生成 openssl genrsa -des3 -out server.key 2048 这样是生成rsa私钥,des3算法,openssl格式,2048位强度。server.key是密钥文件名。为了生成这样的密钥,需要一个至少四位的密码。可以通过以下方法生成没有密码的key: openssl rsa -in server.key -out server.key server.key就是没有密码的版本了。 2. 生成CA的crt openssl req -new -x509 -key server.key -out ca.crt -days 3650 生成的ca.crt文件是用来签署下面的server.csr文件。 3.csr的生成方法: openssl req -new -key server.key -out server.csr 需要依次输入国家,地区,组织,email。最重要的是,有一个common name,可以写你的名字或者域名。如果为了https申请,这个必须和域名吻合,否则会引发浏览器警报。生成的csr文件交给CA签名后形成服务端自己的证书。 4.crt生成方法 CSR文件必须有CA的签名才可形成证书.可将此文件发送到verisign等地方由它验证,要交一大笔钱,何不自己做CA呢. openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey server.key -CAcreateserial -out server.crt 输入key的密钥后,完成证书生成。-CA选项指明用于被签名的csr证书,-CAkey选项指明用于签名的密钥。-CAserial指明序列号文件,而-CAcreateserial指明文件不存在时自动生成。 最后生成了私用密钥:server.key和自己认证的SSL证书:server.crt

Apache 配置支持HTTPS的SSL证书-生成CA证书

Apache 配置支持HTTPS的SSL证书 在设置Apache + SSL之前, 需要做: 安装Apache, 下载安装Apache时请下载带有ssl版本的Apache安装程序. 并且ssl需要的文件在如下的位置: [Apache安装目录]/modules/ mod_ssl.so [Apache安装目录]/bin/ openssl.exe, libeay32.dll, ssleay32.dll, https://www.360docs.net/doc/269855335.html,f [Apache安装目录]/conf/ https://www.360docs.net/doc/269855335.html,f 创建SSL证书(注意,我下载的是PHPStudy里面自带了openssl,但是bin目录下没有https://www.360docs.net/doc/269855335.html,f,需要将conf下的https://www.360docs.net/doc/269855335.html,f拷贝一份到bin目录下,但总体原理一样) 一.生成一个带CA(Certificate Authority)授权的证书 打开CMD,进入到Apache安装目录下的bin目录下: 步骤一: 执行命令,生成私钥: openssl genrsa -out tian_server.key 2048 (RSA密钥对的默认长度是1024,取值是2的整数次方,并且密钥长度约长,安全性相对会高点)。 完成密钥server.key生产完毕后进行步骤二操作。 步骤二: 配置https://www.360docs.net/doc/269855335.html,f 请确保以下数据这里所要求的值

default_md = md5 #默认是default,会触发[default digest message is not supported ] req_extensions = v3_req #默认签名被注释了 [ v3_req ] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment subjectAltName = @alt_names #此项不存在,需要添加 [ alt_names ] #此项不存在,需要添加,注意DNS.x DNS.1 = https://www.360docs.net/doc/269855335.html, #自定义 DNS.2 = https://www.360docs.net/doc/269855335.html, #自定义 DNS.3 = https://www.360docs.net/doc/269855335.html, #自定义 DNS.4 = https://www.360docs.net/doc/269855335.html, #自定义 DNS.5 = https://www.360docs.net/doc/269855335.html, #自定义 DNS.6 = https://www.360docs.net/doc/269855335.html, #自定义 然后创建目录和文件 demoCA/ newcerts/ private/ index.txt index.txt.attr serial #此文件初始值输入00即可 生成Certificate Signing Request文件,用于向CA机构申请证书: openssl req -new -key tian_server.key -out tian_server.csr -config https://www.360docs.net/doc/269855335.html,f (如果不加-config https://www.360docs.net/doc/269855335.html,f参数的话,常会报Unable to load config info from .../ssl/https://www.360docs.net/doc/269855335.html,f) 之后就会要求输入一系列的参数: Country Name (2 letter code) [AU]:CN ISO 国家代码(只支持两位字符) State or Province Name (full name) [Some-State]:ZJ 所在省份 Locality Name (eg, city) []:HZ 所在城市

SSL证书安装

在默认情况下,IIS使用HTTP协议以明文形式传输数据,没有采取任何加密措施,用户的重要数据很容易被窃取,如何才能保护局域网中的这些重要数据呢?我们可以使用SSL增强IIS服务器的通信安全。 SSL网站不同于一般的Web站点,它使用的是“HTTPS”协议,而不是普通的“HTTP”协议。因此它的URL(统一资源定位器)格式为“https://网站域名”。 一、安装证书条件 要想使用SSL安全机制功能,首先必须为Windows Server 2003或者 windows 2000 server系统安装证书服务。 1、首先请确认您的服务器已经安装配置了Active Directory服务,这样您就可以给域中的用户颁发数字证书。当然AD服务不是安装CA服务的必要条件,如果仅仅做测试使用,您可以不安装AD服务; 2、确保在您的Windows2000server/.NET中开启IIS服务,并且支持ASP,这样您的CA服务可以通过WEB在INTERNET/INTRANET发布;当然一般实际情况是WEB 服务器和CA服务器分别是独立的服务器。 二、安装证书服务 要想使用SSL安全机制功能,首先必须为Windows Server 2003系统安装证书服务。 进入“控制面板”,运行“添加或删除程序”,接着进入“Windows组件向导”对话框,勾选“证书服务”选项 点击“下一步”按钮,接着选择CA类型。这里选择“独立根CA”

点击“下一步”按钮,为自己的CA服务器取个名字,设置证书的有效期限, 最后指定证书数据库和证书数据库日志的位置,就可完成证书服务的安装。

三、配置SSL网站 1.创建请求证书文件 完成了证书服务的安装后,就可以为要使用SSL安全机制的网站创建请求证书文件。点击“控制面板→管理工具”,运行“Internet 信息服务-IIS 管理器”,在管理器窗口中展开“网站”目录,右键点击要使用SSL的网站,选择“属性”选项,在网站属性对话框中切换到“目录安全性”标签页(图1),然后点击“服务器证书”按钮。 在“IIS证书向导”对话框中选择“新建证书”

相关主题
相关文档
最新文档