GVKun编程网logo

向JRE添加SSL证书以访问HTTPS站点(jre导入证书)

8

在这篇文章中,我们将带领您了解向JRE添加SSL证书以访问HTTPS站点的全貌,包括jre导入证书的相关情况。同时,我们还将为您介绍有关C#检测并安装https站点的数字证书,CefSharp和Htt

在这篇文章中,我们将带领您了解向JRE添加SSL证书以访问HTTPS站点的全貌,包括jre导入证书的相关情况。同时,我们还将为您介绍有关C#检测并安装https站点的数字证书,CefSharp和HttpWebRequest通过会话Cookie实现自动登录访问https站点、CentOS下在Nginx中添加SSL证书以支持HTTPS协议访问、HTTPS丨SSL证书丨怎么挑选合适的SSL证书呢?、HTTPS的证书未经权威机构认证的情况下,访问HTTPS站点的两种方法的知识,以帮助您更好地理解这个主题。

本文目录一览:

向JRE添加SSL证书以访问HTTPS站点(jre导入证书)

向JRE添加SSL证书以访问HTTPS站点(jre导入证书)

内容:

因此,我试图从我的Java代码访问HTTPS站点,但由于本地主机和服务器之间的SSL握手问题而无法访问。出现此问题的原因似乎是我尝试访问的URL没有从授权CA颁发的有效证书。

因此,在进行了一些研究之后,我将尝试将有问题的SSL证书导入到我的JRE中,以便可以对其进行验证。

题:

使用keytool导入证书的此命令的mac等效命令是什么:

keytool -import -alias mycertificate -keystore ..\lib\security\cacerts -file c:\mycert.cer

参考:

http://www.jyothis.co.in/2011/11/12/javax-net-ssl-
sslhandshakeexception/

任何帮助或帮助将不胜感激,谢谢

C#检测并安装https站点的数字证书,CefSharp和HttpWebRequest通过会话Cookie实现自动登录访问https站点

C#检测并安装https站点的数字证书,CefSharp和HttpWebRequest通过会话Cookie实现自动登录访问https站点

HttpUtil工具类:

using System;
 System.Collections.Generic;
 System.IO;
 System.Linq;
 System.Net;
 System.Text;

namespace Mybrowser
{
    /// <summary>
    /// Http上传下载文件
    </summary>
    public class HttpUtil
    {
        #region cookie设置
        private static CookieContainer m_Cookie = new CookieContainer();

        static void SetHttpCookie(CookieContainer cookie)
        {
            m_Cookie = cookie;
        }
        #endregion

        #region HttpDownloadFile 下载文件
        static MemoryStream HttpDownloadFile(string url)
        {
            // 设置参数
            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
            request.Method = "GET";
            request.CookieContainer = m_Cookie;

            发送请求并获取相应回应数据
            HttpWebResponse response = request.GetResponse()  HttpWebResponse;
            直到request.GetResponse()程序才开始向目标网页发送Post请求
            Stream responseStream = response.GetResponseStream();

            创建写入流
            MemoryStream stream =  MemoryStream();

            byte[] bArr = new byte[1024];
            int size = responseStream.Read(bArr,0,(int)bArr.Length);
            while (size > 0)
            {
                stream.Write(bArr,,size);
                size = responseStream.Read(bArr,1)">)bArr.Length);
            }
            stream.Seek(return stream;
        }
        #region HttpUploadFile 上传文件
        <summary>
         Http上传文件
        </summary>
        string HttpUploadFile(string url,byte[] bArr,1)"> fileName)
        {
             HttpWebRequest;
            CookieContainer cookieContainer =  CookieContainer();
            request.CookieContainer = cookieContainer;
            request.AllowAutoRedirect = true;
            request.Method = POST;
            string boundary = DateTime.Now.Ticks.ToString(X");  随机分隔线
            request.ContentType = text/plain;charset=utf-8 m_Cookie;

            Stream postStream = request.GetRequestStream();
            postStream.Write(bArr,bArr.Length);
            postStream.Close();

            直到request.GetResponse()程序才开始向目标网页发送Post请求
            Stream instream = response.GetResponseStream();
            StreamReader sr =  StreamReader(instream,Encoding.UTF8);
            返回结果网页(html)代码
            string content = sr.ReadToEnd();
             content;
        }
        #region HttpPost
         HttpPost
        string HttpPost( data)
        {
            byte[] bArr = ASCIIEncoding.UTF8.GetBytes(data);

             HttpWebRequest;
            request.CookieContainer = m_Cookie;
            request.Method = ;
            request.ContentType = ;
            request.ContentLength = bArr.Length;

            Stream postStream =;

            #region HttpGet
         HttpGet
        string HttpGet(out Cookie cookie)
        {
             sr.ReadToEnd();

            获取Cookie
            CookieCollection cc = request.CookieContainer.GetCookies(request.RequestUri);
            if (cc != null && cc.Count > )
            {
                cookie = cc[];
            }
            else
            {
                cookie = null;
            }

            #endregion

    }
}
View Code

 C#检测并安装https站点的数字证书:

bool isCertStored = ;
X509Store store =  X509Store(StoreName.Root,StoreLocation.LocalMachine);
store.Open(OpenFlags.MaxAllowed);
X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindBySubjectName,1)">HIKVISION-GA-ROOT-V1",1)">false);
if (certs.Count == 0 || certs[0].NotAfter < DateTime.Now)
{
    if (File.Exists(AppDomain.CurrentDomain.BaseDirectory + HuShaCert.cer))
    {
        X509Certificate2 certificate = new X509Certificate2(AppDomain.CurrentDomain.BaseDirectory + );
        store.Add(certificate); 安装证书
    }
    
    {
        isCertStored = ;
    }
}
store.Close();
if (!isCertStored)
{
    System.Windows.MessageBox.Show(证书没有安装成功,无法访问系统,请联系管理员);
    ;
}
View Code

