CAPICOM ma nową wersję z maja - przejrzyj jego dokumentację (poprawki, nowe możliwości)
Może należy zwrócić się do ASP:
- http://classicasp.aspfaq.com/forms/how-do-i-cause/prevent-enter-being-used-to-submit-a-form.html
- http://classicasp.aspfaq.com/forms/how-do-i-upload-files-from-the-client-to-the-server.html
- http://classicasp.aspfaq.com/components/should-i-use-createobject-or-server-createobject.html
- http://www.aspencrypt.com/
- http://www.codeproject.com/dotnet/CapicomUTF8.asp - można wymieniać sobie podpisane dokumenty między Java i .NET. Tej ścieżki jeszcze nie przetestowałem - wysyłanie podpisanego w .NET dokumentu do serwera bazującego na Apache z J2EE lub PHP (z biblioteką ssl). Ale artykuł pokazuje, że mogą być kłopoty (na szczęście daje ich rozwiązanie). W portalu wss.pl są ciekawe artykuły m.in. o podpisie dokumetów przy pomocy już bibliotek .NET, ale jak się ma z wymienialnością z np. Javą (openssl). Ten sam autor ma fundamentalny wkład w wyjaśnienie współpracy (nareszcie mam dobre słowona INEROPERABILITY - koperacje też dobre, ale kojarzy się z koperatywem) między światem kody zarządzalnego (managed) w .NET a kodem COM (z Win32) -http://www.codeproject.com/dotnet/cominterop.asp
- Należy jeszcze raz przetestować przekazywanie plików z podpisem lub samych certyfikatów z MS do Unixa i ich tam obróbka przy pomocy np. biblioteki openssl. Do tej pory stwierdziłem, że udało mi się przenieść i rozpakować pd Unixem certyfikat pobrany z magazynu MS. Należy sprawdzić czy można takie coś zrobić z dokumentem.
- http://www.codeproject.com/csharp/cryptography.asp?df=100&forumid=9241&exp=0&select=686555
- http://blogs.msdn.com/johanl/pages/272768.aspx
- http://www.feed-squirrel.com/index.cfm?evt=viewItem&ID=36269
- http://developers.chrisranjana.com/javascripts/disabling-form-double-submits.html
- http://articles.techrepublic.com.com/5100-22-1044655.html#Listing%20A
- http://articles.techrepublic.com.com/5100-22-5034998.html
- http://www.mail-archive.com/xul-talk@lists.sourceforge.net/msg00524.html
- http://perfectionorvanity.com/2006/03/08/sposoby-odnajdywania-elementow-w-dom/
- http://www.javascriptkit.com/javatutors/dynamiccontent5.shtml
- http://groups.google.pl/group/comp.lang.javascript/browse_thread/thread/226e8a3839892fdb/45e224bdf8a83cf4?lnk=st&q=js+onkeypress+down+arrow&rnum=7&hl=pl#45e224bdf8a83cf4
- podsigillum.prg - podpisuje dowolny ciąg znaków. Podpis jest wykonany przy pomocy biblioteki Sigillum, sprawdzenie przy pomocy standardowej biblioteki CAPICOM. Uwaga, należy dbać o aktualną wersję tego komponentu, szczególnie w przypadku MS Windows Vista
- LPARAMETERS tresc
SET SAFETY off
x = CREATEOBJECT("sigCapix.Crypto")
SET PROCEDURE TO mcapi
certyfikat = x.SelectCertificateFromSystemStore(0x10000, 'My') && Wybór certyfikatu
podpisanaTresc = x.SignDetachedWithInfo(tresc, certyfikat) && Podpis zewnętrzny
STRTOFILE(tresc,"plik.we")
?LEN(podpisanaTresc)
STRTOFILE(podpisanaTresc,"mdane.txt")
?cverify("mdane.txt","plik.we",1) && Weryfikacja przy pomocy MS Windows CAPI
SET SAFETY on - sprawdzpodpiszamow - sprawdza podpis pod dokumentem. Dokument i podpis jest przechowywany w polach (typu blob) w tablicy. W zależności od rodzaju podpisu mamy dwa przypadki
- podpis wewnętrzny - przechowujemy w polu 'tresc' dokument orginalny, w polu 'podpis' ten sam dokument z hashem
- podpis zwenetrzny - podobnie, ale w polu 'podpis' jest przchowywany tylko skrót (hash)
- PARAMETERS klucz
IF PCOUNT()!=1
MESSAGEBOX("Brak parametru - klucz do dokumentu")
RETURN
ENDIF
*klucz = "2007002883"
CLEAR
?"Zamowienie = ",klucz
?weryf("00",klucz,"tresc.htm") && poczatek, tak wyglada dokument z tresci uformowanej przez Wolniwicza
wyjscie = UpobDok(klucz,"eb_zam_dokz","zamid","podpis","podpis.txt") && trzeci
IF AT("-2", wyjscie)=1
??", brak dokumentu..."
RETURN
ENDIF
dlug = VAL(STREXTRACT(wyjscie,"dlug=","["))
SET safety off
STRTOFILE(CHRTRAN(FILETOSTR("podpis.txt"),' ','+'), "podpisOk.txt") && czwarty
SET SAFETY on
IF dlug > 10001
??", sprawdzam podpis wbudowany..."
?cverify_ext("podpisOk.txt","tresc.htm",0) && piaty
ELSE
??", sprawdzam podpis zewnętrzny..."
?cverify_ext("podpisOk.txt","tresc.htm",1) && piaty
ENDIF - Sprwadzenie wybranego certyfikatu z repozytorium MS Windows
- #DEFINE CAPICOM_CHECK_NONE 0
#DEFINE CAPICOM_CHECK_TRUSTED_ROOT 1
#DEFINE CAPICOM_CHECK_TIME_VALIDITY 2
#DEFINE CAPICOM_CHECK_SIGNATURE_VALIDITY 4
#DEFINE CAPICOM_CHECK_ONLINE_REVOCATION_STATUS 8
#DEFINE CAPICOM_CHECK_OFFLINE_REVOCATION_STATUS 16
#DEFINE CAPICOM_CHECK_COMPLETE_CHAIN 32 && Łańcuch jest kompletny
#DEFINE CAPICOM_CHECK_NAME_CONSTRAINTS 64
#DEFINE CAPICOM_CHECK_BASIC_CONSTRAINTS 128
#DEFINE CAPICOM_CHECK_NESTED_VALIDITY_PERIOD 256
#DEFINE CAPICOM_CHECK_ONLINE_ALL 495 && NIe chodzi
#DEFINE CAPICOM_CHECK_OFFLINE_ALL 503
*
clear
Signer = CreateObject("CAPICOM.Signer")
st = CreateObject("CAPICOM.Store")
st.Open(2,"My")
certyfikaty = st.Certificates
IF certyfikaty.Count>0
certyfikaty= certyfikaty.Select("Podpis cyfrowy dokumentu", "Proszę wybrać certyfikat do podpisania nim dokumentu ")
ELSE
MESSAGEBOX("Brak zainstalowanych kluczy i certyfikatów w systemie operacyjnym",16,"Podpis zamówienia")
RETURN "-2"
ENDIF
cert = certyfikaty.item(1)
*
daneCertyfikatu = "Nazwisko = "+cert.GetInfo(6)+CHR(13)+"Dostępny = " + TRANSFORM(cert.PrivateKey.IsAccessible)+ CHR(13)
daneCertyfikatu = daneCertyfikatu + "Czy można go użyć do badania niezaprzeczalności =" + TRANSFORM(cert.KeyUsage.IsNonRepudiationEnabled )+ CHR(13)
daneCertyfikatu = daneCertyfikatu + "Data ważności =" + TRANSFORM(cert.ValidToDate)+ CHR(13)
daneCertyfikatu = daneCertyfikatu + "Czy można sprawdzić listę CRL (zawiera URL) = " + TRANSFORM(cert.KeyUsage.IsCRLSignEnabled)+CHR(13)
cert.IsValid.CheckFlag = CAPICOM_CHECK_TRUSTED_ROOT + CAPICOM_CHECK_TIME_VALIDITY + CAPICOM_CHECK_SIGNATURE_VALIDITY + ;
CAPICOM_CHECK_COMPLETE_CHAIN + CAPICOM_CHECK_NAME_CONSTRAINTS + ;
CAPICOM_CHECK_BASIC_CONSTRAINTS + CAPICOM_CHECK_NESTED_VALIDITY_PERIOD
* Nowość - obiekt CertificateStatus
*susp
IF cert.IsValid.Result
?"Walidacja OK"
ELSE
?"Wystąpił jakiś błąd. "
ENDIF
daneCertyfikatu = daneCertyfikatu + "Czy certyfikat jest ważny = " + ;
TRANSFORM(cert.isValid.Result) + CHR(13)
?"Kod sprawdzenia łańcucha :"
* Przed CHAIN musimy ustawić CheckFlag
Chain = CreateObject("CAPICOM.Chain") && Waznosc calego lancucha
waznosc = Chain.Build(cert)
*susp
kod = Chain.Status()
DO CASE
CASE kod=65
komunikat = "Kod 65(64+1) Certyfikat nieważny (wygasł), status odwołania nieznany (tj. nie jest na liście)"
CASE kod=64
komunikat = "Kod 64 Status odwołania nieznany (tj. nie jest na liście)"
CASE kod=16777280
komunikat = "Kod 16777280(16777216+64) Status odwołania nieznany (tj. nie jest na liście). Nie ma lokalnej listy CRL w repozytorium"
OTHERWISE
komunikat = "Kod :"+ TRANSFORM(kod)
ENDCASE
?komunikat
?"Informacja dodatkowa =" + Chain.ExtendedErrorInfo()
?"Waznosc calego lancucha =" + TRANSFORM(waznosc)
messagebox(daneCertyfikatu)
?"Lista pośrednich certyfikatów:"
iloscElem = Chain.Certificates.Count()
?"Ilość pośrednich certyfikatów :",iloscElem
FOR i=1 TO iloscElem
?Chain.Certificates.Item(i).SubjectNAme
ENDFOR - ss
- ss
Brak komentarzy:
Prześlij komentarz