Quantcast
Channel: Chilkat Forum - latest questions
Viewing all 1061 articles
Browse latest View live

VBScript - ActiveX component can't create object - 800A01AD

$
0
0

I would like to run your 'read gmail pop3'mailbox' VBscript. I have pasted it into a text file with the extension .VBS and have downloaded and installed the ActiveX (32bit) windows download.

Here is the text from the CheckChilkatActiveX.exe.:

ChilkatLog:
  UnlockComponent:
    DllDate: Oct  6 2016
    ChilkatVersion: 9.5.0.61
    UnlockPrefix: Test
    Architecture: Little Endian; 32-bit
    Language: ActiveX
    VerboseLogging: 0
    component: Crypt
    Component successfully unlocked using trial key
    Success.
  --UnlockComponent
--ChilkatLog
But when I double click on the VBS file I get the following message:

alt text

As a reminder this is line of the script set mailman = CreateObject("Chilkat_9_5_0.MailMan")

Please could you let me know what I am doing wrong - thanks.


Error authenticating to SFTP server. Receiving message "The system could not find the environment option that was entered"

$
0
0

I'm using ChilkatDotNet4 v4.0.30319 I have an issue that occurs irregularly when authenticating to an SFTP server. When I make the following call" _sFtp.AuthenticatePw(userName, password); I get an exception message that states "The system could not find the environment option that was entered" Any recommendations? The server is question is running Windows Server 2008 R2 Standard.

Async Sockets in C#?

$
0
0

I am trying to use AsyncReceivedString() and functions related to Async. You mentioned the new model for asynchronous programming introduced in Chilkat v9.5.0.52 Is it already put on web site for download?? Especially, I need for VS2013 version. If so, may I get example code by c# for asynchronous programming?? Basically, I can't see example about asynchronous programming in Socket by C#!

CkSocketW TLS performance, why using CRITICAL_SECTION in ThreadSafe Chilkat?

$
0
0

Hello.

I am created network application based to synchronous CkSocketW (Unicode C++). My code - not using CRITICAL_SECTION\Mutex\etc... In range tests show bad TLS performance, i check my application DebugDiag 2 Analysis (Microsoft), he show me next results:

