如何通过DIIOP获取SSL Domino会话

时间:2013-11-18 08:17:45

标签: java eclipse session ssl lotus-domino

我尝试使用从Eclipse启动的远程Java应用程序连接到Domino服务器。 Domino服务器仅允许SSL连接。

我尝试使用以下代码获取会话。

String[] arg = new String[1];
arg[0] = "-ORBEnableSSLSecurity";
String IOR = NotesFactory.getIOR(DOMINO_SERVER);
session = NotesFactory.createSessionWithIOR(IOR);

我收到以下错误消息:

无法从Domino Server获取IOR:http:///diiop_ior.txt

我还检查了URL是否在浏览器中运行。如果我将URL放在浏览器中,我会从服务器获得正确的响应。

Domino服务器中的TrustedCert.class包含在我的Eclipse项目中。

这里有一些来自“diiopcfg.txt”的配置细节:

  • TCP端口:0已禁用
  • SSL端口:63149已启用
  • 允许站点TCP名称/密码:True
  • 站点TCP匿名允许:错误
  • 允许使用站点SSL名称/密码:True
  • 站点SSL匿名允许:错误
  • 站点多服务器会话身份验证:已禁用

[更新]

启用TCP端口63148,现在我得到一个会话但无法打开数据库。错误消息NotesException:数据库打开失败()只有当我直接访问端口时,才会获得会话对象。

[更新2]

立即开始会话。无法打开数据库。 错误消息:NotesException:数据库...尚未打开。 如果我使用Database对象的“open”方法=>错误消息:数据库打开失败()

Database db = session.getDatabase(DOMINO_SERVER, DOMINO_DATABASE);
db.open();

ACL正确,最大网络名称和密码=读者

知道数据库无法打开的原因。尝试使用相同结果的另一个数据库。

2 个答案:

答案 0 :(得分:2)

尝试以下操作以连接到SSL。

String args[] = new String[1]; 
args[0] = "-ORBEnableSSLSecurity"; 
Session s = NotesFactory.createSession(host, args, user, pwd); 

另一种连接方法:

String args[] = new String[1];
args[0] = "-HTTPEnableSSLSecurity";
String ior = NotesFactory.getIOR(host,args);
s = NotesFactory.createSessionWithIOR(ior, user, pwd);

变量主机应该只是主机名而不是其他内容。你的diiop_ior.txt需要在SSL上可见(所以先检查一下)。

或者,您可以尝试直接访问端口63148。例如。

s = NotesFactory.createSession( "server:63148", user, pwd);

但这取决于服务器配置。

最后,您可以拉出DIIOP_IOR.txt并直接使用它。与之前的替代方案相同的问题。

答案 1 :(得分:0)

很抱歉,这个答案几乎与this answer重复,但非常重要,我认为这篇文章需要引用。

根据我的经验,DIIOP根本不使用SSL / TLS。仅通过SSL / TLS下载DIIOP_IOR.TXT。使用Wireshark或类似方法捕获网络流量并监控:port 63148 or port 63149。 @ michael-schlömp:如果连接是用wireshark加密的话,请你在你的环境中测试一下吗?

Wireshark我们的输出:带用户名和密码的GIOP createSession(用X替换)

0000   00 50 56 69 f5 2b 00 50 56 c0 00 02 08 00 45 00  .PVi.+.PV.....E.
0010   00 c0 0d 06 40 00 80 06 bb ca c0 a8 58 01 c0 a8  ....@.......X...
0020   58 15 d2 e0 f6 ac ef b6 47 e8 13 10 53 10 50 18  X.......G...S.P.
0030   01 00 29 bb 00 00 47 49 4f 50 01 00 00 00 00 00  ..)...GIOP......
0040   00 8c 00 00 00 00 00 00 00 05 01 00 00 00 00 00  ................
0050   00 31 04 38 35 32 35 36 35 31 61 2d 65 63 36 38  .1.8525651a-ec68
0060   2d 31 30 36 63 2d 65 65 65 30 2d 30 30 37 65 32  -106c-eee0-007e2
0070   64 32 32 33 33 62 35 00 4c 6f 74 75 73 4e 4f 49  d2233b5.LotusNOI
0080   01 00 01 00 00 00 00 00 00 0e 63 72 65 61 74 65  ..........create
0090   53 65 73 73 69 6f 6e 00 00 00 00 00 00 00 00 00  Session.........
00a0   00 01 00 00 00 00 00 00 00 01 00 00 00 0f 00 00  ................
00b0   00 06 00 61 00 64 00 6d 00 69 00 6e 00 00 00 00  ...a.d.m.i.n....
00c0   00 06 00 XX XX XX XX XX XX XX XX XX XX 00        ...XXXXXXXXXX.

使用的Java代码:

_diiop_args = new String[]{"-ORBEnableSSLSecurity", "-HTTPEnableSSLSecurity"}; 
String ior = NotesFactory.getIOR(_diiop_host + ":" + _diiop_port, 
    _diiop_args, _user_name, _user_pass);
_session = NotesFactory.createSessionWithIOR(ior, _user_name, _user_pass);

如果您使用ILU IOR Parser下载并分析DIIOP_IOR.TXT,您会看到IOR文件中没有SSL / TLS信息或端口。

仅限SSL / TLS版本:

object key is <#048525651a-ec68-106c-eee0-007e2d2233b5#00LotusNOI#01#00#01>;
 no trustworthy most-specific-type info; unrecognized ORB type;
 reachable with IIOP 1.1 at host "testdom01.jjtest.site", port 0

SSL / TLS和非SSL / TLS版本:

object key is <#048525651a-ec68-106c-eee0-007e2d2233b5#00LotusNOI#01#00#01>;
 no trustworthy most-specific-type info; unrecognized ORB type;
 reachable with IIOP 1.1 at host "testdom01.jjtest.site", port 63148