 CefSharp和HttpWebRequest通过会话Cookie实现自动登录:

void Window_Loaded(object sender,RoutedEventArgs e)
{
    Task.Factory.StartNew(() =>
    {
        try
        {
            获取token
            string tokenUrl = tokenUrl = _baseUrl + /nopasswordLogin_A10AD3FA1EC4fdbAA9B7007BBF3FCD89/?ACTION=getTokenstring token = HttpUtil.HttpGet(tokenUrl);
            if (token != null) token = token.Trim();

            登录,并取得Cookie
            string loginUrl = _baseUrl + string.Format(/nopasswordLogin_A10AD3FA1EC4fdbAA9B7007BBF3FCD89/?ACTION=verify&VERIFY_TOKEN={0}&YISA_API_NAME=yisa_api1stem.Net.Cookie cookie = ;
            HttpUtil.HttpGet(loginUrl, cookie);

            if (cookie != )
            {
                CefSharp.Cookie cefsharpCookie =  CefSharp.Cookie();
                cefsharpCookie.Domain = cookie.Domain;
                cefsharpCookie.Name = cookie.Name;
                cefsharpCookie.Value = cookie.Value;

                this.dispatcher.BeginInvoke(new Action(() =>
                {
                    
                    {
                        _browser = new ExtChromiumbrowser() { Dock = DockStyle.Fill };
                        Bindbrowser(_browser);

                        设置Cookie
                        var cookieManager = CefSharp.Cef.GetGlobalCookieManager();
                        cookieManager.SetCookieAsync(_baseUrl,cefsharpCookie);

                        _browser.Load(_baseUrl + /?c=inquiry_model);
                        host.Child = _browser;
                    }
                    catch
                    {
                        System.Windows.MessageBox.Show(无法访问,请联系管理员);
                        this.Close();
                    }
                }));
            }
            
            {
                System.Windows.MessageBox.Show(登录失败,请联系管理员);
                .Close();
            }
        }
        
        {
            System.Windows.MessageBox.Show();
            .Close();
        }
    });
}
View Code

 

CentOS下在Nginx中添加SSL证书以支持HTTPS协议访问

CentOS下在Nginx中添加SSL证书以支持HTTPS协议访问

SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。

SSL证书一般由 GlobalSign 等 CA 机构颁发,网站在安装 SSL 证书之后可以以“https”的方式访问网页。https 意味着这是一个安全连接。

谷歌为鼓励网站开发者在保护网页信息上付出更多努力,谷歌搜索引擎排名新算法会提升安装了SSL证书(又叫“https证书”)的网页的搜索权重。

这表示在谷歌搜索新算法下,经过“HTTPS”(超文本传输安全协议)处理的网页——为网页增加 SSL 安全证书——的权重会得到提升,而继续采用“HTTP”(超文本传输协议)的网页的权重会相对降低。因此,本文主要记录,Apache和Nginx下如何为网站添加ssl证书,以支持https访问。

国内 WoSign 提供数字证书,全中文界面申请,非常友好,审核通过非常快速。推荐!!!!!
申请地址:https://buy.wosign.com/QuickToApplyFreeSSL.html

经过审核后,你的邮箱会收到一封邮件。

CentOS下在Nginx中添加SSL证书以支持HTTPS协议访问

解压缩可以看到服务器软件对应的SSL证书

CentOS下在Nginx中添加SSL证书以支持HTTPS协议访问

上传到对应版本的SSL证书到/usr/local/Nginx/conf/ssl 目录下

找到对应的server,修改Nginx配置

#基本的SSL配置 server { listen 443 ssl; server_name www.test.com; root /home/wwwroot/test.com; index index.PHP; ssl_certificate /usr/local/Nginx/conf/ssl/www.test.com.crt; ssl_certificate_key /usr/local/Nginx/conf/ssl/www.test.com.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; ssl_prefer_server_ciphers on; } #解决http二级域名跳转https,解决http根域名跳转https server { listen 80; server_name test.com; if ($host != 'www.test.com') { rewrite ^/(.*)$ https://www.test.com/$1 permanent; } } server { listen 80; server_name www.test.com; rewrite ^/(.*)$ https://www.test.com/$1 permanent; }

特别注意:

CentOS下在Nginx中添加SSL证书以支持HTTPS协议访问

“本页不但包含安全的内容,也包含不安全的内容” 弹出这个提示是因为网站页面上包含混合内容导致的。也就是说,网站页面上包含 http:// 的资源 也包含 https:// 的资源。通常这种情况是需要在网站页面上做一些调整才能去除提示

HTTPS丨SSL证书丨怎么挑选合适的SSL证书呢?

HTTPS丨SSL证书丨怎么挑选合适的SSL证书呢?

如今市面上的SSL种类非常的多,价格差的也非常的大,我们该如何挑选适合自己使用的SSL证书呢?JoySSL小编今天来带大家分析下。

一:SSL证书的类型

单域名证书——只保护一个域名,价格相对来说最便宜
通配符证书——保护一个主域名及所有的二级子域名
多域名证书——保护多个不相关的域名


SSL证书申请:证书详细信息


二:证书的验证级别

DV级别:仅做域名管理权验证,签发快速,一般十分钟可以完成验证并且签发。适合个人以及小型企业使用。
OV级别:在验证域名管理权的基础上,增加了一条验证企业信息的真实性,签发安装之后可以在浏览器直接查看到企业的组织信息,安全可信度更高。一般中大型企业的必备项。

HTTPS的证书未经权威机构认证的情况下,访问HTTPS站点的两种方法

HTTPS的证书未经权威机构认证的情况下,访问HTTPS站点的两种方法

注意一下文章中提到的jsse在jdk1.4以后已经集成了,不必纠结.

摘 要 JSSE是一个SSL和TLS的纯Java实现,通过JSSE可以很容易地编程实现对HTTPS站点的访问。但是,如果该站点的证书未经权威机构的验证,JSSE将拒绝信任该证书从而不能访问HTTPS站点。本文在简要介绍JSSE的基础上提出了两种解决该问题的方法。


   引言

  过去的十几年,网络上已经积累了大量的Web应用。如今,无论是整合原有的Web应用系统,还是进行新的Web开发,都要求通过编程来访问某些Web页面。传统的方法是使用Socket接口,但现在很多开发平台或工具如.NET、Java或PHP等都提供了简单的Web访问接口,使用这些接口很容易编程实现与Web应用系统的交互访问,即使要访问那些采用了HTTPS而不是HTTP的Web应用系统。

  HTTPS,即安全的超文本传输协议,采用了SSL技术,被广泛使用以保证Web应用系统的安全性。访问Web应用的编程接口大多封装了SSL,使得访问HTTPS和访问HTTP一样简单。但是很多中、小型应用系统或基于局域网、校园网的应用系统所使用的证书并不是由权威的认证机构发行或者被其验证,直接使用这些编程接口将不能访问HTTPS。

  本文将在简要介绍JSSE的基础上,详细描述使用JSSE访问HTTPS的方法,主要说明了如何访问带有未经验证证书的HTTPS站点。

   JSSE简介

  Java安全套接扩展 (Java Secure Socket Extension, JSSE)是实现Internet安全通信的一系列包的集合。它是一个SSL和TLS的纯Java实现,可以透明地提供数据加密、服务器认证、信息完整性等功能,可以使我们像使用普通的套接字一样使用JSSE建立的安全套接字。JSSE是一个开放的标准,不只是Sun公司才能实现一个JSSE,事实上其他公司有自己实现的JSSE。

  在深入了解JSSE之前,需要了解一个有关Java安全的概念:客户端的TrustStore文件。客户端的TrustStore文件中保存着被客户端所信任的服务器的证书信息。客户端在进行SSL连接时,JSSE将根据这个文件中的证书决定是否信任服务器端的证书。

  JSSE中,有一个信任管理器类负责决定是否信任远端的证书,这个类有如下的处理规则:

  ⑴ 果系统属性javax.net.sll.trustStore指定了TrustStore文件,那么信任管理器就去jre安装路径下的lib/security/目录中寻找并使用这个文件来检查证书。

  ⑵ 果该系统属性没有指定TrustStore文件,它就会去jre安装路径下寻找默认的TrustStore文件,这个文件的相对路径为:lib/security/jssecacerts。

  ⑶ 如果 jssecacerts不存在,但是cacerts存在(它随J2SDK一起发行,含有数量有限的可信任的基本证书),那么这个默认的TrustStore文件就是cacerts。

  直接使用类HttpsURLConnection访问Web页面

  Java提供了一种非常简洁的方法来访问HTTPS网页,即使用类HttpsURLConnection、URL等。这几个类为支持HTTPS对JSSE相关类做了进一步的封装,例子如下所示:

URL reqURL = new URL("https://www.sun.com" ); //创建URL对象
HttpsURLConnection httpsConn = (HttpsURLConnection)reqURL.openConnection();

/*下面这段代码实现向Web页面发送数据,实现与网页的交互访问
httpsConn.setDoOutput(true); 
OutputStreamWriter out = new OutputStreamWriter(huc.getOutputStream(), "8859_1"); 
out.write( "……" ); 
out.flush(); 
out.close();
*/

//取得该连接的输入流,以读取响应内容 
InputStreamReader insr = new InputStreamReader(httpsConn.getInputStream();

//读取服务器的响应内容并显示
int respInt = insr.read();
while( respInt != -1){
 System.out.print((char)respInt);
 respInt = insr.read();
}

  这段代码能够正常执行,然而把访问的URL改为https://login.bjut.edu.cn时,程序将抛出异常javax.net.ssl.SSLException,这是由于https://login.bjut.edu.cn站点的安全证书不被JSSE所信任。根据JSSE简介中对信任管理器的分析,一种解决这个问题的方法是按照信任管理器的处理规则,把站点的证书放到证书库文件jssecacerts中,或者把证书存放到任一TrustStore文件中,然后设置系统属性javax.net.sll.trustStore指向该文件。另一种解决方法则是自己实现信任管理器类,让它信任我们指定的证书。下面分别介绍这两种方法。

   将证书导入到TrustStore文件中

  Java提供了命令行工具keytool用于创建证书或者把证书从其它文件中导入到Java自己的TrustStore文件中。把证书从其它文件导入到TrustStore文件中的命令行格式为:

  keytool -import -file src_cer_file –keystore dest_cer_store

  其中,src_cer_file为存有证书信息的源文件名,dest_cer_store为目标TrustStore文件。

  在使用keytool之前,首先要取得源证书文件,这个源文件可使用IE浏览器获得,IE浏览器会把访问过的HTTPS站点的证书保存到本地。从IE浏览器导出证书的方法是打开“Internet 选项”,选择“内容”选项卡,点击“证书…”按钮,在打开的证书对话框中,选中一个证书,然后点击“导出…”按钮,按提示一步步将该证书保存到一文件中。最后就可利用keytool把该证书导入到Java的TrustStore文件中。为了能使Java程序找到该文件,应该把这个文件复制到jre安装路径下的lib/security/目录中。

  这样,只需在程序中设置系统属性javax.net.sll.trustStore指向文件dest_cer_store,就能使JSSE信任该证书,从而使程序可以访问使用未经验证的证书的HTTPS站点。

  使用这种方法,编程非常简单,但需要手工导出服务器的证书。当服务器证书经常变化时,就需要经常进行手工导出证书的操作。下面介绍的实现X509证书信任管理器类的方法将避免手工导出证书的问题。
X509证书信任管理器类的实现及应用

  在JSSE中,证书信任管理器类就是实现了接口X509TrustManager的类。我们可以自己实现该接口,让它信任我们指定的证书。

  接口X509TrustManager有下述三个公有的方法需要我们实现:

  ⑴ oid checkClientTrusted(X509Certificate[] chain, String authType) 
throws CertificateException

  该方法检查客户端的证书,若不信任该证书则抛出异常。由于我们不需要对客户端进行认证,因此我们只需要执行默认的信任管理器的这个方法。JSSE中,默认的信任管理器类为TrustManager。

  ⑵ oid checkServerTrusted(X509Certificate[] chain, String authType) 
throws CertificateException 

  该方法检查服务器的证书,若不信任该证书同样抛出异常。通过自己实现该方法,可以使之信任我们指定的任何证书。在实现该方法时,也可以简单的不做任何处理,即一个空的函数体,由于不会抛出异常,它就会信任任何证书。

  ⑶ X509Certificate[] getAcceptedIssuers() 

  返回受信任的X509证书数组。

  自己实现了信任管理器类,如何使用呢?类HttpsURLConnection似乎并没有提供方法设置信任管理器。其实,HttpsURLConnection通过SSLSocket来建立与HTTPS的安全连接,SSLSocket对象是由SSLSocketFactory生成的。HttpsURLConnection提供了方法setSSLSocketFactory(SSLSocketFactory)设置它使用的SSLSocketFactory对象。SSLSocketFactory通过SSLContext对象来获得,在初始化SSLContext对象时,可指定信任管理器对象。下面用一个图简单表示这几个JSSE类的关系: 


图1 部分JSSE类的关系图

  假设自己实现的X509TrustManager类的类名为:MyX509TrustManager,下面的代码片断说明了如何使用MyX509TrustManager:

//创建SSLContext对象,并使用我们指定的信任管理器初始化
TrustManager[] tm = {new MyX509TrustManager ()}; 
SSLContext sslContext = SSLContext.getInstance("SSL","SunJSSE"); 
sslContext.init(null, tm, new java.security.SecureRandom()); 

//从上述SSLContext对象中得到SSLSocketFactory对象
SSLSocketFactory ssf = sslContext.getSocketFactory();

//创建HttpsURLConnection对象,并设置其SSLSocketFactory对象
HttpsURLConnection httpsConn = (HttpsURLConnection)myURL.openConnection();
httpsConn.setSSLSocketFactory(ssf);

  这样,HttpsURLConnection对象就可以正常连接HTTPS了,无论其证书是否经权威机构的验证,只要实现了接口X509TrustManager的类MyX509TrustManager信任该证书。

   小结

  本文主要介绍了在HTTPS的证书未经权威机构认证的情况下,访问HTTPS站点的两种方法,一种方法是把该证书导入到Java的TrustStore文件中,另一种是自己实现并覆盖JSSE缺省的证书信任管理器类。两种方法各有优缺点,第一种方法不会影响JSSE的安全性,但需要手工导入证书;第二种方法虽然不用手工导入证书,但需要小心使用,否则会带来一些安全隐患。

今天关于向JRE添加SSL证书以访问HTTPS站点jre导入证书的介绍到此结束,谢谢您的阅读,有关C#检测并安装https站点的数字证书,CefSharp和HttpWebRequest通过会话Cookie实现自动登录访问https站点、CentOS下在Nginx中添加SSL证书以支持HTTPS协议访问、HTTPS丨SSL证书丨怎么挑选合适的SSL证书呢?、HTTPS的证书未经权威机构认证的情况下,访问HTTPS站点的两种方法等更多相关知识的信息可以在本站进行查询。

本文标签: