1

Тема: Цифровая подпись на Lotus Notes

Вот провел исследование поведения цифровой подписи в самой неадекватной среде программирования БД по названием  Lotus Notes:

1.
форма Sign documents that use this form   - нет
поле      item.IsSigned="true"

поле подписывается, но при сохранении подпись исчезает.


2.
форма Sign documents that use this form -  нет
поле sign if mailed or saved in section

поле подписывается, но при сохранении подпись исчезает.


3.
форма Sign documents that use this form   - да
поле      item.IsSigned="true"
поле подписывается, при сохранении подпись заменяется

4.
форма Sign documents that use this form   - да
поле sign if mailed or saved in section
Документ подписывается, но при изменении другим юзером, подпись меняется на нового юзера.
$Signature изменяется.

Без свойства формы "Sign documents that use this form", поле $Signature не появится.
Без этого свойства формы,  item.IsSigned="true" сохраняется у поля в подписываемой секции.
при изменеии любого поля в доке - меняется поле $Signature!

Поделиться

2

Re: Цифровая подпись на Lotus Notes

В общем выкладываю переписку:
Я:
Здравствуйте, прочитал Вашу статью
notesnet.ru/library/docid/2D9986

Есть вопрос - как Вы сделали, чтобы изменении неподписанного поля ,
служебное поле $Signature не изменялось.
Вот описание моей проблемы:
forum.codeby.net/topic34160.html

Поделиться

3

Re: Цифровая подпись на Lotus Notes

Норкин Николай:
Добрый день!

Начать с того, что в моём коде служебное поле $Signature присутствует
только во временном документе, а его содержимое копируется в основной
документ в "несистемное" поле $Signature_1, к примеру
Подписываемые поля также в основном документе избавлены от признака
isSigned, этот признак расставляется для нужных полей непосредственно в
коде подписания/проверки,
а так это обычные поля,
ну если только интерфейсно скрываются (либо hide-when-формулами, либо на
уровне подформ)

Вот и всё
Успехов!

Поделиться

4

Re: Цифровая подпись на Lotus Notes

Я:
Если не сложно, опишите Ваш алгоритм.
По статье и коду не совсем понял...
В идеале было бы здорово получить эту форму в базке..

Поделиться

5

Re: Цифровая подпись на Lotus Notes

Норкин Николай:
> Все равно тогда не понимаю алгоритм.
> Я думал, что Вы при подписи копируете сист. поле $Signature в копию
> $Signature_1.
Переименовываю... ну, почти...

> А при проверке подписи - сравниваете $Signature с  $Signature_1
> И если поля не совпали, то подпись нарушена.
Для проверки - обратно переименовываю... и проверяю (уже системно)...


> Не могу понять как используется и где временный документ.
если кратко, то
1. копирую все нужные к подписи поля во временный документ,
добавляю поля о времени подписания и подписанте (текущем пользователе)
взвожу на всех полях свойство isSigned
2. подписываю временный документ
3. копирую системное поле $Signature в настоящий документ под новым именем
4. копирую содержимое полей о времени подписания и подписанте

Для проверки:
1. копирую все нужные поля в темповый документ
копирую поля о времени и подписанте
взвожу на всех галочку isSigned
2. копирую айтем сподписью в темповый документ под именем (айтема)
$Signature
3. проверяю подпись notesDocument.signer
(то есть, всё должно быть точно таким же - в том числе и порядок добавления
айтемов в темповый документ, как и при подписании)

Всё
Николай

Поделиться

6

Re: Цифровая подпись на Lotus Notes

Поделиться

7

Re: Цифровая подпись на Lotus Notes

Итоги применения ЭЦП в Лотусе:

при подписании дока ставлю флаг IsSigned  подписываемым полям Содержание и приложение  и копирую содержимое $Signature в поле $Sign_2.
проверку ЭЦП делаю так:
востанавливаем поле $Signature из $Sign_2
подписанным полям item.IsSigned = True
doc.Signer - возвращает кто подписал.
в поле DocSigner скинули имя подписавшего.       
и если функция GetDocSigner вернула  DocSigner ="" то подпись нарушена

Глюки ЭЦП Лотуса:
Подпись - 8,5
клиенты - 8,5 или 7,02  - подпись слетает.
подп 7.0.2 - изм в 7.03 , то подпись не нарушается, всё ок.
!!!
если эцп 8,5, то при изменении в 7.0.2 или 7.0.3 подпись слетает.

Поделиться

8

Re: Цифровая подпись на Lotus Notes

Цифровая подпись 2 полей СОДЕРЖАНИЕ и ПРИЛОЖЕНИЯ.
Кнопка "Подписать"

    Dim doc As NotesDocument
    Set doc = uiworkspace.CurrentDocument.Document
    Dim item As NotesItem   
    Dim item2 As NotesItem
    Dim itemTMP As NotesItem   
    If doc.form(0)="VnutrStandart" Then
        Set item = CurDoc.GetFirstItem("СОДЕРЖАНИЕ")
        Set item2 = CurDoc.GetFirstItem("ПРИЛОЖЕНИЯ")
    Else
        Set item = CurDoc.GetFirstItem("СОДЕРЖАНИЕ_")   
        Set item2 = CurDoc.GetFirstItem("ПРИЛОЖЕНИЯ_")
    End If
    item.IsSigned = True    ' указали что эти поля подписываем
    item2.IsSigned = True
    Call CurDoc.Sign ' подписали
    Set itemTMP = CurDoc.GetFirstItem("$Signature")
    Call CurDoc.CopyItem(itemTMP, "$Sign_2")   ' скинули ЭЦП в $Sign_2
    CurDoc.RemoveItem "$Signature"
    item.IsSigned = False ' убрали признак подписываемости полей
    item2.IsSigned = False

Поделиться

9

Re: Цифровая подпись на Lotus Notes

Событие Queryopen.
'ЭЦП
    Dim uiworkspace As New NotesUIWorkspace
    Dim doc As NotesDocument
    Set doc=UIDoc.Document
    If Isnewdoc=False   Then    
        If doc.HasItem("$Sign_2") Then
            Call doc.ReplaceItemValue("DocSigner", GetDocSigner(doc))   
' в DocSigner скинули имя подписавшего.       
' и если функция GetDocSigner вернула  DocSigner ="" то подпись нарушена           
        End If
    End If

Поделиться

10

Re: Цифровая подпись на Lotus Notes

Функция получения подписи, в библиотеке скриптов:

Public Function GetDocSigner(doc As NotesDocument) As String
   
    Dim item As NotesItem
    Dim item2 As NotesItem
    Set item = doc.GetFirstItem("$Sign_2")
    Call doc.CopyItem(item, "$Signature")' востанавливаем поле
   
    If doc.form(0)="VnutrStandart" Then
        Set item = doc.GetFirstItem("СОДЕРЖАНИЕ")
        Set item2 = doc.GetFirstItem("ПРИЛОЖЕНИЯ")
    Else
        Set item = doc.GetFirstItem("СОДЕРЖАНИЕ_")   
        Set item2= doc.GetFirstItem("ПРИЛОЖЕНИЯ_")   
    End If
   
    item.IsSigned = True
    item2.IsSigned = True
    GetDocSigner = doc.Signer  ' внесли имя подписавшего в  GetDocSigner
    item.IsSigned = False
    item2.IsSigned = False
End Function

Поделиться

11

Re: Цифровая подпись на Lotus Notes

В дебагере содержимое $Signature не отображается

пару лет назад тестил ЭЦП.
Подпись - 8,5
клиенты - 8,5 или 7,02
Иначе слетала подпись. Сейчас все ок.

Поделиться

12

Re: Цифровая подпись на Lotus Notes

Поделиться