A bit of a guess what you have already:
start with the reverse tunnel:
serverA:~ $ ssh -R 22:localhost:10022 serverB
then from the Laptop connect to serverB too and connect a local forward to the port you defined in the reverse forward:
laptop:~ $ ssh -L 10023:localhost:10022 serverB
if I understood you correctly something like that is the part you already did. And now to the last part:
connect to localhost on the port you used in the local forward, this sends all the packages directly to serverA, specify another port forward so your application can connect to serverA
laptop:~ $ ssh -p 10023 -L 10443:localhost:443 localhost
if your Application needs to connect to 443 and can't used another port as for example 10443 which I used in the example you'll have to do the last connection as root:
laptop:~ $ su -
laptop:~ # ssh -p 10023 -L 443:localhost:443 user@localhost
or
laptop:~ $ sudo ssh -p 10023 -L 443:localhost:443 user@localhost
Some explanations:
- "443:localhost:443" gets resolved at the remote end.... so it's actually serverA
- "user@" is the user needed to login to serverA, if not needed before its needed now as you locally are root now
- "localhost" is resolved locally so it's actually the Laptop.