javassl,javassl openssl区别

发布时间:2023-01-07

本文目录一览:

  1. 在java中怎么验证ssl证书的有效性
  2. 求解java怎样发送https请求
  3. 如何用Java代码来把SSL的证书自动导入到Jav
  4. Java ssl连接错误,SSL peer shut down incorrectly怎么解决
  5. java 为什么禁用 ssl 3.0
  6. 如何分析Java SSL错误

在java中怎么验证ssl证书的有效性

JSSE是一个SSL和TLS的纯Java实现,通过JSSE可以很容易地编程实现对HTTPS站点的访问。但是,如果该站点的证书未经权威机构的验证,JSSE将拒绝信任该证书从而不能访问HTTPS站点。

求解java怎样发送https请求

使用httpClient可以发送,具体的可以参考下面的代码

SSLClient类,继承至HttpClient

import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.impl.client.DefaultHttpClient;
//用于进行Https请求的HttpClient
public class SSLClient extends DefaultHttpClient{
    public SSLClient() throws Exception{
        super();
        SSLContext ctx = SSLContext.getInstance("TLS");
        X509TrustManager tm = new X509TrustManager() {
            @Override
            public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            }
            @Override
            public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            }
            @Override
            public X509Certificate[] getAcceptedIssuers() {
                return null;
            }
        };
        ctx.init(null, new TrustManager[]{tm}, null);
        SSLSocketFactory ssf = new SSLSocketFactory(ctx, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
        ClientConnectionManager ccm = this.getConnectionManager();
        SchemeRegistry sr = ccm.getSchemeRegistry();
        sr.register(new Scheme("https", 443, ssf));
    }
}

HttpClient发送post请求的类

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
/*
 * 利用HttpClient进行post请求的工具类
 */
public class HttpClientUtil {
    public String doPost(String url, Map<String, String> map, String charset){
        HttpClient httpClient = null;
        HttpPost httpPost = null;
        String result = null;
        try{
            httpClient = new SSLClient();
            httpPost = new HttpPost(url);
            //设置参数
            List<NameValuePair> list = new ArrayList<NameValuePair>();
            Iterator<Entry<String, String>> iterator = map.entrySet().iterator();
            while(iterator.hasNext()){
                Entry<String, String> elem = (Entry<String, String>) iterator.next();
                list.add(new BasicNameValuePair(elem.getKey(),elem.getValue()));
            }
            if(list.size() > 0){
                UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list,charset);
                httpPost.setEntity(entity);
            }
            HttpResponse response = httpClient.execute(httpPost);
            if(response != null){
                HttpEntity resEntity = response.getEntity();
                if(resEntity != null){
                    result = EntityUtils.toString(resEntity,charset);
                }
            }
        }catch(Exception ex){
            ex.printStackTrace();
        }
        return result;
    }
}

测试代码

import java.util.HashMap;
import java.util.Map;
//对接口进行测试
public class TestMain {
    private String url = "";
    private String charset = "utf-8";
    private HttpClientUtil httpClientUtil = null;
    public TestMain(){
        httpClientUtil = new HttpClientUtil();
    }
    public void test(){
        String httpOrgCreateTest = url + "httpOrg/create";
        Map<String,String> createMap = new HashMap<String,String>();
        createMap.put("authuser","*****");
        createMap.put("authpass","*****");
        createMap.put("orgkey","****");
        createMap.put("orgname","****");
        String httpOrgCreateTestRtn = httpClientUtil.doPost(httpOrgCreateTest,createMap,charset);
        System.out.println("result:"+httpOrgCreateTestRtn);
    }
    public static void main(String[] args){
        TestMain main = new TestMain();
        main.test();
    }
}

如何用Java代码来把SSL的证书自动导入到Jav

下面这个Java类可以帮助我们做这个事情。同时我们还可以把这个帮助方法开发一个可视化的程序,这样就更加方便:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.security.KeyStore;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.List;
import javax.naming.ldap.LdapName;
import javax.naming.ldap.Rdn;
import javax.security.auth.x500.X500Principal;
public class KeyStoreHelper {
    public static void createTrustJKSKeyStore(final String originalTrustFolder, final String jksTrustStoreLocation, final String password) {
        File keyStoreFile = new File(jksTrustStoreLocation);
        if (!keyStoreFile.exists()) {
            try {
                KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
                keystore.load(null, password.toCharArray());
                File trustedFolder = new File(originalTrustFolder);
                File[] certs = trustedFolder.listFiles();
                if (certs != null) {
                    for (File cert : certs) {
                        CertificateFactory factory = CertificateFactory.getInstance("X.509");
                        try {
                            X509Certificate certificate = (X509Certificate) factory.generateCertificate(new FileInputStream(cert));
                            X500Principal principal = certificate.getSubjectX500Principal();
                            LdapName ldapDN = new LdapName(principal.getName());
                            List<Rdn> rdns = ldapDN.getRdns();
                            for (Rdn rdn : rdns) {
                                String type = rdn.getType();
                                if (type.equals("CN")) {
                                    keystore.setCertificateEntry((String) rdn.getValue(),certificate);
                                    break;
                                }
                            }
                        } catch (Exception ex) {
                            continue;
                        }
                    }
                }
                FileOutputStream fos = new FileOutputStream(jksTrustStoreLocation);
                keystore.store(fos, password.toCharArray());
                fos.close();
            } catch (Exception exp) {
            }
        }
    }
    public static void main(String[] args) {
        KeyStoreHelper.createTrustJKSKeyStore("D:\\cacerts", "D:\\cacerts\\test.jks", "test123");
    }
}

Java ssl连接错误,SSL peer shut down incorrectly怎么解决

  1. 在CA机构申请的数字证书、根证书、二级证书都已经按要求导入到 myproject.keystore文件。
  2. 接口方的公钥也已经导入myproject.trustore文件。
  3. 使用openssl在授权服务器测试连接正常。
  4. 使用接口方提供的测试demo在本地环境进行连接测试异常(ssh代理方式连接)。异常应该不会是代理的缘故,https可以通过代理方式访问。

java 为什么禁用 ssl 3.0

HTTP SSL 协议: 全称:安全超文本传送安全套接字层协议 此服务通过安全套接字层(SSL)实现 HTTP 服务的安全超文本传送协议(HTTPS)。 如果此服务被禁用,任何依赖它的服务将无法启动。 首先: firefox的工具--选项---高级---安全中,将3个类型的ssl协议都勾选就可以了! 如果还有问题的话,估计你是修改了服务里面的内容,你可以到控制面版下的计算机管理中的服务,将禁用的ssl协议设置为自动或者是手动就可以了~!

如何分析Java SSL错误

在大多数情况下,这是个错误的配置,在这里的密钥库并没有containt的正确证书,证书链是不完整的,或者客户端没有提供有效的凭证。因此,在最后一个项目中,我决定记录发生的事件,并分析导致在SSL握手期间的特定错误的原因。 在这篇文章中,我会告诉你特定的SSL错误发生的原因,并且如何通过分析握手信息进行检测,以及如何解决这些问题。为此,我使用以下情形: 服务器使用由CA颁发的证书,并要求客户端进行身份验证。服务器使用一个简单的信任列,可以信任的将CA列出。 客户端连接使用这个单一的可信任的由CA颁发的证书,并有它自己的trustore还包含从服务器发来的证书。 这不是一个非常复杂的环境,而是你经常可以看到的。请注意以下信息,当你不使用客户端的证书或使用自签名的证书时,也可以找出问题。在这些事例中,确定问题的方式基本上是相同的。