0

我的同事使用相互身份验证设置了一个 (Bluemix) 安全网关,供我们的项目使用。他使用 Ruby 和 CURL 对其进行了测试,并且效果很好。但是在配置我的 Liberty 服务器以使用它时,我遇到了很多问题。

我使用了此处的说明。

基本上...

要为客户端创建密钥库,请输入以下命令。在以下示例中,创建了 key.p.12。

openssl pkcs12 -export -in "[client]_cert.pem" -inkey "[client]_key" -out "sg_key.p12" -name BmxCliCert -noiter –nomaciter –password pass:<password>

它创建了一个 PKCS12 商店。(我在下面的 server.xml 中使用它)

然后我将证书添加到我的密钥库中。

然后,我将 server.xml 更改为拥有一个信任库,如我的

<ldapRegistry baseDN="o=ibm.com" host="bluepages.ibm.com" id="bluepages" ignoreCase="true" 
    ldapType="IBM Tivoli Directory Server" port="636" realm="w3" sslEnabled="true" sslRef="SSLSettings">

    <idsFilters groupFilter="(&amp;(cn=%v)(objectclass=groupOfUniqueNames))" groupIdMap="*:cn" groupMemberIdMap="groupOfUniqueNames:uniquemember" userFilter="(&amp;(emailAddress=%v)(objectclass=person))" userIdMap="*:emailAddress"/>

</ldapRegistry>

<ssl id="SSLSettings" keyStoreRef="defaultKeyStore" trustStoreRef="defaultTrustStore"/>     

<keyStore id="defaultKeyStore" password="xxxxxx" 
    location="${server.output.dir}/resources/security/key.jks"/>

<keyStore id="defaultTrustStore"
    location="${server.output.dir}/resources/security/sg_key.p12"
    type="PKCS12" password="xxxxxx" />

这是问题#1

添加信任库时,我无法再通过我的 LDAP 服务器进行身份验证。它只是说无效的用户或密码。我删除了信任库..我可以再次进行身份验证。因此,添加信任库会产生某种影响。

问题 #2。当我删除我的 LDAP 服务器并只使用基本用户注册表时......我可以登录......但是当我尝试使用安全网关时,我得到......

[错误] javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure

我已经从安全网关导入了证书,所以不知道为什么会得到这个?

所以有两个问题..使用信任库..我不能再通过 LDAP 进行身份验证...第二个..即使在导入所有证书后也无法连接到安全网关...

任何人都成功地将 Bluemix 与来自 Java 的安全网关(相互验证)一起使用?

要求的信息(已编辑)

Enter Import Password:
MAC Iteration 2048
MAC verified OK
PKCS7 Encrypted data: pbeWithSHA1And40BitRC2-CBC, Iteration 2048
Certificate bag
Bag Attributes
    friendlyName: portal
    localKeyID: 5F A0 D5 5D 68 C5 39 65 7D 24 D7 78 9B CD 7D 01 FB 1B 00 6D 
subject=/ST=NC/C=US/L=RTP/O=IBM Corporation/OU=SWG/CN=*.integration.ibmcloud.com
issuer=/ST=NC/C=US/L=RTP/O=IBM Corporation/OU=SWG/CN=*.integration.ibmcloud.com
-----BEGIN CERTIFICATE-----
INFO
4Q==
-----END CERTIFICATE-----
PKCS7 Data
Shrouded Keybag: pbeWithSHA1And3-KeyTripleDES-CBC, Iteration 2048
Bag Attributes
    friendlyName: portal
    localKeyID: 5F A0 D5 5D 68 C5 39 65 7D 24 D7 78 9B CD 7D 01 FB 1B 00 6D 
Key Attributes: <No Attributes>
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----BEGIN ENCRYPTED PRIVATE KEY-----
INFO
-----END ENCRYPTED PRIVATE KEY-----
4

1 回答 1

0

终于让这个工作了。

以前的代码..

. . . .

connection = (HttpsURLConnection) url.openConnection();

其中 url 是安全网关的 URL。

在此之前添加...

KeyStore clientStore = KeyStore.getInstance("PKCS12");
clientStore.load(new FileInputStream(KEY_STORE_PATH), "xxxxxx".toCharArray());

KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());

kmf.init(clientStore, "xxxxxx".toCharArray());

KeyManager[] kms = kmf.getKeyManagers();

KeyStore trustStore = KeyStore.getInstance("JKS");

trustStore.load(new FileInputStream(TRUST_STORE_PATH), "xxxxxx".toCharArray());

TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());

tmf.init(trustStore);

TrustManager[] tms = tmf.getTrustManagers();

SSLContext sslContext = null;

sslContext = SSLContext.getInstance("TLS");

sslContext.init(kms, tms, new SecureRandom());

HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory());`

connection = (HttpsURLConnection) url.openConnection();

现在它可以工作了...... tx

这个线程中有一些很好的信息..链接

于 2016-04-12T17:09:01.300 回答