# Are HTTPS web sessions non-repudiable?

(This is probably a basic question, and may be a duplicate; if so, just let me know.)

Suppose there are two clients A and B, and some server C. Suppose B and C establish an HTTPS tunnel, and C sends a response to B. And suppose B records the response, and sends it to A.

• Can A verify that the alleged response from C was actually sent by C?

This is essentially equivalent to "Are HTTPS responses non-repudiable?". As far as I am aware, HTTPS only provides a secure channel, but does not provide digitally signed traffic.

### Motivation

I'm tentatively planning to create a social network add-on which would allow users to flag other users who have sent them offensive material via private messages. I would hypothetically run a web service which would receive flag requests, and in order to avoid spam flags, I would need some way for the flagger to voluntarily send me a minimum but sufficient amount of information to verify that the private message actually exists.

In this scheme, I am A, the flagger is B, and the social network is C.

Is there any sane way to do this, without compromising the flagger's security?

• May we assume the session between B and C to be mutually authenticated (-> client certificates)? If so I think the answer will be "yes", otherwise "no" as anyone could record such a session and there would be no proof that the actual B was involved. – SEJPM Oct 10 '15 at 18:03
• @SEJPM: Thanks, and sadly I don't think client certificates are involved. Would restricting to "verify the server response actually happened", rather than the entire web session, make things easier? Ultimately, I only need to verify that the social network sent a page showing a conversation between B and the other person. Verifying that the page was actually received by B is not necessary. I edited the question accordingly. – DumpsterDoofus Oct 10 '15 at 18:34
• – dave_thompson_085 Dec 13 '15 at 2:02

No you can't prove that C sent something.
The only thing you can reliably prove to somebody is that somebody at some point had a HTTPS connection to C, by presenting the key exchange.
You can't prove that C send something because the record layer is symmetrical, meaning everything C sent, could be forged by B as he has to have the neccessary keys.