首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java能否连接到通配符ssl

Java能否连接到通配符ssl
EN

Stack Overflow用户
提问于 2010-07-02 22:01:33
回答 2查看 12.9K关注 0票数 8

我们希望购买通配符SSL证书,因为我们有很多子域。但是,我不知道Java是否信任通配符证书。当人们通过SSL连接到我们的API时,强制与我们通信的所有第三方将我们的SSL证书添加到他们的本地信任库是不够的。

目前,我正面临着一个两难的选择,是从java可信发行商那里购买通配符证书,还是为每个子域购买多个证书。

其他语言也有信任库吗?如果是这样的话,是否有人知道通配符证书是否也适用于它们。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-26 22:26:55

我已经在java6中尝试过了。

它看起来工作正常。我已经成功地从一个具有通配符SSL证书的文件中读取了标题和正文内容。

代码语言:javascript
复制
package com.example.test;

import java.io.DataInputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;


public class SSLTEST {
    public static void main(String[] args) {
        try {
            URL url = new URL("https://test.example.com/robots.txt");
            URLConnection connection = null;
            try {
                connection = url.openConnection();
            } catch (IOException e) {
                e.printStackTrace();
            }
            Map<String, List<String>> fields = connection.getHeaderFields();
            Iterator<Entry<String, List<String>>> headerIterator = fields.entrySet().iterator();
            System.out.println("HEADERS");
            System.out.println("-------------------------------");
            while (headerIterator.hasNext()){
                Entry<String, List<String>> header = headerIterator.next();
                System.out.println(header.getKey()+" :");
                Iterator<String> valueIterator = header.getValue().iterator();
                while (valueIterator.hasNext()){
                    System.out.println("\t"+valueIterator.next());
                }

            }

            String inputLine;
            DataInputStream input = new DataInputStream(connection.getInputStream());
            System.out.println("BODY CONTENT");
            System.out.println("-------------------------------");
            while ((inputLine = input.readLine()) != null) {
                System.out.println(inputLine);
            }


        } catch (MalformedURLException e) {
            System.err.println(e);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

编辑我刚刚收到确认,这在Java1.5上可以工作

票数 2
EN

Stack Overflow用户

发布于 2010-07-03 03:03:44

Sun的JSSE中的默认实现不支持通配符。您需要编写自己的X509TrustManager来处理通配符。

但是,从Java 5开始,Java支持SAN (使用者备用名称)。如果您的名称少于20个,则可以为所有这些名称获取一个证书。它可能比通配符证书更便宜。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3166373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档