Autor Téma: Certifikát ako zdroj licenčných údajov  (Přečteno 878 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4426
  • Karma: 39
    • Verze Delphi: XE7 professional
Certifikát ako zdroj licenčných údajov
« kdy: 20-06-2019, 11:06:46 »
Som v tom totálny laik. Preto taká otázka:
Vlastním TMS Cryptography Pack a Obsidium Lite. Problém je v tom, že v certifikáte vytvorenom v Obsidium je dostupných málo údajov. V TMS ich je podstatne viac.
Je možné tieto certifikáty vzájomne zameniť? Presnejšie certifikát TMS použiť pre "Obsidium", tak aby som mal prístup k všetkým údajom.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4426
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #1 kdy: 21-06-2019, 12:17:26 »
Už som to pochopil. Nemám čo meniť.
No vyskočil mi problém s diakritikou. Na vytvorenie certifikátu som použil free X509v3CertificateGenerator.exe zo stránky TMS. Že má pre AlternativeName1 až 6 prehodené poradie ma neštve.
Ale diakritika je problém. Ak to pri načítaní nechám v pôvodnom tvare (string), tak mám (klasicky šžť...) prázdne znaky. Ak použijem konverziu AnisString(), tak dostanem otázniky.
Text ŠŽ mám uložený ako $#008A$#008A.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4426
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #2 kdy: 21-06-2019, 22:07:45 »
Žiaden návrh? Všetky moje jednoduché pokusy zlyhali. Rôzne spôsoby pretypovania. Skoro vždy som dostával rovnaké výsledky. Nerád by som to mal bez diakritiky. Pôsobí to viac než divne.
Vôbec netuším, čo vlastne znamená $#008A.
  • $ = šestnástková sústava
  • # - netuším
  • 008A - Aha, našiel som Unicode Hex 0x8A
string je alias pre UnicodeString. Čo s tým treba urobiť aby to bolo správne?
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1432
  • Karma: 34
    • Pepak.net
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #3 kdy: 22-06-2019, 06:00:28 »
Pravděpodobně tomu předáváš češtinu ve špatném kódování, tudíž se znaky převedou na "otazník ve čtverečku" na zvýraznění, že jde o neplatný znak. Začni tím, že uděláš certifikát bez českých (a slovenských) znaků, jestli se ti udělá správně, a teprve potom řeš češtinu. Očekávám, že zjistíš, že to chce vstup ne v ANSI, ale v UTF8 (použij UTF8Encode).

Offline geby

  • Plnoletý
  • ***
  • Příspěvků: 209
  • Karma: 16
    • Verze Delphi: 7, 2007, XE2, 10.2
    • Synapse
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #4 kdy: 22-06-2019, 06:05:36 »
...pokud ale na to generování nevolá externí exe, pak záleží na konkrétním způsobu volání. Třeba to může vyžadovat převod na OEM kódování.

Ale o tom si tu můžeme teoreticky tlachat, dokud nebudou poskytnuty konkrétní informace o způsobu generování.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4426
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #5 kdy: 22-06-2019, 08:57:28 »
Bez diakritiky to funguje.
Generoval som to pomocou *.exe aj programovo. Výsledok bol rovnaký. Vlastnosti generátora certifikátu sú string + vlastnosť Unicode je noUni. Pri programovom generovaní som tie texty zadal priamo do komponentu. Skúsim to čo píše pepak - upraviť vstup.
Kód: Delphi [Vybrat]
  1.     MyGenerator := TX509Certificate.Create;
  2.     MyGenerator.KeyFilePath := 'd:\Dokumenty\Delphi XE7\Component Testing\\mykey.key';
  3.     MyGenerator.CrtFilePath := 'd:\Dokumenty\Delphi XE7\Component Testing\\mycsr.csr';
  4.     MyGenerator.signatureAlgorithm := TSignAlgo.sa_sha256rsa;
  5.     MyGenerator.BitSizeEncryptionAlgorithm := 2048;
  6.     MyGenerator.countryName := 'SK';
  7.     MyGenerator.stateName := 'Nouvelle-Aquitaine';
  8.     MyGenerator.localityName := 'Bordeaux';
  9.     MyGenerator.OrganizationName := 'Cyberens';
  10.     MyGenerator.commonName := 'Jasot certificate';
  11.     MyGenerator.AltName1 := **('Name 1 8ščťžýáíé8');  // Tu to testujem
  12.     MyGenerator.GenerateSelfSigned;
**Skúsil som UTF8Encode, AnsiString, Utf8ToString. Bezvýsledne. Výsledok je rovnaký. Nastavenie kódovej stránky som nenašiel.

Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2593
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #6 kdy: 22-06-2019, 12:47:36 »
Skúsim to čo píše pepak - upraviť vstup.
To by podle mela byt zalezitost implementace toho TX509Certificate. Co to vlastne je zac? V Delphi je standardne v DBXCommon stejnojmenna abstraktni trida, kterou pouziva napr. Indy v DBXCommonIndy...

Jinak kdyz zadam cestinu do OpenSsl.exe, tak ten ty NON-ASCII znaky koduje zrejme v ANSI, kazdy znak jako \xHH. Mozna ze i tvoje o $#008A je nejake unicode kodovani.
Kdyz si nechas vypsat obsah tech poli, tak co dostanes?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4426
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #7 kdy: 22-06-2019, 21:02:01 »
Citace
Kdyz si nechas vypsat obsah tech poli, tak co dostanes?
vstup
Kód: Delphi [Vybrat]
  1. MyGenerator.AltName1 := 'Name 1 6ščťžýáíé6';
Výstup
Kód: Delphi [Vybrat]
  1. Name 1 6蝞ýáíé6
Pri krokovaní viď obrázok.
« Poslední změna: 22-06-2019, 21:04:51 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2593
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #8 kdy: 23-06-2019, 08:33:12 »
Citace
Kdyz si nechas vypsat obsah tech poli, tak co dostanes?
vstup
Kód: Delphi [Vybrat]
  1. MyGenerator.AltName1 := 'Name 1 6ščťžýáíé6';
Výstup
Kód: Delphi [Vybrat]
  1. Name 1 6蝞ýáíé6
Pri krokovaní viď obrázok.
No je otazka, co je ve skutecnosti uvnitr. Ale v kazdem pripade budes muset nastudovat to, cim se ten certifikat snazis vytvorit, to nema obecnou platnost a existuje hafo moznosti.

Treba kdyz u OpenSSL dam parameter -nameopt utf8 a ty texty dodam v kodovani UTF-8, tak pak je uvnitr certifikatu tohle>
CN=Name 1 6\xC5\xA1\xC4\x8D\xC5\xA5\xC5\xBE\xC3\xBD\xC3\xA1\xC3\xAD\xC3\xA96

A pri cteni v programu bych to musel znak po znaku projit, jakmile bych narazil na neescapovane '\', tak bych hodnoty xHH musel prevest z hexa do bytu a ten pridat na konec to UTF8 stringu
no pak jednoduse prest UTF8String na UnicodeString.

Je otazka, co tam skutecne mas v tom certifikatu, protoze tam urcite nebudes mit Delphi zapis #$HHHH jak ti to ukazuje debugger a to je treba zjistit, s OpenSSL bych na to pouzil prikaz
openssl x509 -in cert.pem -text -noout

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4426
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #9 kdy: 23-06-2019, 09:00:47 »
Práve som ukončil laické prechádzanie zdrojákov. Tu je môj upravený výsledok. Ako som najlepšie vedel. Vyhodil som všetko čo podľa mňa sa netýka predmetu otázky. Či to niekto bude čítať...
Kód: Delphi [Vybrat]
  1. unit MiscObj;
  2. type
  3.   TConvertType = (base64, hexa, base64url, base32, raw);
  4.   TUnicode = (noUni, yesUni);
  5.  
  6.  
  7.     property Unicode: TUnicode read FUni write FUni default yesUni;
  8.  
  9.  
  10. unit X509Obj;
  11.   TX509CSR = class(TTMSCryptBase)
  12.   private
  13.     FUni: TUnicode;
  14.     FAltName1: string;
  15.   published
  16.     property AltName1: string read FAltName1 write FAltName1;
  17.  
  18.  
  19. procedure TX509Certificate.GenerateSelfSigned;
  20. var
  21.   prime1, prime2, dp, dq, qinv: TRSAarray;
  22.   KeyFilePathChar, CertFilePathChar, modulus, privateExponent, publicExponent,
  23.     publicKey, PrivateKey: PAnsiChar;
  24.   conv: TConvert;
  25.   err: Integer;
  26.   information: _CERTINFSTRUCT;
  27.   S: TStringList;
  28. begin
  29.   conv := TConvert.Create;
  30.   information.NBAN := 0;
  31.   information.AN := GetMemory(6);
  32.   try
  33.     information.CouN := conv.StringToBufferA(FSubjectCountryName, FUni);...
  34.     if FAltName1 <> '' then
  35.     begin
  36.       information.NBAN := information.NBAN + 1;
  37.       information.AN[information.NBAN - 1] := conv.StringToBufferA(FAltName1, FUni);
  38.     end;...
  39. end;
  40.  
  41.  
  42. unit MiscObj;
  43. function TConvert.StringToBuffer(str: string; u: TUnicode; var msgLen: Integer): PByte;
  44. var
  45.   t: TArray<Byte>;
  46. {$IFEND}
  47. begin
  48. {$IF (defined(MSWINDOWS) or defined(MACOS)) and (not defined(IOS))}
  49.   if u = yesUni then
  50.   begin
  51.     Result := UnicodeToPAnsiChar(str);
  52.     msgLen := PAnsiCharFromUnicodeLength(str);
  53.   end
  54.   else
  55.   begin
  56.     Result := StringToPAnsiChar(str);
  57.     msgLen := Length(str);
  58.   end;
  59. end;
  60.  
  61.  
  62. function TConvert.StringToPAnsiChar(str: string): PAnsiChar;
  63. var
  64.   t: TArray<Byte>;
  65. begin
  66.   t := StringToByteArray(str);
  67.   Result := GetMemory((Length(t) + 1) * SizeOf(AnsiChar));
  68.   Move(t[Low(t)], Result^, Length(t));
  69.   Result[High(t) + 1] := #0;
  70. end;
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2593
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #10 kdy: 23-06-2019, 11:56:44 »
No a jeste si najdi, co s tim dela, kdyz to cte zpatky, aby ses podival na presne kodovan  a z toho to dostal zpatky do stringu.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4426
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #11 kdy: 23-06-2019, 18:25:08 »
Tak som sa na to pozrel. Výsledok je v prílohe (152 riadkov). Pre mňa to je španielska dedina :'(
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4426
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #12 kdy: 24-06-2019, 11:35:37 »
Skúšam čo viem, ale nemám šancu:
Kód: Delphi [Vybrat]
  1. MyCertifikate.Unicode := noUni;
  2.           ('Name 1 XľščťžýáíéX')                  Name 1 X¾šèžýáíéX
  3.  
  4.  
  5. AnsiString('Name 1 XľščťžýáíéX')                  Name 1 X¾šèžýáíéX
  6. UTF8
  7. AnsiToUtf8('Name 1 XľščťžýáíéX')                  Name 1 X¾šèžýáíéX
  8. UTF8ToUnicodeString('Name 1 XľščťžýáíéX')         Name 1 X???????X
  9. UTF8Decode('Name 1 XľščťžýáíéX')                  Name 1 X???????X
  10.  
  11.  
  12. Utf8ToAnsi('Name 1 XľščťžýáíéX')                  Name 1 X???????X
  13. Utf8ToAnsi('Name 1 XľščťžýáíéX')  AnsiString()    Name 1 X???????X
  14.  
  15.  
  16. UTF8Encode('Name 1 XľščťžýáíéX')                  Name 1 X¾šèžýáíéX
  17. UTF8Encode('Name 1 XľščťžýáíéX')  UTF8Decode()    Name 1 X3?e??����X
  18. UTF8Encode('Name 1 XľščťžýáíéX')  UTF8ToString()  Name 1 X3?e??����X
  19. UTF8Encode('Name 1 XľščťžýáíéX')  Utf8ToAnsi()    Name 1 X3?e??����X
  20.  
  21.  
  22. MyCertifikate.Unicode := yesUni;
  23. ('Name 1 XľščťžýáíéX')                           Name 1 XľščťžýáíéX
  24. AnsiString('Name 1 XľščťžýáíéX')                 Name 1 XľščťžýáíéX
  25.  
  26.  
  27. AnsiToUtf8('Name 1 XľščťžýáíéX')                 Name 1 XľščťžýáíéX
  28. UTF8ToUnicodeString('Name 1 XľščťžýáíéX')        Name 1 X��蝞����X
  29. UTF8Decode('Name 1 XľščťžýáíéX')                 Name 1 X��蝞����X
  30.  
  31.  
  32. Utf8ToAnsi('Name 1 XľščťžýáíéX')                 Name 1 X��蝞����X
  33. Utf8ToAnsi('Name 1 XľščťžýáíéX')  AnsiString()   Name 1 Xi?1i?1e??i?1i?1i?1i?1X
  34.  
  35.  
  36. UTF8Encode('Name 1 XľščťžýáíéX')                 Name 1 XľščťžýáíéX
  37. UTF8Encode('Name 1 XľščťžýáíéX')  UTF8Decode()   Name 1 X�3A!�?AYA3A1A!A�A�X
Taký istý problém som mal(mám) pri TAdvRichEditor. Tam ma odbili, že používam zlú kódovú stránku ??? :o  Ak im napíšem, tak predpokladám takú istú reakciu. Ja mám podozrenie, že skôr kašlú na naše kódové stránky.
Prikladám to aj v txt. Tam to vyzerá trochu ináč.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2593
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #13 kdy: 24-06-2019, 16:05:39 »
Skúšam čo viem, ale nemám šancu
Jen jsem to zbezne probehnul a zda se mi, ze to prevadeji na posloupnost bytu a zpatky, takze bych zkusil neco takoveho:
Kód: Delphi [Vybrat]
  1. var
  2.   unicode: UnicodeString;
  3.   utf8: UTF8string;
  4. begin
  5.   unicode := 'Name 1 6ščťžýáíé6';
  6.   utf8 := Utf8Encode(unicode);
  7.   cert.Unicode := noUnit;
  8.   cert.AltName1 := utf8;
  9.   ...
  10.   utf8 := AltName1;
  11.   unicode := Utf8ToString(utf8);
  12.  
A kdyz to nepomuze, tak jedine ladit a divat se, co presne za data tam leze.

Offline miroB

  • Guru
  • *****
  • Příspěvků: 519
  • Karma: 17
    • Verze Delphi: D1,2,3,4,7,2005,2009, XE8,S,B,T10.2.2 Pro
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #14 kdy: 24-06-2019, 18:39:54 »
Neviem, či je to práve vhodné v danom prípade.
Ale ak má programátor na starosti vstup aj výstup, potom je možné obísť rôzne interné kódovania tak, že sa rovno podstrčí text vo formáte bytes. Teda unicodeString sa vopred prevedie na TBytes (Unicode na Bytes, textové funkcie nenosím v hlave, keď riešim iné).
Vo formáte bytes sa text vloží napríklad do komprimátora. Rozbalený sa zase vráti ako bytes. No a užívateľ si opačnou funkciu upraví text na čitateľný unicode.
Nejde to všade, ale ak to ide, je to spoľahlivá cesta, ktorá nesklame.
Výhoda je samozrejme, keď sú texty krátke, potom nepríde k veľkým konverziám.
Ale ak sa certifikáty riešia pre tretiu stranu, tak toto riešenie nebude vhodné. Nemôžu tam vyskočiť hieroglify.
Problém certifikátov ma ešte len čaká. Budem poctivo sledovať vývoj.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4426
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #15 kdy: 24-06-2019, 19:06:46 »
To pdf1957 - nech robím akékoľvek konverzie, okrem ansi a spol., tak stále dostávam rovnaký a žiaľ aj nesprávny výsledok.
To miroB
Citace
Teda unicodeString sa vopred prevedie na TBytes
V živote som nič také nerobil, takže netuším ako na to ??? 
Oni to všetko ženú, viac krát, cez Bytes a buffer.
Najviac ma zarazilo, že hneď prvý riadok v Decode je "FileToHexStr(@CertificateContent, @len, FCrtStr);". Ďalej pracujú len s CertificateContent.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4426
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #16 kdy: 24-06-2019, 19:07:48 »
Asi napíšem na podporu s tým, aby ma neoblbovali zlou kódovou stránkou.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2593
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #17 kdy: 24-06-2019, 21:24:23 »
To pdf1957 - nech robím akékoľvek konverzie, okrem ansi a spol., tak stále dostávam rovnaký a žiaľ aj nesprávny výsledok.
Tak se podivej, com mas v tom certifikatu. Me se nechce zabyvatr se nejakou divnou tridou, ale kdyz pri vytvareni certifikatu ten text napisu v UTF8 kodovani, tak ho taky v takovem kodovani v certifikatu vidim:

        X509v3 extensions:
            X509v3 Subject Alternative Name:
                DNS:6ščťžýáíé6-domain.com, DNS:www.your-new-domain.com

Coz znamena, ze treba OpenSSL si s nejakym kodovanim 2x hlavu nelame: AltNames by mely byt v kodovani IA5 (ASCII) a pokud obsahuji non-ASCII znaky, tak v kodovani ACE.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4426
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #18 kdy: 24-06-2019, 21:53:21 »
Nie je tam nič čo by dávalo nejaký zmysel. Ale nie je tam vložené UTF8.
« Poslední změna: 24-06-2019, 21:55:50 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4426
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #19 kdy: 24-06-2019, 21:59:48 »
Ani s UTF8
-----BEGIN CERTIFICATE-----
MIID/DCCAuSgAwIBAgIMDhNuAMHGqgDDLwwAMA0GCQAAAAAAAAAAAAUAMIGNMQsw
CQYDVQQGEwJTSzETMBEGA1UECBMKU3RhdGUgbmFtZTEWMBQGA1UEBxMNTG9jYWxp
dHkgbmFtZTEaMBgGA1UEChMRT3JnYW5pemF0aW9uIG5hbWUxHzAdBgNVBAsTFk9y
Z2FuaXphdGlvbiB1bml0IG5hbWUxFDASBgNVBAMTC0NvbW1vbiBuYW1lMB4XDTE5
MDYyNDE5NTc1N1oXDTIwMDYyNDE5NTc1N1owgY0xCzAJBgNVBAYTAlNLMRMwEQYD
VQQIEwpTdGF0ZSBuYW1lMRYwFAYDVQQHEw1Mb2NhbGl0eSBuYW1lMRowGAYDVQQK
ExFPcmdhbml6YXRpb24gbmFtZTEfMB0GA1UECxMWT3JnYW5pemF0aW9uIHVuaXQg
bmFtZTEUMBIGA1UEAxMLQ29tbW9uIG5hbWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB
DwAwggEKAoIBAQCkMWzmbs1vnon6eJm3PGgVuSSiSji4A4igxeY22QR629ua61G/
Ox56ZJ6Wq32uq0qCIfUd52V8+CNDiq1Ze7XWeW0J8OB211YAqSGPfpqzH6xvZqGr
sTTontgenC8HzXjoG9l0mJdviHrMmLzgtMMBytsNWtgXd++YYBMgxVjHsnzQU4tu
V+M82IU9KoPEo/AtgzwdQB3KSvBcryo+Iod9elh+R22QeHjFZtLd/UhjO/E2hemN
7gr01sLXigYiyby5/WIyZ8MDkU03CTPhvTtJUAo18AZ8sOvgFl7akyI0XhLT9NlL
tDghlf2dnvJvCI8Cuw/yV8Dqk4CyiuZKA59RAgMBAAGjWjBYMBIGA1UdDgQLBAkw
BwQFMAMBAQAwEAYDVR0jBAkwBwQFMAMBAQAwDAYDVR0TBAUwAwEBADAiBgNVHREE
GzAZghdOYW1lIDEg9L6aLeidni3y7+At/eHt6TANBgkAAAAAAAAAAAMFAAOCAQEA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAA==
 -----END CERTIFICATE-----
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2593
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #20 kdy: 24-06-2019, 22:15:27 »
Ani s UTF8
No ano, certifikat je binarni struklura, tady zakodovana v Base64. Ty to nejakym nastrojem musis transformovat do textove podoby, napr. v openssl.exe prikaz
Kód: Delphi [Vybrat]
  1. openssl x509  -in cert.pem -out cert.txt -text -nameopt multiline,show_type
vytvori z neceho takoveho, co jsi poslal, toto (volba show_type zobrazi u kazdeho regulerni pole, jak je to pole zakodovano)
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            82:fd:95:45:03:16:38:a3
        Signature Algorithm: sha1WithRSAEncryption
        Issuer:
            countryName               = PRINTABLESTRING:CZ
            stateOrProvinceName       = T61STRING:\C4\8Cesk\C3\A1 republika
            localityName              = PRINTABLESTRING:Praha
            organizationName          = T61STRING:Pejsek&Ko\C4\8Di\C4\8Dka
            organizationalUnitName    = T61STRING:Peka\C5\99stv\C3\AD
            commonName                = T61STRING:Name 1 6\C5\A1\C4\8D\C5\A5\C5\BE\C3\BD\C3\A1\C3\AD\C3\A96
            emailAddress              = IA5STRING:info@pekarstvi.com
        Validity
            Not Before: Jun 24 17:58:21 2019 GMT
            Not After : Jun 23 17:58:21 2020 GMT
        Subject:
            countryName               = PRINTABLESTRING:CZ
            stateOrProvinceName       = T61STRING:\C4\8Cesk\C3\A1 republika
            localityName              = PRINTABLESTRING:Praha
            organizationName          = T61STRING:Pejsek&Ko\C4\8Di\C4\8Dka
            organizationalUnitName    = T61STRING:Peka\C5\99stv\C3\AD
            commonName                = T61STRING:Name 1 6\C5\A1\C4\8D\C5\A5\C5\BE\C3\BD\C3\A1\C3\AD\C3\A96
            emailAddress              = IA5STRING:info@pekarstvi.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
            RSA Public Key: (4096 bit)
                Modulus (4096 bit):
                    00:a7:16:30:20:f6:25:ce:f7:8e:39:62:ce:51:84:
                    84:2a:87:0a:70:a6:84:90:d6:21:73:4b:e6:a3:6c:
                    ...

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1432
  • Karma: 34
    • Pepak.net
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #21 kdy: 25-06-2019, 05:40:53 »
No a v pf1957ově výpisu vidíme, že to je UTF8. Nebude nakonec problém spíš v tom, jak ty údaje čteš/vypisuješ, než v tom, jak je vytváříš/zapisuješ?

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2593
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #22 kdy: 25-06-2019, 06:27:43 »
No a v pf1957ově výpisu vidíme, že to je UTF8. Nebude nakonec problém spíš v tom, jak ty údaje čteš/vypisuješ, než v tom, jak je vytváříš/zapisuješ?
No k tomu se ho snazim dotlacit, aby presne zjistil a) co ma v tom certifikatu a b) co presne z nej dostane, ale skutecne na  raw urovni, nezkreslene zobrazovanim textu na urovni bubaku apod. - buhvi co je to za hodnoty, co Stano posila...


