我的同事使用相互身份验证为我们的项目设置了一个(Bluemix)安全网关。他使用Ruby和CURL对其进行了测试,并且效果很好。但是配置我的Liberty服务器使用它时,我遇到了很多问题。
我使用了here中的说明。
基本上...
要为客户机创建密钥库,请输入以下命令。在以下示例中,创建了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="(&(cn=%v)(objectclass=groupOfUniqueNames))" groupIdMap="*:cn" groupMemberIdMap="groupOfUniqueNames:uniquemember" userFilter="(&(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" />
这是第一期
添加信任存储后,将无法再通过LDAP服务器进行身份验证。它只是说无效的用户或密码。我删除了信任库。.我可以再次进行身份验证。因此,添加信任库会产生某种影响。
第2期。当我删除LDAP服务器并仅使用基本用户注册表时...我可以登录..但是当我尝试使用安全网关时,我得到了..
[err] javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure
我已经从安全网关导入了证书,所以不确定为什么会得到这个?
所以有两个问题..使用信任库..我无法再通过LDAP进行身份验证...,其次..即使导入所有证书,也无法连接到安全网关...
任何人都可以将Bluemix与Java的Secure Gateway(互认)一起使用吗?
要求的信息(已编辑)
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-----
最佳答案
终于让它起作用了。
以前的代码..
。 。 。 。
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
该线程中的一些有用信息。.LINK