Marton Anka wrote:
Message
Hello,
 
I am trying to solve a very peculiar problem. In my application, there are three players:
 
1. Client - runs a regular web browser.
 
2. Proxy - runs my proxy application with OpenSSL 0.9.7c
 
3. Host - runs my host application with OpenSSL 0.97c
 
Proxy accepts connections from both the Client and the Host. Proxy has a real CA certificate, therefore it is trusted by the Client and the Host. Host has an install-time generated self-signed certificate that is registered on the Proxy upon the first connection and verified upon subsequent ones.
Is your goal to pay for one Verisign certificate and be able to use it for a large number of privately generated free certificates which would not be trusted by the client?
 
Host connects to Proxy and waits. Client connects to Proxy and wishes to talk to Host.
 
Client can verify Proxy's identity, and by trusting Proxy it can also rely on Host's identity being verified as Host needs to authenticate with a client certificate towards Proxy.

The client cannot trust the host because the client is not verifying the Host's certificate.
The client has no way of knowing whether or not the proxy server has been compromised.  Therefore it is not acceptable
to trust the proxy to decrypt and reencrypt the data.  You have now introduced a man in the middle.
Now Proxy can shuffle data between Client and Host. The easy way to do it is by receiving data from Client through its SSL channel, (effectively decrypting) it, and sending it to Host (re-encrypting it) through Host's SSL channel. The response comes from Host, it's decrypted/re-encrypted, and transmitted to Client.
 
Proxy cannot simply shuffle TCP traffic, obviously, because Client, being a standard browser, does not trust Host's certificate - and even if it did, the CN would not match.
 
The first question is, is this cryptographically sound if we assume that Proxy has not fallen into the wrong hands?
No.  It is not a sound security process.
The second question is, can this be improved? For example, can we get rid of the decryption/re-encryption phase? Can I somehow manage to get both Host and Client to negotiate the same cipher suite and session key? I have total control over the code that runs on Proxy and Host, but Client can be any web browser.
The way the client and host negotiate the same cipher suite and session key is by establishing an SSL/TLS session between the client and the host without the involvement of the proxy.

Please note that I am just an ordinary SSL user and do not understand its internal workings to 100% - so I apologize if the latter question is dumb.
 
Furthermore, if someone were willing to consult me on this matter I would, of course, be willing to pay appropirate compensation for their time.
I am available for consulting.  You may contact me at jaltman at secure-endpoints.com for that purpose.

Thanks in advance,
 
Marton Anka
 

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Reply via email to