Detected possible blocking or leaked critical section at 0x00000061`bb8b0298 owned by thread 1378 in MyNetworkApp.DMP Impact of this lock 79,18% of threads blocked

Other debuggers show using CRITICAL_SECTION in Chilkat.


Questions:

  • Why your team using CRITICAL_SECTION in ThreadSafe Chilkat?
  • How up TLS performance?

Small test example:

void CkTlsConnect(std::vector<std::wstring> &ipChunk, int port)
{
    for (int i = 0; i < ipChunk.size(); i++)
    {
        std::wstring ip = ipChunk[i];
        if (!ip.empty())
        {
            CkSocketW socket;
            socket.put_SslProtocol(L"TLS 1.0");
            socket.put_HeartbeatMs(0);
            socket.put_KeepAlive(false);
            if (socket.Connect(ip.c_str(), port, true, 5000))
            {
                socket.put_MaxReadIdleMs(5000);
                socket.put_MaxSendIdleMs(5000);
                socket.SendByte(0x01);
                if (socket.ReceiveByte(true))
                {
                    socket.get_ReceivedInt();
                }
                socket.Close(0);
            }
            socket.dispose();
        }
    }
}

void CkTlsTest()
{
    int threadCount = 4000;
    std::vector<std::vector<std::wstring>> ipChunks;

    //
    // getting ip chunks
    //

    std::vector<std::thread> threadList(threadCount);
    for (int i = 0; i < threadCount; i++)
        threadList[i] = std::thread(CkTlsConnect, std::ref(ipChunks[i]), 1528);

    for (int i = 0; i < threadCount; i++)
        threadList[i].join();
}

I am using this Chilkat version: http://chilkatdownload.com/9.5.0.61/chilkat-9.5.0-x86_64-vc12.zip

CkRest#SetAuthBasic does not seem to work?

$
0
0

Hi all,

[Using the Java Bundle version 9.5.0.59]

I want to retrieve data from a REST-resource that requires a valid user to be authenticated using Basic HTTP access authentication. If I use CkRest#SetAuthBasic, like in this code fragment (error handling etc. removed for clarity), a HTTP Status 401 is returned:

CkRest rest = new CkRest();
//
rest.SetAuthBasic("kermit", "kermit");
//
rest.Connect("localhost", 9090, false, true);
rest.AddHeader("Content-Type","application/json; charset=UTF-8");
String jsonResponseStr = rest.fullRequestNoBody("GET","/activiti-rest/service/runtime/tasks");
System.out.println(jsonResponseStr);

Returns: HTTP Status 401

If I explicitly calculate and insert an 'Authorization' header, the request gets authenticated and a result is returned:

CkRest rest = new CkRest();
//
CkByteData data = new CkByteData();
CkString authString = new CkString();
data.appendStr("kermit:kermit");
data.encode("base64", authString);
//
rest.Connect("localhost", 9090, false, true);
rest.AddHeader("Authorization", "Basic "+authString.getString());
rest.AddHeader("Content-Type","application/json; charset=UTF-8");
String jsonResponseStr = rest.fullRequestNoBody("GET","/activiti-rest/service/runtime/tasks");
System.out.println(jsonResponseStr);

Returns: valid data.

We would prefer to use the SetAuthBasic() method, but for some reason this does not work. Can anybody tell me how I should use this method or why this is going wrong?

Regards, Rui

http ActiveX - cannot determine error reason past connect

$
0
0

The http ActiveX component has ConnectFailReason to indicate what reasons the connection failed. There is no corresponding error value for after the connection. I am used to programmatically being able to determine a timeout vs read or write failure or other socket failure. The only option I can find is to somehow parse the text or XML of LastErrorText or LastErrorXml, but that seems overly cumbersome.

Http request timeout in JScript ActiveX

$
0
0

I have seen answers to ReadTimeout, but I want an overall timeout and the answers I saw all required event callbacks. Can you provide an example of using an event callback in JScript? (We are in a WSH environment, not the browser).

Error when using UPX with ChilKat & Delphi

$
0
0

I don't have an answer for this yet, but I've narrowed down a real issue with including ChilKat DLL into DelphiXE6 projects when you also use UPX executable packer on the exe. I haven't tried any other versions of Delphi to confirm if this applies to all versions.

If you compile the Delphi project exe with Debug Information linked, the packed exe works fine. If you turn off the option for Debug Information then the exe will hang when you run it. I created a small demo application to remove everything else from the project. We've been using UPX for a decade or more, and building our release version of projects without debug info for longer. The only new thing introduced here was ChilKat.

I don't know if anyone has a solution for this, or anything can be done. But I thought I'd share this information to hopefully save others the days I've spent narrowing down on what was happening.


Install PHP Extension on Shared Linux Hosting?

$
0
0

We are trying your PHP extension for the MailMan, we have shared hosting plan with Hostgator,

We are done with all needed configurations and code modifications, yet once the code run we get the following error message, could you please advise,

Call to undefined function dl() in /home3/xyz/public_html/something.com/Plugin/chilkat_9_5_0/chilkat_9_5_0.php

We are running php 5.4

Why does FileZilla work, but my Application Gets Blocked on the FTP Data Connection?

$
0
0

I can upload or download files using FileZilla (with FTP), but my application fails w/ the data connection. I can connect to the FTP server just fine, but when I try to upload, or download, or fetch a directory listing, the connection is rejected or it hangs until it times out.

(Android™) Firebase Receive Server-Sent Events (text/event-stream)

$
0
0

Gentelmen,
I have a serious intention to purchase Chilkat "Boundly-only" package to implement this example in my application, but just on simple testing I receive some logs that I dont understand at all. Can anybody take a look and advice me how to handle that ?

Thx in advance

`

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    CkGlobal glob = new CkGlobal();
    boolean success = glob.UnlockBundle("tj_gumis for 30-day trial");
    if (success != true) {
        System.out.println(glob.lastErrorText());

        return;
    }

    trigerSse();

    TextView tv = new TextView(this);

    CkCrypt2 crypt = new CkCrypt2();

    // Display the version of the CkCrypt2 class
    tv.setText(crypt.version());

    setContentView(tv);
}

