我的同事使用相互身份验证为我们的项目设置了一个(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" />
这里的问题#1
当我添加信任库时,我无法再通过LDAP服务器进行身份验证。它只是说无效的用户或密码。我删除了信任存储..我可以再次验证。因此添加信任库会产生某种影响。
问题#2。当我删除我的LDAP服务器并只使用基本用户注册表...我可以登录...但是当我尝试使用安全网关时,我得到..
[错误] javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure
我已经从安全网关导入了证书,所以不确定我为什么会这样做?
所以有两个问题..使用信任库..我再也无法通过LDAP进行身份验证......第二个...即使在导入所有证书后也无法连接到安全网关......
任何人都使用Bluemix与Java的Secure Gateway(Mutual Auth)成功了吗?
请求的信息(已编辑)
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-----
答案 0 :(得分:0)
终于有了这个工作。
以前的代码..
。 。 。
connection = (HttpsURLConnection) url.openConnection();
其中url是Secure Gateway的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