Несколько сертификатов передаются взад-вперед в зависимости от того, используете ли вы транспорт TLS / SSL, подписываете сообщения, шифруете части сообщения и т. Д. Ключ должен знать, какой сертификат используется кем и для чего.
Сертификат, отправленный в рамках authnrequest (SP-> IdP), используется IdP для проверки подписи в самом запросе, то есть для проверки того, что запрос не был подделан.
Эта часть, кажется, работает (из вашего описания), поскольку ваш IdP запрашивает логин и пытается ответить. (Вы упоминаете, что IdP «не обнаружил» сертификат, и это может быть просто из-за того, что IdP просто решил не проверять подпись запроса.)
Поскольку ваш SP ищет подписанный ответ, IdP использует свой собственный сертификат и отправит / должен отправить сертификат x509 обратно (IdP -> SP), где SP может проверить подписанный ответ. (Подобно запросу SP-> IdP, SP может предпочесть игнорировать проверку подписи в ответе, но похоже, что ваш SP требует подписанных ответов.)
Итак, похоже, это проблема конфигурации IdP: он должен, но не подписывать ответ своим сертификатом (IdP).