Jen doplnim, ze jsem mu to UTF8 predepsal pri vytvareni certifikatu a config soubor s temi testovanymi hodnotami jsem editoval PSPadem s nastavenym kodovanim UTF8 no BOM:
Kód: Delphi [Vybrat]
  1. openssl req -config test.cnf -x509 -nameopt utf8 -newkey rsa:4096 ...

Ale kdyz jsem zkusil vlozit UTF8 tam, kde certifikat chce IA5 napr. u pole emailaddress tj. DNS, tak OpenSSL certifikat nevytvorilo a skoncilo chybou. Tam bych to zrejme musel zakodoval jako ACE (https://en.wikipedia.org/wiki/Punycode).  U toho extension AlternateName je to take DNS, ale tam OpenSSL neprostestoval.

Takze stale je to otazka, co s tim stuff, co Stano pouziva, udela pri zapisu a cteni. A to je nejjednoduzsi se podivat bubakem na raw data pri trasovani, protoze z tech fragmentu se moc poznat neda. Pri zapisu to non-unicode to jednoduse vykopiruje obsah stringu do pameti, takze tam by to melo obsah zachovat v UTF8, ale otazka je, co s tou pameti dela dal a co se mu objevi v certifikatu, kdyz si ho necim necha vypsat, jako jsem to udelal ja.


Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4426
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #23 kdy: 25-06-2019, 07:47:57 »
Prikladám certifikát aj s kľúčom. Plus nastavenia pri ich vytváraní. Nemám openssl a nemienim ho zbytočne inštalovať.
Kód: Delphi [Vybrat]
  1.   MyCertificate.BitSizeEncryptionAlgorithm := 2048;
  2.   MyCertificate.hashFunction := sha1;
  3.   MyCertificate.signatureAlgorithm := sa_sha224dsa;
  4.   MyCertificate.Unicode := noUni;
Musím si Vaše príspevky nechať prejsť hlavou. Snáď sa mi niečo podarí. To všetko je pre mňa pole neorané.
Citace
b) co presne z nej dostane, ale skutecne na  raw urovni,
Ten raw som v ich kóde videl viackrát.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4426
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #24 kdy: 25-06-2019, 07:49:56 »
Citace
Nebude nakonec problém spíš v tom, jak ty údaje čteš/vypisuješ, než v tom, jak je vytváříš/zapisuješ?
Je to presne podľa ich dema/návodu. Ukladanie aj čítanie bez akejkoľvek konverzie.
Vytváranie i čítanie je jedným a tým istým komponentom.
« Poslední změna: 25-06-2019, 07:52:28 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2593
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #25 kdy: 25-06-2019, 09:46:59 »
Prikladám certifikát aj s kľúčom.
Hm, to je divny kodovani:
            X509v3 Subject Alternative Name:
                DNS:τΎš-蝞-ςοΰ-ύανι

