X509Certificate. CreateFromCertFile - указанный сетевой пароль не корректен

Вы можете передавать данные в ответ, но вы не можете динамически обновлять шаблон так, как вы описываете. Шаблон создается один раз на стороне сервера, а затем отправляется клиенту. Вам нужно будет использовать JavaScript для чтения потокового ответа и вывода данных на стороне клиента.

Используйте XMLHttpRequest, чтобы сделать запрос к конечной точке, которая будет передавать данные. Затем периодически читайте поток, пока он не будет выполнен.

В этом примере используется очень простой формат сообщения: одна строка данных, за которой следует новая строка. Конечно, вы можете так же усложниться в разборе, сколько хотите, пока есть способ идентифицировать каждое сообщение. Например, вы можете вернуть объект JSON и декодировать его на клиенте.

from time import sleep
from flask import Flask, render_template
from math import sqrt

app = Flask(__name__)

@app.route('/')
def index():
    # render the template (below) that will use JavaScript to read the stream
    return render_template('index.html')

@app.route('/stream_sqrt')
def stream():
    def generate():
        for i in range(500):
            yield '{}\n'.format(sqrt(i))
            sleep(1)

    return app.response_class(generate(), mimetype='text/plain')

app.run()
<p>This is the latest output: <span id="latest"></span></p>
<p>This is all the output:</p>
<ul id="output"></ul>
<script>
    var latest = document.getElementById('latest');
    var output = document.getElementById('output');

    var xhr = new XMLHttpRequest();
    xhr.open('GET', '{{ url_for('stream') }}');
    xhr.send();
    var position = 0;

    function handleNewData() {
        // the response text include the entire response so far
        // split the messages, then take the messages that haven't been handled yet
        // position tracks how many messages have been handled
        // messages end with a newline, so split will always show one extra empty message at the end
        var messages = xhr.responseText.split('\n');
        messages.slice(position, -1).forEach(function(value) {
            latest.textContent = value;  // update the latest value in place
            // build and append a new item to a list to log all output
            var item = document.createElement('li');
            item.textContent = value;
            output.appendChild(item);
        });
        position = messages.length - 1;
    }

    var timer;
    timer = setInterval(function() {
        // check the response for new data
        handleNewData();
        // stop checking once the response has ended
        if (xhr.readyState == XMLHttpRequest.DONE) {
            clearInterval(timer);
            latest.textContent = 'Done';
        }
    }, 1000);
</script>
23
задан p.campbell 22 May 2009 в 21:04
поделиться

5 ответов

Оказалось, что я пытался создать сертификат из файла .pfx, а не из файла .cer.

Извлеченный урок ...

  • Файлы .cer являются X.509 сертификат в двоичной форме. Они имеют кодировку DER .
  • .pfx файлы являются файлами-контейнерами . Также закодирован в DER. Они содержат не только сертификаты, но и закрытые ключи в зашифрованном виде.
33
ответ дан 28 November 2019 в 22:43
поделиться

Возможно, вам потребуется пользователь X509Certificate2() с параметром X509KeyStorageFlags.MachineKeySet. Это исправило похожую проблему, которая у нас была Благодарим оригинальный сайт, который предложил это: http://vdachev.net/2012/03/07/c-sharp-error-creating-x509certificate2-from-a-pfx-or-p12-file-in- production /

Цитирование:

Причина

Причина проблемы, похоже, не имеет ничего общего с сообщения об ошибках. По какой-то причине конструктор пытается получить доступ к хранилищу закрытых ключей, хотя закрытый ключ хранится в открываемом файле. По умолчанию используется хранилище ключей пользователя, но ASP.NET (и, возможно, неинтерактивным службам Windows в целом) не разрешено открывать его. Скорее всего, хранилище ключей пользователя для выбранной учетной записи даже не существует.

Решение

Вы можете попробовать создать хранилище ключей пользователя, войдя в учетную запись и импортировав сертификат в его Личное хранилище (а затем удалите его снова).

Другое решение состоит в том, чтобы передать дополнительный параметр конструктору - флаг, указывающий, что закрытые ключи (должны быть) хранятся на локальном компьютере - X509KeyStorageFlags.MachineKeySet, например: var certificate = new X509Certificate2(fileName, password, X509KeyStorageFlags.MachineKeySet);

Для PFX без пароля пароль можно указать как string.Empty.

См. Также https://stackoverflow.com/a/8291956/130352

.
11
ответ дан Community 28 November 2019 в 22:43
поделиться

Сообщение об ошибке «указанный сетевой пароль неверен» также возвращается, когда сертификат, который вы пытаетесь импортировать в одно из хранилищ ОС, уже присутствует в этом хранилище.

6
ответ дан Douwe 28 November 2019 в 22:43
поделиться

Вам может понадобиться X509KeyStorageFlags.MachineKeySet.

Я использую сертификат от веб-задания.

1
ответ дан ABB 28 November 2019 в 22:43
поделиться

Depending on your situation you probably need to install the certificate on the server first to get the trust level up before you export the .cer file.

I had to do this for a similar project and here were my notes on how it was accomplished.

Replace the Foo.cer with an export of the certificate installed on the server. (Install the cert from the pfx file and then export it to a cer file.)

  • Command for IIS6 to allow IIS_WPG group access to the cert key. Need to install winhttpcertcfg (You can follow the link below to grab your own copy).

    C:\Program Files\Windows Resource Kits\Tools>winhttpcertcfg -i (Path to pfx file, eg. e:\Certs\Foo.pfx) -c LOCAL_MACHINE\My -a IIS_WPG -p (Password for pfx file)

  • Spits out key info and grants privilege

    Granting private key access for account:

    (SERVERNAME)\IIS_WPG
    

Загрузите WinHttpCertCfg.msi здесь , который устанавливает exe.

Дополнительную информацию о том, как использовать конфигурацию сертификата, можно найти здесь .

Тогда это просто возвращается к тому, как вы выполняете отправку сертификата.

//Cert Challenge URL 
Uri requestURI = new Uri("https://someurl");

//Create the Request Object
HttpWebRequest pageRequest = (HttpWebRequest)WebRequest.Create(requestURI);

//After installing the cert on the server export a client cert to the working directory as Foo.cer
string certFile = MapPath("Foo.cer");
X509Certificate cert = X509Certificate.CreateFromCertFile(certFile);


//Set the Request Object parameters
pageRequest.ContentType = "application/x-www-form-urlencoded";
pageRequest.Method = "POST";
pageRequest.AllowWriteStreamBuffering = false;
pageRequest.AllowAutoRedirect = false;
pageRequest.ClientCertificates.Add(cert);

Так я передал сертификат, но не совсем уверен, что вам нужно делать со своим сертификатом, поэтому для вас это может быть не то же самое.

7
ответ дан 28 November 2019 в 22:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: