Похоже, что в хранилище ключей есть запись для нашего закрытого ключа, но не сертификат клиента; перечислены только два сертификата от .p7b с сайта веб-сервисов.
blockquote>PrivateKeyEntry, который вы показываете в списке keytool , содержит сертификат клиента (BC, KU и NCT) и сертификат CA, который, предположительно, является выдающим (родительским) сертификатом для этого клиента засвидетельствовано (Если вы импортировали эти сертификаты в это хранилище ключей с помощью keytool, то сертификат CA определенно является эмитентом, потому что keytool проверяет это; если вы использовали другой инструмент, он должен выполнить то же требование, но не может.) Вы описываете p7b содержит «второй для сайта веб-сервисов, выпущенного собственным CA корпоративного владельца», но (1) если бы в этом случае keytool не импортировал бы его как часть той же цепочки, и (2) это не имело бы смысла, потому что клиент не нуждается в выданном СА (то есть не самоподписанном) серверном сертификате в своем хранилище ключей или доверенного хранилища, только в сертификате ЦС сервера в своем хранилище доверенных сертификатов, и это как отдельная запись, отсутствующая в PrivateKeyEntry клиента, даже если это общий файл.
Согласно вашему описанию, вы получаете трассировку
javax.net.debug=ssl
, поэтому посмотрите на ту часть трассировки, куда она загружает хранилище ключей, и убедитесь, что эта запись загружается, и посмотрите на*** CertificateRequest
сервера. ] вCert Authorities
, чтобы увидеть, какой CA (ы) он запрашивает (непосредственно до*** ServerHelloDone
) и сравнить его (те) с фактическим CA для цепочки в вашем хранилище ключей (неотредактированный). Поскольку вы используете Apache HttpClient, если вы используете одну из перегрузок, которая задает PrivateKeyStrategy, убедитесь, что он правильно выбирает псевдоним.
Пока можно взаимодействовать с document.styleSheets iframe, олдскульный надежный путь состоит в том, чтобы или иметь таблицу стилей там во-первых (путем записи iframe-src для указания на пустой документ с желаемой таблицей стилей) или помещать его на месте с document.write()
. Например:
<body>
<iframe></iframe>
<script type="text/javascript">
var d= frames[0].document;
d.open();
d.write(
'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional //EN" "http://www.w3.org/TR/html4/loose.dtd">'+
'<html><head><style type="text/css">'+
'body { font-size: 200%; }'+
'<\/style><\/head><body><\/body><\/html>'
);
d.close();
d.body.innerHTML= '<em>Hello</em>';
</script>
</body>
(Это также установит iframe документ Режиму Стандартов, предполагая, что это - то, что Вы хотите.)
Вытащил этот код из источника jHtmlArea. Забавно, что функция была там, а я этого не понял. Я наткнулся на этот SO Question, когда пытался понять, как его реализовать. :)
На самом деле это не "jQuery", но он работает. Я догадываюсь, что что-то с приложением не работает с iframe, так что они сделали это в старой школе. Ответ Бобинса тоже выглядит хорошо, и может быть более надёжным? Пока что, похоже, это работает.
var e = edit.createElement('link');
e.rel = 'stylesheet';
e.type = 'text/css';
e.href = options.css;
this.iframe[0].contentWindow.document.getElementsByTagName('head')[0].appendChild(e);
РЕДАКТИРОВАНИЕ : Я думаю, что причина, по которой это работает, в том, что это один и тот же домен (включая создание iframe в js) Иначе обычные блоки безопасности браузера не позволят вам манипулировать iframe dom.
Смотрите Как применить CSS к iFrame