Podle tech pomlcek mezi trojicemi znaku bych usuzoval na nejaky pokus o ten punycode, ale to by tam musely byt jen znaky 'a'..'z' a '0'..'9'

Tohle mi nic nerika, ale to by mohlo byt videt z tech zdrojovek, jak si to tvurci pojmenovali ev. nekde v komentarich odkaz na RFC, podle ktereho to koduji, coz byva pravidlem, ze se do komentaru pise:
F4 BE 9A -
E8 9D 9E -
F2 EF E0 -
FD E1 ED
E9 LF


Ale nejsem zadnej velkej znalec kdejakeho kodovani. Treba to nekomu neco rekne.
V kazdem pripade bych od komponenty ocekaval, ze kdyz ma interface definovany pro typ UnicodeString, tak to co sama zapise a precte zpatky bude zase UnicodeString.

BTW, proc pouzivas zrovna AlternateName, ktere ma predstavovat korektnmi DNS, v pripade internacionalizace se specialnimi pozadavky na kodovani?

Protoze tam strkas zrejme neco, co se tyka jen tvoji aplikace a ostatnim do toho nic neni, tak to zkus prevest pred prirazenim AltName UnicodeString do Base64 -> tim se z toho stane ASCII, takze to by teoreticky mohlo projit. Je to sice pakarna, ale co jsem se dival, tak uz treba nsComment (pouzival jsem ja) jako extension je opravdu hooodne zastarale, takze to uz s tim asi budou problemy, i kdyz zatim si nikdo nestezoval ;)

