【问题标题】:How can I use user's certificate?如何使用用户证书?
【发布时间】:2024-01-11 02:04:02
【问题描述】:

我无法理解使用证书的一般方案。 例如:我在某个网站上有帐户。我有namepassword。我应该怎么做才能登录这个网站? - 我应该打开_https://website:443/login并填写字段,如果一切正常,我将获得准入。

现在,我想使用 java + httpclient(apache) 以编程方式执行这些步骤。 我写过:

client = new DefaultHttpClient();

client.getParams().setParameter(ClientPNames.COOKIE_POLICY, 
                                CookiePolicy.BEST_MATCH);
client.setCookieStore(new BasicCookieStore());
client.getCredentialsProvider()
      .setCredentials(new AuthScope(ADDRESS, new Integer(PORT)),
                      new UsernamePasswordCredentials(USERNAME, USERPWD));

我应该使用服务器证书创建 trustStore:

System.setProperty("javax.net.ssl.trustStore", "./KeyStore/myca");

“myca”是使用“InstallCert.java”(Sun 的产品)制作的。

但我想以编程方式执行所有这些步骤,例如浏览器(FFox 或 Opera)导入服务器的证书...用户只想使用我的应用程序,而不是一组额外的应用程序。

我该怎么做?

现在,主要问题是:为什么服务器不需要用户证书?以及如何使用自己的证书进行身份验证? (如果我有用户证书,我不需要'name''password'来登录服务器吗?)

【问题讨论】:

    标签: java httpclient pem pkcs#12


    【解决方案1】:

    为什么服务器不需要用户的 证书?

    服务器不需要用户证书,因为大多数用户都没有,现在不知道它是什么以及如何获得。即使他们愿意,这样的证书要么难以获得,要么成本高昂,所以很多用户都得不到。

    因此,任何需要客户端证书的服务器都会将用户数量减少 1000 倍。大多数服务器所有者不希望这样。

    如果我有用户证书,我会 不需要“姓名”“密码”即可登录 服务器?

    取决于您的要求。要求证书 + 用户名/密码将被视为双因素身份验证,这是一种更强大的保护形式,然后只需要一个因素。如果要求某种生物特征识别,它会变得更加强大。

    我该怎么做?

    具体表现什么?您正在谈论“以编程方式”做事,但您已经提供了代码......?

    以及如何使用自己的证书进行身份验证?

    这应该在您的服务器配置中完成。您需要设置一个包含信任根证书的信任库 + 需要在 ssl 配置中进行客户端身份验证。例如,搜索 here 以获得 clientauth。

    【讨论】: