精华内容
下载资源
问答
  • HTTPS 证书认证流程

    千次阅读 2021-03-03 15:46:49
    2)服务端把自己的信息以数字证书的形式返回给客户端(证书内容有密钥公钥,网站地址,证书颁发机构,失效日期等)。证书中有一个公钥来加密信息,私钥由服务器持有。 3)验证证书的合法性 客户端收到服务器的响应后...

    前言

    HTTPS 通过 TLS/SSL 协议实现 HTTP 的加密安全传输。而 TLS/SSL 协议主要依赖三种算法实现安全功能:

    • 非对称加密:实现身份认证和密钥协商
    • 对称加密:对数据加密
    • 散列函数:验证信息的完整性

    对称加密和非对称加密以及签名可以参考 这篇文档

    HTTPS 使用的是 对称加密和非对称加密 结合的方式。具体的做法是:
    发送信息的一方(客户端)使用服务端的公钥加密 "对称密钥",服务端使用私钥解密拿到 "对称密钥"。这样可以确保 "对称密钥" 的传输过程是安全的,后续就可以使用 “对称密钥” 进行数据加密传输。

    数字证书认证的具体流程

    证书认证

    1. 向第三方机构 CA 提交服务器公钥、组织信息、个人信息(域名)等信息并申请认证。(实际操作中,往往需要提供私钥,它会自动从私钥中提取公钥)
    2. CA 通过多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等。如信息审核通过,CA 会向申请者签发认证文件-证书。
      证书包含以下信息:申请者公钥、申请者的组织信息和个人信息、签发机构 CA 的信息、有效时间、证书序列号等信息的明文,同时包含一个签名。 其中签名的产生算法:首先,使用散列函数计算公开的明文信息的信息摘要,然后,采用 CA 的私钥对信息摘要进行加密,密文即签名。
    3. 客户端向服务端发出请求时,服务端返回证书文件。
      客户端读取证书中的相关的明文信息,采用相同的散列函数计算得到信息摘要,然后,利用对应 CA 的公钥解密签名数据,对比证书的信息摘要,如果一致,则可以确认证书的合法性。
      客户端还会验证证书相关的域名信息、有效时间等信息; 客户端会内置信任 CA 的证书信息(包含公钥),如果 CA 不被信任,则找不到对应 CA 的证书,证书也会被判定非法。

    HTTPS 工作流程

    在这里插入图片描述
    1.客户端发起一个 HTTPS 请求。
    2.服务端把配置好的证书返回给客户端。
    3.客户端验证证书:比如是否在有效期内,证书的用途是不是匹配 Client 请求的站点,是不是在 CRL 吊销列表里面,它的上一级证书是否有效等
    4.客户端使用伪随机数生成对称密钥,并通过证书里服务器的公钥进行加密。后续使用该对称密钥进行传输信息。
    5.服务端使用自己的私钥解密这个消息,得到对称密钥。至此,客户端和服务端都持有了相同的对称密钥。
    6.服务端使用对称密钥加密“明文内容 A”,发送给客户端。
    7.客户端使用对称密钥解密响应的密文,得到“明文内容 A”。
    8.客户端再次发起 HTTPS 的请求,使用对称密钥加密请求的“明文内容 B”,然后服务器使用对称密钥解密密文,得到“明文内容 B”。
    以此保持加密通信。

    参考文档:https://github.com/ljianshu/Blog/issues/50

    展开全文
  • https证书认证的流程

    2021-10-08 20:48:29
    https进行SSL认证的全过程 事前准备 1、服务器生成一对公钥和私钥(不对称加密方式,此处的公钥简称<服公钥>,密钥简称<服密钥>) 2、服务器向CA机构进行通信,将<服公钥>交给CA机构 3、CA对<...

    https进行SSL认证的全过程

    事前准备
    1、服务器生成一对公钥和私钥(不对称加密方式,此处的公钥简称<服公钥>,密钥简称<服密钥>)
    2、服务器向CA机构进行通信,将<服公钥>交给CA机构
    3、CA对<服公钥>进行数字签名,生成一个<数字签名>,将两者绑定在一起<公钥证书>
    4、<公钥证书>返回并且存在服务器,保存

    客户端通信过程

    1、客户端向服务器进行请求通信,服务器向客户端发送<公钥证书>
    2、客户端使用<CA公钥>对公钥证书的数字签名进行验证,验证通过的场合,证明公钥值得信赖,公钥已经被CA机构认证。(CA公钥,CA机构公开在网络上的公钥, 为了防止被获得CA公钥在网络获得的过程中被中间人替换,一般实现存放在浏览器中)
    (验证过程:客户端利用服务器传过来的信息验证服务器的合法性,服务器的合法性包括:证书是否过期,发行服务器证书的CA 是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配。如果合法性验证没有通过,通讯将断开;如果合法性验证通过,将继续进行。)
    3、通过<公钥证书>获得<服公钥>
    4、客户端生成一个<共享密钥>,使用认证过的<服公钥>进行加密,将<共享密钥>发送到服务器
    5、服务器通过<服私钥>解密,得到<共享密钥>
    6、此时客户端和服务器都保存了同一个<共享密钥>,并且可以有效保证是安全的,以后的http传输的主体部分,通过<共享密钥>进行加密来确保通信过程的安全,报文没有没篡改。

    总结:SSL认证建立在服务器与客户端的所有通信之前,SSL认证之后,http主体部分通过<共享密钥>加密。

    展开全文
  • 一、证书认证 1、浏览器下载server.cer 证书 添加至assets public static SSLSocketFactory setCertificates(InputStream... certificates){ try{ //证书工厂。此处指明证书的类型 CertificateFactory ...

    一、证书认证

    1、浏览器下载 server.cer 证书 添加至 assets

        public static SSLSocketFactory setCertificates(InputStream... certificates){
            try{
                //证书工厂。此处指明证书的类型
                CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
                //创建一个证书库
                KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
                keyStore.load(null);
                int index = 0;
                for (InputStream certificate : certificates){
                    String certificateAlias = Integer.toString(index++);
                    //将证书导入证书库
                    keyStore.setCertificateEntry(certificateAlias, certificateFactory.generateCertificate(certificate));
    
                    try{
                        if (certificate != null)
                            certificate.close();
                    } catch (IOException e){
                        e.printStackTrace() ;
                    }
                }
    
                //取得SSL的SSLContext实例
                SSLContext sslContext = SSLContext.getInstance("TLS");
                TrustManagerFactory trustManagerFactory = TrustManagerFactory.
                        getInstance(TrustManagerFactory.getDefaultAlgorithm());
                trustManagerFactory.init(keyStore);
    
                //初始化keystore
                KeyStore clientKeyStore = KeyStore.getInstance(KeyStore.getDefaultType());
                clientKeyStore.load(null, "password".toCharArray());
    
                KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
                keyManagerFactory.init(clientKeyStore, "password".toCharArray());
    
                // 第一个参数是授权的密钥管理器,用来授权验证。TrustManager[]第二个是被授权的证书管理器,用来验证服务器端的证书。第三个参数是一个随机数值,可以填写null
                sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), new SecureRandom());
    //            sslContext.init(null, null, new SecureRandom());
                return sslContext.getSocketFactory() ;
    
            } catch (Exception e){
                e.printStackTrace();
            }
            return null ;
        }
    
       private static class TrustAnyHostnameVerifier implements HostnameVerifier {
            public boolean verify(String hostname, SSLSession session) {
                return true;
            }
        }

    2、网络访问

    URL _url = new URL(url);
    HttpsURLConnection http = (HttpsURLConnection) _url.openConnection();
    // 设置域名校验
    http.setHostnameVerifier(new TrustAnyHostnameVerifier());
    http.setSSLSocketFactory(setCertificates(BaseApplication.getApplication().getAssets().open("server.cer")));
      // 连接超时 读取超时 --服务器响应比较慢,增大时间
    http.setConnectTimeout(5000);
    http.setReadTimeout(20000);

    二、信任所有证书

       private static class TrustAnyHostnameVerifier implements HostnameVerifier {
            public boolean verify(String hostname, SSLSession session) {
                return true;
            }
        }
    
        private static class MyX509TrustManager implements X509TrustManager {
    
            public X509Certificate[] getAcceptedIssuers() {
                return null;
            }
    
            @Override
            public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            }
    
            @Override
            public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            }
        }

    2、网络访问时使用

    TrustManager[] tm = {new MyX509TrustManager()};
    SSLContext sslContext = SSLContext.getInstance("SSL");
    sslContext.init(null, tm, new java.security.SecureRandom());
    SSLSocketFactory ssf = sslContext.getSocketFactory();
    URL _url = new URL(url);
    HttpsURLConnection http = (HttpsURLConnection) _url.openConnection();
    http.setHostnameVerifier(new TrustAnyHostnameVerifier());
    http.setSSLSocketFactory(ssf);
      // 连接超时 读取超时 --服务器响应比较慢,增大时间
    http.setConnectTimeout(5000);
    http.setReadTimeout(20000);

    展开全文
  • Java https证书认证

    2021-02-12 13:36:49
    /** * Java证书认证 */ public class CertLoginServlet extends HttpServlet { private static final long serialVersionUID = -7342923817561268766L; @Override protected void service(HttpServletRequest ...

    package com.what21.demo03;

    import java.io.IOException;

    import java.security.cert.X509Certificate;

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    /**

    * Java证书认证

    */

    public class CertLoginServlet extends HttpServlet {

    private static final long serialVersionUID = -7342923817561268766L;

    @Override

    protected void service(HttpServletRequest request, HttpServletResponse response)

    throws ServletException, IOException {

    // 从Reques获取证书

    X509Certificate[] certChain= (X509Certificate[])request.getAttribute("javax.servlet.request.X509Certificate");

    for (int i = 0; certChain != null && i < certChain.length; i++) {

    java.security.cert.X509Certificate cert = certChain[i];

    System.out.println("输出证书信息: " + cert.toString());

    System.out.println("版本号:" + cert.getVersion());

    System.out.println("序列号:" + cert.getSerialNumber().toString(16));

    System.out.println("主体名:" + cert.getSubjectDN());

    System.out.println("签发者:" + cert.getIssuerDN());

    System.out.println("有效期:" + cert.getNotBefore());

    System.out.println("签名算法:" + cert.getSigAlgName());

    byte[] sign = cert.getSignature();

    System.out.println("签名值:");

    for (int j = 0; j < sign.length; j++){

    System.out.print(sign[j] + ",");

    }

    System.out.println();

    java.security.PublicKey pk = cert.getPublicKey();

    byte[] pkenc = pk.getEncoded();

    System.out.println("公钥");

    for (int j = 0; j < pkenc.length; j++){

    System.out.print(pkenc[j] + ",");

    }

    System.out.println();

    }

    }

    }

    展开全文
  • https证书认证-java

    2021-06-03 15:43:04
    1.首先要确认是双向认证还是单向认证,如果是只需要对服务端的单向认证,则只需要用到根证书,应该就是这里的ca.crt。如果是双向认证,三个都需要用到。如果是java代码作为客户端连接 2.单向认证是客户端根据ca根...
  • 一、证书认证 1、浏览器下载server.cer 证书 添加至assets import android.util.Log; import net.bunnytouch.bunnydaemon.BaseApplication; import java.io.IOException; import java.io.InputStream; import ...
  • 1、关于http及https相关内容,参考:https://blog.csdn.net/xiaoming100001/article/details/811096172、因为要访问的https网站非授信网站,故需要获取其证书,未找到直接获取的办法注:网页直接输入的https://host...
  • 这里就分享一下通过服务方提供的认证证书来实现https请求; 一、证书转换 1、服务方给的证书多为"cer"类型,比如直接从浏览器中下载下来的,该类证书不能直接使用java调用认证,需转换为java可识别的类型,比如"....
  • 一、服务端不强制使用证书认证可以使用httpclient提供的方法,绕过证书认证private final RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(TIMEOUT).setConnectTimeout(TIMEOUT).build();...
  • https证书认证

    2021-08-09 17:31:57
    https://blog.51cto.com/u_4925054/1949641 单项认证实现: public class HttpsUtil { /** * 对所有站点的信任 * * @return SSLSocketFactory工厂对象 */ public static SSLSocketFactory ...
  • sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 证书过期...
  • 1、生成CA自签文件1.1在openssl-0.9.8h-1-bin\bin进入cmd窗口或者cmd窗口路径到openssl-0.9.8h-1-bin\bin下1.2ras的秘钥长度:2048存放ca公钥证书的路径:D:/cert_test/root_ca/ca_cert.pem证书的有效期(天):3650根...
  • 该客户端的密钥库是一个PKCS#12格式文件包含客户端的公共证书(在这种情况下,由自签名CA签名)客户端的私有密钥为了生成它,我使用了OpenSSL的pkcs12命令。openssl pkcs12 -export -in client.crt -inkey client.key...
  • * 以及HostnameVerifier的verify(校验)方法即可取消对https证书的所有验证。 * * 2. 影响的范围:将会影响整个tomcat里面对证书的验证。即通过tomcat里面的其他项目虽然没有执行这一段代码但是也同样会忽略证书的...
  • PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 如果证书过期,配置容器为http请求,就可搞定。...
  • name 为导入证书名称,D://https.ce r为证书的路径 默认密码为: changeit 是否信任:Y 添加成功提示证书已添加到密钥库中 2. 查看证书是否添加成功。 keytool -list -keystore cacerts -alias name 注意: 有时候会...
  • 1、生成服务器证书库输入命令:keytool -validity 365 -genkey -v -alias server -keyalg RSA -keystore D:\jks\server.keystore -dname "CN=127.0.0.1,OU=icesoft,O=icesoft,L=Haidian,ST=Beijing,c=...
  • 1.需要将设备的ip和域名绑定,绑定效果图如下(记得实名认证)2.登录服务器,安装git(本人服务器版本 centos 7.2)2.1 yum install git如发生如下异常解决方法:# rm -r /var/run/yum.pid# rm:是否删除 一般文件 “/...
  • win下创建CA证书,请查阅win系统下基于springboot实现https的双向认证的相关内容噢。 Linux下创建CA证书,请查阅Linux系统下基于springboot实现https的双向认证的相关内容噢。 1.2 相关文件 2、docker部署 2.1 环境...
  • 生成CA自签证书: openssl genrsa -out ca-key.pem 1024 openssl req -new -out ca-req.csr -key ca-key.pem -subj "/C=CN/ST=Jiangsu/L=Changzhou/O=XXXXX/CN=www.XXXXXX.com.cn" openssl x509 -req -in ca-req...
  • 其他答案显示了如何全局配置客户端证书。但是,如果您希望以编程方式为一个特定连接定义客户端密钥,而不是在JVM上运行的每个应用程序中全局定义它,那么您可以配置您自己的SSLContext,如下所示:String ...
  • 网站申请https证书是怎么收费的?https证书申请需要多少钱?https证书的价格其实与证书品牌以及SSL证书验证方式以及域名数量有关系,接下来我们具体的看看https证书申请的费用. 影响https证书申请费用的主要是证书...
  • https认证方式以及HTTPS双向认证过程分类:建站推广编辑:浏览量:1002021-07-15 14:29:14很多网站都配置了HTTPS而不是HTTP,因为安全性得到了极大的提高,如果要使用HTTPS证书,是否需要通过HTTPS对其进行身份验证...
  • https证书原理是什么

    2021-10-13 10:17:03
    有多少人对于https是不是特别的茫然呢,实际上这个就是安全证书,安全证书对于我们网络来说是必不可少的一个证件,所以说大家一定要重视起来,多多学习这方面的知识,那么今天小编给大家讲一下https证书原理是什么?...
  • 对于 HTTPS 服务器证书过期的问题,由于 Android 安全库的不断更新,尽管在证书验证的时候抛出的异常大同小异,但还是有一定的区别的。某些系统之间抛出的异常完全相同,另外的一些系统之间,抛出的异常则不太一样。...
  • CA证书认证流程

    2021-12-17 14:12:19
    1、申请认证证书) - `服务端 S`向第三方权威机构CA申请证书,`服务器 S`先生成公钥和私钥对 - 确认信息里面绑定我们当前使用哪个域名,以及申请者以及公钥 - 生成请求文件`.csr `(csr是我们`服务端 S`向CA提交...
  • SSL证书到期或不信任需要重新认证HTTPS证书。 一、ssl证书包含域名与网址不一致 每一个ssl证书所对应的域名都具有唯一性,是一个全域名FQDN。当网站出具的证书所包含的域名和网站域名不一致,系统就会自动发出报告,...
  • 1. 生成服务端证书和客户端证书 2. 配置nginx并重启 3. 本地浏览器导入客户端证书 4. 测试验证 证书制作详细过程 # 1 创建目录 mkdir -p keys/private && mkdir -p keys/certs cd keys # 2 生成根证书...
  • 当前位置:我的异常网» Android»okhttpSSL证书验证失败有关问题okhttpSSL证书验证失败有关问题www.myexceptions.net网友分享于:2015-10-19浏览:0次okhttpSSL证书验证失败问题javax.net.ssl.SSLHandshakeException...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 88,957
精华内容 35,582
关键字:

https证书认证