Kód: Delphi [Vybrat]
  1.   b64 := TBase64Encoding.Create;
  2.   try
  3.     s1 := 'Name 1 6ščťžýáíé6';
  4.     s2 := b64.Encode(s1);
  5.     ...
  6.     s1 := b64.Decode(s2);
  7.   finally
  8.     b64.Free;
  9.   end;
  10.  


« Poslední změna: 25-06-2019, 10:02:34 od pf1957 »

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4426
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #26 kdy: 25-06-2019, 10:20:41 »
A je to. Naozaj veľké ďakujem.

Je zaujímavé, že ak mu dám uložiť celú abecedu, tak to padne na AV. Podľa všetkého až pri generovaní kľúča, lebo texty sú OK.
Kód: Delphi [Vybrat]
  1.   MyCertificate.AltName1 := b64.Encode('A-Á-Ä-B-C-Č-D-Ď-DZ-DŽ-E-É-F-G-H-Ch-I-Í-J-K-L-Ĺ-Ľ');
  2.   MyCertificate.AltName2 := b64.Encode('a-á-ä-b-c-č-d-ď-dz-dž-e-é-f-g-h-ch-i-í-j-k-l-ĺ-ľ');
  3.   MyCertificate.AltName3 := b64.Encode('M-N-Ň-O-Ó-Ô-P-Q-R-Ŕ-S-Š-T-Ť-U-Ú-V-W-X-Y-Ý-Z-Ž');
  4.   MyCertificate.AltName4 := b64.Encode('m-n-ň-o-ó-ô-p-q-r-ŕ-s-š-t-ť-u-ú-v-w-x-y-ý-z-ž');
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4426
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #27 kdy: 25-06-2019, 10:27:27 »
Oprava: kľúč sa vytvorí. Chýba certifikát. Snáď na to v budúcnosti nenarazím. Je zaujímavé, že stačí zakomentovať hocktorý riadok a zbehne to.
« Poslední změna: 25-06-2019, 10:29:03 od Stanislav Hruška »
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2593
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #28 kdy: 25-06-2019, 11:17:12 »
Oprava: kľúč sa vytvorí. Chýba certifikát. Snáď na to v budúcnosti nenarazím. Je zaujímavé, že stačí zakomentovať hocktorý riadok a zbehne to.
No to je docela pochopitelne, protoze zrejme prekrocis delku radku v certifikatu, jelikoz se vsechna ta alternativni jmena pisi do jednoho radku:

            X509v3 Subject Alternative Name:
                DNS:6ščťžýáíé6-domain.com, DNS:www.your-new-domain.com


