I'm considering using TLS for a peer-to-peer, SSH-like usage without PKI.
First, there is a setup phase of the clients, before any connection between them is established. The setup consists of generating a self-signed certificate that authenticates A, and then transmitting that certificate to host B. The certificate is transmitted using some pre-established secure channel such as SSH. A requirement is that information flows in the setup phase only from A to B, not the other way around. That means that A can't know about public keys or certificates generated by B.
In the use phase, host A tries to connect to B. In this situation, even if B would have a self-signed certificate of its own, A wouldn't know it. B can't connect to A because of firewalls, NATs, dynamic IPs or other such reasons.
My question is, does TLS using X.509 support this kind of pattern?
1) Is it possible to establish a secure connection using only client certificate, while the server has none? A's certificate isn't meant to be distributed widely; so in theory it would be possible to generate a token using A's private key and demand B to prove that decrypt it using A's public key, or what's even simpler, just demand B to send back the A's public key; I'm unaware whether TLS supports such a flow?
2) From "semantic" perspective certificates are meant to be public information; however, if the use case of 1) is possible, A's certificate must be considered a secret. Is there any better fitting schemes here? I'm thinking of TLS-PSK, but it, on the other hand eschews asymmetricity and A must then be authenticate itself using other, asymmetric means, if I don't want B to be able to imitate A.