private void trigerSse(){

    //  Demonstrates how to begin receiving server-sent events, and to update
    //  your JSON database for each event.

    //  This example requires the Chilkat API to have been previously unlocked.
    //  See Global Unlock Sample for sample code.

    //  This example assumes a JWT authentication token, if required, has been previously obtained.
    //  See Firebase JWT Authentication for sample code.

    boolean success;
    String authToken = "My-previously-obtained-JWT-token";

    CkRest rest = new CkRest();

    //  Make the initial connection (without sending a request yet).
    //  Once connected, any number of requests may be sent.  It is not necessary to explicitly
    //  call Connect before each request.
    success = rest.Connect("galleryingrey.com",80,true,true);
    if (success != true) {
        Log.i(TAG, rest.lastErrorText());
        return;
    }

    rest.AddQueryParam("auth",authToken);
    rest.AddHeader("Accept","text/event-stream");
    rest.AddHeader("Cache-Control","no-cache");

    String responseBody = rest.fullRequestNoBody("GET","/.json");

    //  A 307 redirect response is expected.
    if (rest.get_ResponseStatusCode() != 307) {
        Log.i(TAG, "Unexpected response code: " + String.valueOf(rest.get_ResponseStatusCode()));
        Log.i(TAG, responseBody);
        Log.i(TAG, "Failed.");
        return;
    }

    //  Get the redirect URL
    CkUrl url = rest.RedirectUrl();
    if (rest.get_LastMethodSuccess() != true) {
        Log.i(TAG, rest.lastErrorText());
        return;
    }

    Log.i(TAG, "redirect URL domain: " + url.host());
    Log.i(TAG, "redirect URL path: " + url.path());
    Log.i(TAG, "redirect URL query params: " + url.query());
    Log.i(TAG, "redirect URL path with query params: " + url.pathWithQueryParams());

    //  Our text/event-stream will be obtained from the redirect URL...
    CkRest rest2 = new CkRest();

    success = rest2.Connect(url.host(),443,true,true);
    if (success != true) {
        Log.i(TAG, rest2.lastErrorText());

        return;
    }

    rest2.AddHeader("Accept","text/event-stream");
    rest2.AddHeader("Cache-Control","no-cache");

    //  Add the redirect query params to the request
    rest2.AddQueryParams(url.query());

    //  In our case, we don't actually need the auth query param,
    //  so remove it.
    rest2.RemoveQueryParam("auth");

    //  Send the request.  (We are only sending the request here.
    //  We are not yet getting the response because the response
    //  will be a text/event-stream.)
    success = rest2.SendReqNoBody("GET",url.path());
    if (success != true) {
        Log.i(TAG, rest2.lastErrorText());

        return;
    }

    //  Read the response header.
    //  We want to first get the response header to see if it's a successful
    //  response status code.  If not, then the response will not be a text/event-stream
    //  and we should read the response body normally.
    int responseStatusCode = rest2.ReadResponseHeader();
    if (responseStatusCode < 0) {
        Log.i(TAG, rest2.lastErrorText());
        return;
    }

    //  If successful, a 200 response code is expected.
    //  If the reponse code is not 200, then read the response body and fail..
    if (responseStatusCode != 200) {
        Log.i(TAG, "Response Code: " + String.valueOf(responseStatusCode));
        Log.i(TAG, "Response Status Text: " + rest2.responseStatusText());
        Log.i(TAG, "Response Header: " + rest2.responseHeader());
        responseBody = rest2.readRespBodyString();
        if (rest2.get_LastMethodSuccess() == true) {
            Log.i(TAG, "Error Response Body: " + responseBody);
        }

        Log.i(TAG, "Failed.");
        return;
    }

    //  For this example, our JSON database will be empty at the beginning.
    //  The incoming events (put and patch) will be applied to this database.
    CkJsonObject jsonDb = new CkJsonObject();

    //  Make sure to set the JSON path delimiter to "/".  The default is "." and this
    //  is not compatible with Firebase paths.
    jsonDb.put_DelimiterChar("/");

    //  At this point, we've received the response header.  Now it's time to begin
    //  receiving the event stream.  We'll start a background thread to read the
    //  stream.  (Our main application (foreground) thread can cancel it at any time.)
    //  While receiving in the background thread, our foreground thread can read the stream
    //  as it desires..
    CkStream eventStream = new CkStream();

    //  This sse object will be used as a helper to parse the server-sent event stream.
    CkServerSentEvent sse = new CkServerSentEvent();

    CkTask task = rest2.ReadRespBodyStreamAsync(eventStream,true);
    task.Run();

    //  For this example, we'll just read a few events, and then cancel the
    //  async task.
    int count = 0;
    while ((count < 3) && (task.get_Finished() == false)) {

        //  Get the next event, which is a series of text lines ending with
        //  a blank line.
        //  Note: This method blocks the calling thread until a message arrives.
        //  a program might instead periodically check the availability of
        //  data via the stream's DataAvailable property, and then do the read.

        //  Alternatively, to avoid polling,
        //  it is possible to receive the data in callbacks.
        //  Examples w/ callbacks are shown elsewhere.
        String eventStr = eventStream.readUntilMatch("\r\n\r\n");
        if (eventStream.get_LastMethodSuccess() != true) {
            Log.i(TAG, eventStream.lastErrorText());
            //  Force the loop to exit by setting the count to a high number.
            count = 99999;
        }
        else {
            Log.i(TAG, "Event: [" + eventStr + "]");

            //  We have an event. Let's update our local copy of the JSON database.
            success = sse.LoadEvent(eventStr);
            if (success != true) {
                Log.i(TAG, "Failed to load sse event: " + eventStr);
            }
            else {
                //  Now we can easily access the event name and data, and apply it to our JSON database:
                success = jsonDb.FirebaseApplyEvent(sse.eventName(),sse.data());
                if (success != true) {
                    Log.i(TAG, "Failed to apply event: " + sse.eventName() + ": " + sse.data());
                }
                else {
                    Log.i(TAG, "Successfully applied event: " + sse.eventName() + ": " + sse.data());
                }

            }

        }

        count = count + 1;
    }

    //  Make sure the background task is cancelled if still running.
    task.Cancel();

    //  Examine the JSON database after applying events..
    jsonDb.put_EmitCompact(false);
    Log.i(TAG, "----");
    Log.i(TAG, jsonDb.emit());
}