Pri tomto kodovani tam nesmis strkat litanie, castecne to muzes udelat tak, ze si zvolis ruzna kodovani a pouzijes pro kazde jmeno individualne jine v zavislosti na tom, kolik divnych znaku bude text obsahovat:
- pri Base64 mas vzdy na kazde 3 byty 4 znaky na vystupu
- pri Quoted printable mas ASCII Znaky 1:1 a na kazdy ANSI znak 3, protoze je to koduje hexa jako =XX
takze by se dalo pouzit to, co je pri danem obsahu kratsi.

Ale vic krome nejake interni tabulky znaku podle cetnosti, ktera by byla ulozena interne v aplikaci a  ktera by se pouzila pro kompresi, jako do delaji zipatory (ale ty si tu tabulku sestavuji dynamicky), uz s tim asi nenadelas, protoze ani to divne pouzite kodovani na tom nebude lepe. Jeste je cesta to nestrkat do AltNames ale dop jineho extension.


Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2593
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #29 kdy: 25-06-2019, 11:34:48 »
Je zaujímavé, že stačí zakomentovať hocktorý riadok a zbehne to.
Neco malo take muzes usetrit tim, ze to vsechno nastrkas do jednoho AltName a oddelis si to samo treba '|' (tedy pokud to vubec potrebujes oddelovat), protoze tahle ti to na kazdou polozku vlozi DNS:

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4426
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #30 kdy: 25-06-2019, 12:02:10 »
Ďakujem za vysvetlenie. Oni tých kiksov tam majú podstatne viac. Až budem mať istotu, tak im to tam pošlem.
Napr. naplním FAltName1 až 6. Keď to čítam, tak hodnoty tam sú v obrátenom poradí.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4426
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #31 kdy: 25-06-2019, 17:29:45 »
Predsa to je ináč:
Citace
Thank you for reporting this bug, I have found how to fix it. In GenerateSelfSigned procedure, we need to replace the line
information.AN := GetMemory(6);
by the line
information.AN := GetMemory(6*SizeOf(PAnsiChar));
The bug will be fixed in the next release.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2593
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #32 kdy: 25-06-2019, 18:23:53 »
information.AN := GetMemory(6*SizeOf(PAnsiChar));
No a kdyz alokujes 6 x pointer pro AltName1..6 misto 3/4 jednoho, tak ti to funguje?
« Poslední změna: 25-06-2019, 18:34:32 od pf1957 »

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4426
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #33 kdy: 25-06-2019, 18:25:05 »

