Как проставить ssl сертификат для динамических поддоменов?
В 99% случаев надо просто писать listen 80; без всяких доменов и IP-адресов.

Домен в listen практически никогда нет смысла указывать. Чаще всего это не имеет никакого смысла и даже скорее приводит к непонятному (для новичков) поведению.

if тут тоже не нужен. Итого блок должен быть таким:
server {
    listen 80;
    server_name *.example.com;
    return 301 https://$host$request_uri;
}
Зачем у вас там if? Условие и так всегда будет выполняться, потому что этот блок ограничивается по именам  server_name`ом.

Сделайте location / и вставьте в него редирект.

Ну и в листен у вас какая-то кривота, оставьте только порт.