- CAPICOM posiada wiele ukrytych perełek chociaż szkoda, że sie go wycofuje
- Pożyteczny ustawiacz - EnablePromptForCertificateUI - czy wyświetlać zapytanie o certyf. w formie dialogu UI
- Obiekty w starym CAPICOM (nowy jest zalecany i dostępny tu - [SignedCms Class in theSystem.Security.Cryptography.Pkcs namespace.]:
- Certificate Store Objects - Przechowalnia certyfikatów
- Certificate Store Objects
- Digital Signature Objects - cytat ze strony MS:
The SignedData object provides properties and methods to establish the content to be signed with a digital signature, to sign or cosign data digitally, and to verify the digital signature of signed data. The signed message is in PKCS #7 format. A data signature, if verified, proves the association between a signer and data and shows that the data was not changed in any way after the signature was created. Uwaga zwracają one łańcuch znaków (string), który może być zakodowany zgodnie z CAPICOM_ENCODING_TYPE domyślnie jest to CAPICOM_ENCODE_BASE64 (=0)
- Metody:
- CoSign - tworzy podpis cyfrowy pod uprzednio podpisaną zawartością. Ma postać:
Function CoSign( _
[ ByVal Signer As Signer ], _
[ ByVal EncodingType As CAPICOM_ENCODING_TYPE ] _
) As String- Sign - tworzy/lub zastępuje i zwraca podpis (SHA1) zawartość pola Content. Pole Content przed podpisem musi być wypełnione. Podpisywanie polega na obliczeniu skrótu do zawartości dokumentu (tzw. hash) i nastepnie zaszyfrowaniu (encode) go kluczem prywatnym pochodzącym z certyfikatu podpisującego (poświadczajacym niezbicie jego tożsamość). Ma postać:
Function Sign( _
[ ByVal Signer As Signer ], _
[ ByVal bDetached As Boolean ], _
[ ByVal EncodingType As CAPICOM_ENCODING_TYPE ] _
) As String- Standardowo bDetached = false (sygnatura będzie wbudowana w treść dokumentu), gdy =true to powstanie nowy dokument związany z dokumentem podstawowym (tym do podpisania) i bedzie zawierał tylko podpis. Trzeci parametr jest zbędny.
- Verify - zwraca łańcuch zakodowanych danych. Proces najbardziej skomplikowany, polega na rozszyfrowaniu skrótu zawartości podpisanej. Do rozszyfrowania tego skrótu służy klucz publiczny certyfikatu. Jest on porównywany ze skrótem zawartości podpisywanej (oblicza się go tu ad-hoc). Te dwa skróty muszą być zgodne. Świadczy to o tym, że zawartość dokumentu się nie zmieniła. Dodatkowo budowany jest łańcuch ceryfikatów (builds a certificate chain ) w celu weryfikacji używanych do podpisu i sprawdzenia ceryfikatów (dzięki tem sprawdza się czy dokument podpisała właściwa osoba - uprawniona do tego). Parametry:
- SignedMessage - podpisany skrót dokumentu którego poprawność sprawdzamy
- bDetached - gdy =true, sprawdzamy dokument z podpisem zewnętrznym (przechowywanym w oddzielnym pliku), do weryfikacji potrzebna jest zawartość orginalnego (podpisywanego) dokumentu. Domyślnie =false.
- VerifyFlag - sprawdzać tylko sygnaturę (prawidłowość podpisu), czy też sprawdzać jeszcze dodatkowo certyfikaty którymi został dokument podpisany (CAPICOM_VERIFY_SIGNATURE_AND_CERTIFICATE == 1 i jest domyślnie przyjęta)
- SignedMessage - podpisany skrót dokumentu którego poprawność sprawdzamy
- Ma postać:
Function Verify( _
ByVal SignedMessage As String, _
[ ByVal bDetached As Boolean ], _
[ ByVal VerifyFlag As CAPICOM_SIGNED_DATA_VERIFY_FLAG ] _
) As String
- CoSign - tworzy podpis cyfrowy pod uprzednio podpisaną zawartością. Ma postać:
- Właściwości:
- Certificates
- Content
- Signers
- Certificates
- Metody:
- Enveloped Data Objects
- Data Encryption Objects
- Auxiliary Objects
- Certificate Enrollment Objects
- Certificate Store Objects - Przechowalnia certyfikatów
- Każdy z nich ma pod obiekty, a one mają metody i właściwości.
- Sprawdzanie certyfikatów, to cała sztuka. Zwykle się to robi poprzez ustawienia CheckFlag.
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
Stała CAPICOM_CHECK_OFFLINE_REVOCATION_STATUS odpowiada za sprawdzenie offline, wtedy korzysta się z listy CRL lokalnej (ściagniętej do repozytorium). To powinno działać - http://support.microsoft.com/kb/304298
Podobnie można postąpić w przypadku sprawdzania danych już podpisanych (wystarczy z nich wyłuskać kolekcję certyfikatów - Certificates)
Inne przykłady - http://www.ureader.com/msg/165973.aspx
Lista dyskusyjna - http://www.microsoft.com/communities/newsgroups/list/en-us/default.aspx?guid=34eeafce-b0e4-4356-9b37-6182f1028ef0
Domyślne sprawdzenie - The default value for for Certificate.IsValid() is CAPICOM_CHECK_SIGNATURE_VALIDITY, CAPICOM_CHECK_TIME_VALIDITY,
CAPICOM_CHECK_TRUSTED_ROOT, and CAPICOM_CHECK_COMPLETE_CHAINDump - CAPICOM_CHECK_ONLINE_ALL):
The values of the CAPICOM_CHECK_FLAG Enum are: (na podstawie - http://msdn.microsoft.com/library/default.asp?url=/library/en-us/seccrypto/security/certificatestatus_checkflag.asp
0 CAPICOM_CHECK_NONE
1 CAPICOM_CHECK_TRUSTED_ROOT
10 CAPICOM_CHECK_TIME_VALIDITY
100 CAPICOM_CHECK_SIGNATURE_VALIDITY
1000 CAPICOM_CHECK_ONLINE_REVOCATION_STATUS
10000 CAPICOM_CHECK_OFFLINE_REVOCATION_STATUS
100000 CAPICOM_CHECK_COMPLETE_CHAIN
1000000 CAPICOM_CHECK_NAME_CONSTRAINTS
10000000 CAPICOM_CHECK_BASIC_CONSTRAINTS
100000000 CAPICOM_CHECK_NESTED_VALIDITY_PERIOD
111101111 CAPICOM_CHECK_ONLINE_ALL
111110111 CAPICOM_CHECK_OFFLINE_ALL
111101111 Default flag propertyPomysł jest taki: pobierać z internetu CRL-e, ładować je do lokalnego repozytorium i sprawdzać lokalnie OFFLINE
Z list dyskusyjnych:
"Satish" <Satish@discussions.microsoft.com> wrote in message
news:996A03DA-8469-4EEB-9AE2-6643670DCAFA@microsoft.com...
> I'm a trifle noob to Capicom, so someone please help me out.
>
> I'm using Capicom.EncryptedData's SetSecret() and Encrypt().
>
> According to the docs
> http://msdn2.microsoft.com/en-us/library/aa382015.aspx, SetSecret()
> derives
> the "session key", which I believe is the symmetric key.
>
> Is there a way to *export* this key so that I can use it with another
> crypto
> provider for decrypting data?
The construction of a Capicom EncryptedData object is not documented in a
platform-neutral way.
See http://msdn2.microsoft.com/en-us/library/aa382010.aspx, where it says:
"Note CAPICOM does not support the PKCS #7 EncryptedData content type but
uses a nonstandard ASN structure for EncryptedData. Therefore, only CAPICOM
can decrypt a CAPICOM EncryptedData object."Inny ciekawy post - An OASIS TC is currently toying with the idea that MSIE can,
without adding any native extension code, perform XML Signatures and
possibly also XML Encryption, by an invocation from a web page:
http://www.oasis-open.org/committees/download.php/16304/agsc-tpki-requirements-00.txt
To my knowledge this is not the case. You have to use a Java
applet, install CAPICOM, or something similar in order to perform
signature or encryption operations in the browser environment.
Could somebody ON THIS LIST (not off-list) verify (or not) this statement?
Anders RundgrenDziwna składanka - http://forums.sun.com/thread.jspa?threadID=5309977 - weryfikacja danych podpisanych przez CAPICOM na platformie Java:
Inne http://msdn.microsoft.com/en-us/library/aa377635(VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa378126(VS.85).aspx
http://www.sdmediagroup.com/reg/sap/sap7.pdf
sobota, grudnia 13, 2008
Untitled
Pracowita sobota:
=============
Subskrybuj:
Komentarze do posta (Atom)
Brak komentarzy:
Prześlij komentarz