Форум программистов, компьютерный форум, киберфорум
HCL Notes: Программирование
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/35: Рейтинг темы: голосов - 35, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 27.11.2014
Сообщений: 45
1

Signer странное поведение на некоторых машинах

13.04.2015, 21:46. Показов 7126. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую.
Есть док подписанный ЭЦП. На большинстве машин проверка дока проходит нормально, на паре машин Signer выдает "". Версии клиентов Notes на кривых и нормальных машинах одинаковые.
На кривых машинах делал переустановку Notes, выгружал все процессы, не помогает.
Да, есть одно но. Тот кто подписывал док, кроссертифицирован в нашей АК на сервере.
Цитата из хелпа по сигнеру: "If the signer is not trusted, returns an empty string."
Грешу что клиент не воспринимает подписчика как доверенного, хотя кроссы есть в локальной АК.
Куда копнуть?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.04.2015, 21:46
Ответы с готовыми решениями:

Странное поведение видеокарты после некоторых игр
Здравствуйте.После некоторых игр стареньких в основном и не очень,вентилятор долго не скидывает...

На некоторых машинах некорректно отображаются шрифты приложения
Всем привет. Пишу программу на Visual Studio, по функционалу проблем нет. Но к моему удивлению на...

Ошибка клиент - веб сервис на некоторых машинах
На некоторых клиентских компьютерах при попытке обращения к webservice вылетает следующая ошибка:...

MS Word: на некоторых машинах невозможно подключить некоторые компоненты
Уважаемые знатоки, может кто сталкивался с такой проблемой и знает универсальный путь ее решения. ...