Citace
Super  A proc jsi nekontaktoval podporu TMS predtim nez jsi sem napsal?
  • Lebo nastolený problém bol vyriešený a toto už bolo čosi navyše
  • Jednoducho ma to netrklo. Až neskôr mi to nedalo pokoj a tak som to poslal
Citace
verim ze dostatecnymi vedomostmi k odhaleni problemu
Veríš zbytočne. Jednoducho ich nemám. Ak som si istý chybou, tak ju pošlem.
Citace
Tim chci rict, ze toto forum neni oficialni podpora komercnich produktu
Toho som si vedomý. Ale keď nikde nič nenájdem a anglicky neviem, tak je problém napísať do anglického fóra. Aj keď som tu už urobil. To je skôr výnimka.
Citace
V minulosti jsem Ti nabizel moznost prelozit zdarma Windows API, nacez jsi reagoval zakoupenim hotoveho reseni (misto zalozeni FOSS kooperativniho projektu).
Keď som si na to vôbec, ale vôbec, netrúfal. Žiaľ, zakúpenie hotového riešenia je pre mňa najjednoduchšie.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4426
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #34 kdy: 25-06-2019, 18:26:51 »
Citace
No a kdyz alokujes 6 pointer pro AlntName1..6 misto 3/4 jednoho, tak ti to funguje?
Nerozumiem ako to myslíš.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2593
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #35 kdy: 25-06-2019, 18:28:28 »
A proc jsi nekontaktoval podporu TMS predtim nez jsi sem napsal?
To bych mu nevycital - evidentne hledal nejdriv chybu u sebe a chtel si overit, co dela spatne.

Osobne bych se nejakymi obskurnimi komponentami, se kterymi jsem se v zivote nepotkal a velmi provdepodobne nikdy nepotkam, nezabyval, kdybych Standu nenavedl, ze si ma strkat informace do certifikatu.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2593
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #36 kdy: 25-06-2019, 18:29:09 »
Citace
No a kdyz alokujes 6 pointer pro AlntName1..6 misto 3/4 jednoho, tak ti to funguje?
Nerozumiem ako to myslíš.
Tak jako znela ta odpoved, ze to fixnou

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4426
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #37 kdy: 25-06-2019, 19:24:03 »
Aha, aby som si tu úpravu urobil sám. Áno, funguje to. V jednom prípade som tam dal reťazec dlhý 210 znakov a ostatné 130 - 150 znakov.
Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 2593
  • Karma: 133
    • Verze Delphi: D2007, XE3, DX10
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #38 kdy: 26-06-2019, 06:27:34 »
Aha, aby som si tu úpravu urobil sám. Áno, funguje to. V jednom prípade som tam dal reťazec dlhý 210 znakov a ostatné 130 - 150 znakov.
No a to kodovani?

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 4426
  • Karma: 39
    • Verze Delphi: XE7 professional
Re:Certifikát ako zdroj licenčných údajov
« Odpověď #39 kdy: 26-06-2019, 08:01:48 »
Aha, aby som si tu úpravu urobil sám. Áno, funguje to. V jednom prípade som tam dal reťazec dlhý 210 znakov a ostatné 130 - 150 znakov.
No a to kodovani?
Ešteže Ťa mám :)  Musím použiť TBase64Encoding. Ináč dostanem:
Citace
Project ComponentTesting.exe raised exception class EEncodingError with message 'No mapping for the Unicode character exists in the target multi-byte code page'.
Je zaujímavé, že predtým som tento oznam nikdy nedostal. Teraz som ho dostal aj pred vykonaním opravy.
Tá chyba má dosť široký dopad na správanie sa komponentu.

Delphi XE7, FireBird
Expert na kladenie nejasne formulovaných otázok.