static {
    // Important: Make sure the name passed to loadLibrary matches the shared library
    // found in your project's libs/armeabi directory.
    //  for "libchilkat.so", pass "chilkat" to loadLibrary
    //  for "libchilkatemail.so", pass "chilkatemail" to loadLibrary
    //  etc.
    //
    System.loadLibrary("chilkat");

    // Note: If the incorrect library name is passed to System.loadLibrary,
    // then you will see the following error message at application startup:
    //"The application <your-application-name> has stopped unexpectedly. Please try again."
}

}

`

  • I/ContentValues: ChilkatLog:
  • Connect:
  • DllDate: Oct 6 2016
  • ChilkatVersion: 9.5.0.61
  • UnlockPrefix: tj
  • Architecture: Little Endian; 32-bit
  • Language: Android C/C++
  • VerboseLogging: 0
  • socket2Connect:
  • connect2:
  • connectImplicitSsl:
  • connectSocket:
  • connect_ipv6_or_ipv4:
  • getAddressInfo:
  • Failed to get host address info. (4)
  • errno: 7
  • osErrorMessage: Argument list too long
  • hostOrIpAddr: galleryingrey
  • port: 80
  • Retrying DNS lookup...
  • Failed to get host address info. (4)
  • errno: 7
  • osErrorMessage: Argument list too long
  • hostOrIpAddr: galleryingrey
  • port: 80
  • --getAddressInfo
  • getAddressInfo failed.
  • --connect_ipv6_or_ipv4
  • --connectSocket
  • --connectImplicitSsl
  • ConnectFailReason: DNS lookup failed
  • --connect2
  • --socket2Connect
  • Failed.
  • --Connect
  • --ChilkatLog

Cookie support in REST module

$
0
0

Bonjour,

The REST module is lovely, since it allows a bit more customization relative to the HTTP module. However, I found that it has no integrated support for cookie handling like the HTTP module has. It is not too difficult to build your own cookie handler, however I think it would be a lovely addition to the REST module if it is integrated! Perhaps it is a matter of copy paste from the HTTP module?

Cordialement, Marcel

Multithread with chilkat SSH and HTTP (GET, Post) ERROR: Not responsding and Crash

$
0
0

I am trying run 100 thread with SSH (dynamic port forwarding) and Chilkat HTTP Post , Get. but i alway run 10 - 30 minute(random time) my app always show "... Has stoped working" of windown(Sever 2012) and don't show any log error. i don't known HOW and WHERE to fix it? Anyone have idea for that? or Someone can fix it?

Example :

1 Thread:

Get website 1 time -> Run ok. No error.

get website 2 time -> Run ok. No Error.

But when start 10 - 100 thread it alway error with get 2 times website but get 1 times it's working (It's run oke but after 5 - 10minutes it's show not response and my app crash)

delphi (DLL version) static DLL names

$
0
0

(possible to make feature request here ?)

linking to fixed DLLName like


function CkSFtp_Create: HCkSFtp; stdcall; ... implementation

function CkSFtp_Create; external DLLName;


is unhandy because of some reasons:

  1. the path must be in search path and you can't give a specific location f.e. in a config-file if needed for several applications in different paths.

  2. if the dll cannot be loaded the application will abort immediately without error message.

  3. if you need a certain functionality f.e. SFTP or MAIL just only in seldom concrete situations then only on first use of that will be nessary to load the DLL and link the DLL-Entries. But in the actual implementation the DLL is loaded on EVERY start which slows down the start of the application.

will there be any chance to switch this to dynamically loading ? f.e.


function    CkSFtp_Create: HCkSFtp;
procedure   CkSFtp_Dispose( handle: HCkSFtp);

...

implementation

uses chilkat_DLL_loader;

type

TFkt_CkSFtp_Create          =function   : HCkSFtp;      stdcall;
TFkt_CkSFtp_Dispose         =procedure( handle: HCkSFtp);       stdcall;

...

var

_lcl_init:Boolean = true;
_fkt_ptr_arr:   array [0..266] of Pointer;

function    _Map( k:Integer; n:String):Pointer;
begin
    Result:=    _fkt_ptr_arr[k];
    if Result = nil then begin
        Chilkat_GetProcedureAddress( Result, n);
        _fkt_ptr_arr[k]:=   Result;
    end;
end;

function        CkSFtp_Create: HCkSFtp;
begin
    Result:=    TFkt_CkSFtp_Create(_map( 0, 'CkSFtp_Create'))
        ( );
end;

procedure   CkSFtp_Dispose(
                                handle: HCkSFtp
                            );
begin
    TFkt_CkSFtp_Dispose(_map( 1, 'CkSFtp_Dispose'))
        ( handle);
end;

...


and in chilkat_DLL_loader something like:


function    Chilkat_CanUse:Boolean;

procedure   Chilkat_GetProcedureAddress(var P; ProcName: string);

implementation

uses windows, sysutils;

const

DLLPath = '...';

var ModuleName: String;

function        Chilkat_LoadModule:HModule;
var
    S:  String;
begin
    S:=             DLLPath;

{$ifdef Win32}

    ModuleName:=    S + '\ChilkatDelphiXE.dll';

{$else}

    ModuleName:=    S + '\ChilkatDelphiXE64.dll';

{$endif}

    Result:= GetModuleHandle(PChar(ModuleName));
    if Result = 0 then
        Result:= LoadLibrary(PChar(ModuleName));
end;

procedure   Chilkat_GetProcedureAddress(var P; ProcName: string);
var
    ModuleHandle: HMODULE;
begin
    if not Assigned(Pointer(P)) then begin
        ModuleHandle := Chilkat_LoadModule;
        if ModuleHandle = 0 then
            raise Exception.Create('Library not found: ' + ModuleName); // + ' ' + WLastError);
        Pointer(P) := GetProcAddress(ModuleHandle, PChar(ProcName));
        if not Assigned(Pointer(P)) then
            raise Exception.Create('Function not found: ' + ModuleName + '.' + ProcName);
    end;
end;

function        Chilkat_CanUse:Boolean;
begin
    Result:=    Chilkat_LoadModule <> 0;
end;

I transformed each chilkat source in that way, but I think it would be better chilkat will provide the dynamically loading if other users will also need that kind of loading (?)

High CPU usage with Python SSH module

$
0
0

Good day, I really like Python SSH module, however it eats 100% CPU, when I try to connect to multiple servers in threads(even 10-15 threads). Both Win and Linux. Is there a way to reduce it? The most simple example I stitched up:

import chilkat, threading, time

def Connect():        
    ssh = chilkat.CkSsh()    
    if not ssh.Connect('Host', 22) : return        
    ssh.put_IdleTimeoutMs(5000)        
    if not ssh.AuthenticatePw('user', 'pw'): return

chilkat.CkSsh().UnlockComponent("Anything for 30-day trial")    
for _ in range(15):
    threading.Thread(None, Connect).start()        
while threading.active_count() > 1:
    time.sleep(1)

HTTP or REST? Which to use?

$
0
0

Would you have a few minutes to suggest the best Chilkat control for what I'm doing? Right now I'm using the HTTP control, primarily because of the async methods that it has. I'm mostly sending JSON to and from my main server.

I have a connection which is used for HTTP long polling. It connects to the server and basically says "here's my site id and password. I'm going to wait for you to send me something..." It holds the connection open for 45 minutes and if it receives nothing, it closes itself and re-connects. If it does receive a response from the server, it processes the response, drops the connection and reconnects. My question here is, would the REST control be a better fit than the HTTP control?

The other connections are just basic HTTP POSTs or GETs and the standard HTTP control seems to work fine for these.

Lastly, I haven't been able to wire up the ActiveX events interface with any success yet for HTTP control. Not sure what I'm missing... Right now i have a timer that checks for the status of "Finished = 1" and then acts on it, which works, bound an event bound model would be better. I have the interface implemented in my VFP code and it's bound using VFP's EVENTHANDLER, but none of the events actually fire. Also, I wasn't clear from the documentation, which object the events were to be bound to, is it the task object or the http one?

Failed to convert data connection to TLS

$
0
0

We got the following error "Failed to convert data connection to TLS". Could you please help? Thanks!

ChilkatLog: PutFileFromTextData: DllDate: Mar 11 2014 ChilkatVersion: 9.5.0.18 UnlockPrefix: xxxxxxxx Username: xxxxxx Architecture: Little Endian; 32-bit Language: ActiveX VerboseLogging: 0 ProgressMonitoring: enabled: yes heartbeatMs: 0 sendBufferSize: 65536 --ProgressMonitoring charset: utf-8 IdleTimeoutMs: 60000 ReadTimeoutMs: 60000 uploadFromMemory: numBytesToUpload: 3187 uploadFromDataSource: initialGreeting: 220 xxx.xxxxx.com X2 WS_FTP Server 7.7(98838366) restartNext: 0 modeZ: 0 binaryMode: 1 pbsz_protp: sendCommand: sendingCommand: PBSZ 0 --sendCommand readCommandResponse: replyLineQP: 200 PBSZ=3D0 commandResponse: 200 PBSZ=0 statusCode: 200 --readCommandResponse sendCommand: sendingCommand: PROT P --sendCommand readCommandResponse: replyLineQP: 200 PRIVATE data channel protection level set commandResponse: 200 PRIVATE data channel protection level set statusCode: 200 --readCommandResponse --pbsz_protp setupDataConnection: passive transfer mode setupPassiveDataSocket: sendCommand: sendingCommand: PASV --sendCommand readCommandResponse: replyLineQP: 227 Entering Passive Mode (xxx,xxx,xx,xx,216,159). commandResponse: 227 Entering Passive Mode (xxx,xxx,xx,xx,216,159). statusCode: 227 --readCommandResponse dataConnect: hostname: xxx,xxx,xx,xx port: 55455 socketOptions: SO_SNDBUF: 8192 SO_RCVBUF: 8192 TCP_NODELAY: 0 --socketOptions dataConnectSuccess: 1 --dataConnect --setupPassiveDataSocket --setupDataConnection sendUploadCommand: sendCommand: sendingCommand: STOR xx_xx123456.xml --sendCommand --sendUploadCommand convertDataConnToSsl: ConvertToTls: Elapsed time: 59998 millisec Failed to convert data connection to TLS --convertDataConnToSsl --uploadFromDataSource --uploadFromMemory --PutFileFromTextData --ChilkatLog

Certificate order issue / enhancement

$
0
0

Recently I've had two clients who bumped into this "issue". I have an Android app that is using the Chilkat libraries (specifically HTTP). The problem occurs when trying to verify the SSL Certificate chain of the client's server.

Chilkat code throws this error message: Invalid PKCS v1.5 PS separator

The server that I am trying to validate is: https://mail.e-know.net

I believe the problem is caused by the SSL Certificate chain of mail.e-know.net. When I run a test using an SSL checker (i.e.Digicert's tester: https://www.digicert.com/help/ ) it shows a warning that the certificate chain is being served out of order. I'm "guessing" (without being able to look at the Chilkat code of course) that since the certs are out of order Chilkat fails to decrypt / verify the digital signiture, which results in the Invalid PKCS v1.5 PS separator error. If the certs were in the correct order it would work just fine (again, just my theory).

According to the document here, the standard is that certificates should be served in order. Failing to serve the certificate in order could break some applications (but most will handle it gracefully): https://community.qualys.com/docs/DOC-1931

Chrome, for example, still seems find an verify the certificates just fine.

So my guess would be other applications are probably downloading the entire certificate chain, then putting them in order, then verifying them in order. Chilkat, perhaps is just verifying in the order they come down... and choking when they are not in order.

I've already asked the client to raise the issue with his IT group. Unfortunately, my app is not used by a large number of people at his company so it's has gotten a low priority since "other users who are using Chrome ... Outlook ... etc do not have the problem". So he is pretty stuck. It was working just fine for him when I was using HttpClient ... but since I've switch to Chilkat he can no longer use my app, unfortunately (unless I turn OFF certificate verification... which of course would be bad...).

I understand this is really a problem with the certificate order, and not Chilkat. However, it would be nice if Chilkat behavior was consistent with most apps and handled this scenario.

You should be able to easily recreate the issue using code like this:

    String path = "https://mail.e-know.net";
    CkHttp http = getUnlockedHttp();
    ckHttpRequest.put_HttpVerb("GET");
    ckHttpRequest.put_Path(path);
    CkHttpResponse ckHttpResponse = http.SynchronousRequest("mail.e-know.net", 443, true, ckHttpRequest);

The code will throw the error: Invalid PKCS v1.5 PS separator

The expected result (to be consistent with other software) is for the certificate verification to pass.

Please let me know if you need anymore information from me to recreate the issue. Also, whether or not this is something that can be fixed (or perhaps "enhanced") in an upcoming release of Chilkat.

Cheers,

  • Sean

Download bounce using MAPI Protocol

$
0
0

Hi,

currently we are using pop3 and IMAP protocol to download the bounce email and we have one client asked us to download the bounce mails using MAPI protocol ,is it possible to downoad using chilkat library using c#.

read folder from IBM Lotus Domino

$
0
0

I read folder list from a IBM Lotus Domino server, but it seems that a path like 'folder1/subfolder2' has been read as 'folder1subfolder2' with no separator. Is there something to set befor asking folder list?

Viewing all 1061 articles
Browse latest View live