5
0 / 0 / 0
Регистрация: 27.11.2014
Сообщений: 45
13.04.2015, 22:01 2
Дело не в кроссе. Состряпал код, подписал док учеткой из АК, проверил, также возврат ""
0
0 / 0 / 0
Регистрация: 27.11.2014
Сообщений: 45
13.04.2015, 23:08 3
Еще эксперимент не прошел :( Скопировал рабочий клиент, запустил на проблемной машине, ошибка та же.
Значит дело в системе.
0
0 / 0 / 0
Регистрация: 27.11.2014
Сообщений: 45
14.04.2015, 11:39 4
Ошибка системно возникает на машинах с WinXP SP3, на Win8 проблем нет.
0
0 / 0 / 0
Регистрация: 13.04.2013
Сообщений: 198
15.04.2015, 10:48 5
нечто подобное ловил в 6.5.4 +ВинХР
подпись документа на LS и Notes Java API ведут себя по разному. Пришлось для подписи запускать еще и Java agent.
0
0 / 0 / 0
Регистрация: 27.11.2014
Сообщений: 45
07.03.2017, 12:57 6
Задачку так и не решил. Писал в IBM, отправлял логи, ничего.
Может кто-то разбирается глубоко в вопросе? Может быть механизм подписи поменять и поможет?
Вообщем, готов заплатить за решение задачки. Подробности в личке.


--- Добавлено 8 мар 2017. Первое сообщение размещено 7 мар 2017 ---

Вообщем, разобрался.
Был у меня такой код. Взялся он откуда не знаю, но может и с форума:

Код
Public Class SignatureDocument
Private session As NotesSession
Private curdb As NotesDatabase
Private item As NotesItem
Private debugMode As String
Private Log As NotesStream

Sub New ()
Set Me.session = New NotesSession
Set Me.curdb = Me.session.currentDatabase
End Sub
Public Sub sign(doc As NotesDocument)

Подписать
Dim dialog As NotesDocument
fields = doc.GetItemValue("dspSignedFields" )
Set dialog = Me.curdb.createDocument
Call dialog.replaceItemValue("SaveOptions", "0")
ForAll fname In fields
If Not fname = "Signer"  Then
Call Me.copyItemToDialogDoc(doc, dialog, CStr(fname))
End If
End ForAll
Set item = dialog.replaceItemValue("Signer" , Me.signer)
item.IsSigned = True
Set item = dialog.replaceItemValue("SignedFields" , doc.GetItemValue("dspSignedFields" ))
item.IsSigned = True

Set item = dialog.replaceItemValue("$signed" , Now())
item.IsSigned = True
Call dialog.Sign()
If dialog.HasItem("$Signature") Then
Set item = dialog.GetFirstItem("$Signature")
Call item.CopyItemToDocument(doc, "$Signature1" )
Set item = doc.replaceItemValue("Signer" , dialog.GetItemValue("Signer" ))
Set item = doc.replaceItemValue("SignedFields" , dialog.GetItemValue("SignedFields" ))
Set item = dialog.GetFirstItem("$signed" )
Call item.CopyItemToDocument(doc, "$signed" )
Else
Print "Нет поля $Signature"
End If

End Sub
Private Sub copyItemToDialogDoc(doc As NotesDocument, dialog As NotesDocument, fname As String)
If Not doc.hasItem(fname) Then Exit Sub
Set item = doc.GetFirstItem(fname)
Call item.CopyItemToDocument(dialog, fname)
Set item = dialog.GetFirstItem(fname)
item.IsSigned = True
End Sub
Private Function signer As Variant
Dim usernamelist As Variant
usernamelist = Me.session.usernameList
Dim v As Variant
Dim ub%
If UBound(usernamelist) > 0 Then ub% = 1 Else ub% = 0
ReDim v(ub%)
v(0) = usernamelist(0).canonical
If ub% = 1 Then v(1) = usernamelist(1).canonical
signer = v
End Function
Public function verifySign(doc As NotesDocument) As Boolean
verifySign=false
Dim dialog As NotesDocument
fields = doc.GetItemValue("SignedFields" )
Set dialog = Me.curdb.createDocument
Call dialog.replaceItemValue("SaveOptions", "0")
ForAll fname In fields
Call copyItemToDialogDoc(doc, dialog, CStr(fname))
End ForAll
Set item = dialog.replaceItemValue("Signer" , doc.getItemValue("Signer" ))
item.IsSigned = True
Set item = dialog.replaceItemValue("SignedFields" , doc.getItemValue("signedFields" ))
item.IsSigned = True
Set item = dialog.replaceItemValue("$signed" , doc.getItemValue("$signed" ))
item.IsSigned = True
Set item = doc.GetFirstItem("$Signature1" )
Call item.CopyItemToDocument(dialog, "$Signature")
If dialog.IsSigned Then
If dialog.Signer = ""  then Exit function
Dim nam As NotesName
Set nam = Me.session.CreateName(dialog.Signer)
verifySign=true
Else

End If

End function


End Class
И как раз в некоторых случаях код давал signer="" без какой-то логики.

Я решил пойти сначала, и сделал простой код подписи документа целиком.

Код
Sub Click(Source As Button)
Dim ws As New NotesUIWorkspace
Dim doc As NotesDocument
Set doc=ws.CurrentDocument.Document
Call doc.Sign
Call doc.Save(True,False)
End Sub
Проверил на проблемной машине таким кодом

Код
Sub Click(Source As Button)
Dim ws As New NotesUIWorkspace
Dim doc As NotesDocument
Set doc=ws.CurrentDocument.Document
Print doc.Signer
End Sub
Без проблем все сработало как надо, возвращается подписант.
Соответственно, если документ пересохраняется, то signer возвращает пустое значение.
Однако, есть проблемка. Если собакоагентом присвоить значение поля какое-то в док, то подпись не слетает.
Лечится тем, что у поля надо указать свойство на 3-й закладке: sign if mailed or saved in section.

Вообщем, для многих эта инфа уже очевидная, но решил написать. Главное, не мудрить, там где это не надо
0
07.03.2017, 12:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.03.2017, 12:57
Помогаю со студенческими работами здесь

При выполнении батника на некоторых машинах с Windows XP не работает перенаправление вывода команд в NUL
не работает перенаправление >nul проблема возникает на некоторых машинах под управлением рус...

Странное поведение
привет всем. Пишу тут одну работку вот код добавления нового товара. Я использую поле Акция, если...

Странное поведение ПК
Здравствуйте, форумчане! Нужна ваша помощь, ну или на худой конец - консультация. Ситуация...

Странное поведение!
Доброго времени суток! На лицо странное (на мой взгляд) поведение С++ Builder 6. Итак код:...

Странное поведение if
День добрый. Работаю в VS. Столкнулся с тем, что условие if (signal.size() - len_st>0) в коде...

Странное поведение ПК
Конфиг собранного ПК: Мать ASRock z390 PG4 Проц i7-8700 ОЗУ HyperX Predator DDR4 3333MHz 4x8GB...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru