- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们已切换到新的 Microsoft ADFS 服务器,现在我们必须使用 LDAPS(端口 636 上基于 SSL 的 LDAP)。但是,在 PL/SQL 包中,通过添加 DBMS_LDAP.open_ssl (基于 here )我得到:
ORA-31202:DBMS_LDAP:LDAP 客户端/服务器错误:SSL 握手失败
我的故障排除指导我对连接进行 tcpdump 调试,我发现 Oracle (12.1.0.2) DBMS_LDAP 在 SSL 握手上仅使用以下三个密码套件,这些套件都非常旧且不安全,并且不受最新 Microsoft AD 支持。即使我尝试使用 ldap.google.com:636 尝试另一个 12c db (12.1.0.2.0) 并收到相同的错误和相同的密码套件。
Version: TLS 1.2 (0x0303)
Cipher Suite: TLS_DH_anon_WITH_3DES_EDE_CBC_SHA (0x001b)
Cipher Suite: TLS_DH_anon_WITH_RC4_128_MD5 (0x0018)
Cipher Suite: TLS_EMPTY_RENEGOTIATION_INFO_SCSV (0x00ff)
Oracle知识显示很多人都遇到过这个问题(文档ID 19285025.8,文档ID 1561121.1),唯一的建议是补丁“19285025”。我们已经完成了这个补丁,但仍然没有任何进展。我们发现Oracle文档(here)展示了如何配置安全套接字层并通过“netmagr”的帮助添加密码套件,但最终即使我知道这仅适用于oracle DB连接,但它并没有受到影响。现在的问题是?1.如何解决DBMS_LDAP.open_ssl出现“SSL握手失败”的问题?如何为DBMS_LDAP.open_ssl设置不同的密码套件? 2. 有任何使用 LDAPS 的替代 PL/SQL 包吗?或者我们必须使用Java包并将其加载到数据库中?
最佳答案
我已切换到 java 过程而不是 Oracle DBMS_LDAP。它运行良好,不再有 SSL 问题(除了 java 的扩展能力)。
SET SERVEROUTPUT ON SIZE 5000;
CALL dbms_java.set_output(5000);
CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED LDAP AS
import javax.naming.*;
import javax.naming.directory.*;
import java.util.Hashtable;
/**
* Java LDAP Package by ATK, 9/9/2016
*/
class ldap {
public static int ldap_auth(String username, String my_password, String ldap_server) {
Hashtable env = new Hashtable(11);
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, ldap_server ); //example "ldap://ldap.yourcompany.com:636"
env.put(Context.SECURITY_PROTOCOL, "ssl");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "uid=" + username + ",OU=users,DC=company,DC=com");
env.put(Context.SECURITY_CREDENTIALS, my_password);
try {
// Create initial context
DirContext ctx = new InitialDirContext(env);
System.out.println("Connection Successful.");
ctx.close();
return 0;
} catch (NamingException e) {
System.out.println("LDAP Connection: FAILED");
e.printStackTrace();
return -1;
}
}
};
--show errors java source ldap ; -- to check class compile
CREATE OR REPLACE FUNCTION ldap_auth (username in varchar2, my_password in varchar2, ldap_server in varchar2) RETURN NUMBER
AS LANGUAGE JAVA
NAME 'ldap.ldap_auth (java.lang.String, java.lang.String, java.lang.String) return int';
call dbms_java.grant_permission( 'MySchema', 'SYS:java.net.SocketPermission', 'ldap.companyDomain.com', 'resolve' );
call dbms_java.grant_permission( 'MySchema', 'SYS:java.net.SocketPermission', 'ldapqa.companyDomain.com', 'resolve' );
call dbms_java.grant_permission( 'MySchema', 'SYS:java.net.SocketPermission', 'ldapdev.companyDomain.com', 'resolve' );
call dbms_java.grant_permission( 'MySchema', 'SYS:java.net.SocketPermission', '10.14.10.53:636', 'connect,resolve' );
call dbms_java.grant_permission( 'MySchema', 'SYS:java.net.SocketPermission', '10.14.10.54:636', 'connect,resolve' );
call dbms_java.grant_permission( 'MySchema', 'SYS:java.net.SocketPermission', '10.14.10.55:636', 'connect,resolve' );
现在您可以使用以下方法进行测试:
SET SERVEROUTPUT ON SIZE 5000
CALL dbms_java.set_output(0);
declare
l_ret int ;
begin
l_ret := ldap_auth ('myUser', 'myPassword', 'ldap://lds.companyDomain.com:636');
DBMS_OUTPUT.put_line('Return = ' || l_ret );
end;
关于PL/SQL 中的 Oracle DBMS_LDAP.open_ssl 显示错误 : ORA-31202: SSL handshake failed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39381036/
我使用此示例并成功连接到 LDAP 服务器 - http://www.oracle-base.com/articles/9i/ldap-from-plsql-9i.php . SET SERVEROU
我们正在尝试使用针对 Microsoft AD 的 dbms_ldap 对我们的应用程序用户进行身份验证,但我们无法在我们的离岸环境中对其进行测试 我们有三个具体问题 1)如何验证用户是否存在于Mic
我在 11g 数据库中有一个 PL/SQL 包,用于查找各种属性并处理组成员身份等。一个特别的函数是管道函数,它返回函数参数中指定的组的所有成员。它非常适合成员少于 1000 人的团体。在这种情况下,
我们已切换到新的 Microsoft ADFS 服务器,现在我们必须使用 LDAPS(端口 636 上基于 SSL 的 LDAP)。但是,在 PL/SQL 包中,通过添加 DBMS_LDAP.open
我是一名优秀的程序员,十分优秀!