Artigo: 216829 - Última revisão: quinta-feira, 23 de Junho de 2005 - Revisão: 3.2

Como escrever um certificado de autenticação de cliente para um ficheiro no IIS 4.0

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Recomendamos vivamente que todos os utilizadores actualizem para Microsoft (IIS) 6.0 em execução no Microsoft Windows Server 2003. O IIS 6.0 aumenta significativamente a Web infra-estrutura de segurança. Para mais informações sobre tópicos relacionados com a segurança do IIS, visite o seguinte Web site da Microsoft:
http://www.microsoft.com/technet/security/prodtech/IIS.mspx (http://www.microsoft.com/technet/security/prodtech/IIS.mspx)
Expandir tudo | Reduzir tudo

Sumário

Por vezes, poderá ser útil armazenar um certificado de chave pública para utilização futura. O seguinte código ASP tem o cliente de certificado de autenticação fornecido pelo cliente e escreve-lo para um ficheiro denominado c:\Cert.txt.

Para que isto funcione, terá de configurar primeiro um directório virtual a utilizar o SSL e necessitam de um certificado de autenticação de cliente. É possível analisar o certificado utilizando a ferramenta CERTUTIL fornecido com o Windows NT Option Pack. Para obter mais informações sobre como efectuar este procedimento, consulte o seguinte artigo na base de dados de conhecimento da Microsoft:
216830  (http://support.microsoft.com/kb/216830/EN-US/ ) IIS: Como visualizar o conteúdo de um certificado
Segue-se o código ASP necessário para esta opção para trabalhar:

<% @Language = VBScript %>
<% Response.Buffer = True %>
<HTML>
<BODY> 
<% 
	'Instantiate the ASP FileSystemObject in order
	'to create a text file
	Set fs = Server.CreateObject("Scripting.FileSystemObject")

	'Create text file using append mode
         Set outStream = fs.OpenTextFile( "C:\cert.txt", 8, True )

	'Save certificate issuer information to text file
         outStream.WriteLine( "# Issuer: " & Request.ClientCertificate("Issuer") )

         'Extract certificate subject (user) and account information
	'from certificate
         su = Request.ClientCertificate( "Subject" )
         mx = len(su)
         for x = 1 to mx
            if mid(su,x,1)=chr(10) or mid(su,x,1)=chr(13) then
               su=left(su,x-1)+";"+right(su,mx-x)
	    end if
         next
         outStream.WriteLine( "# Subject: " & su )
	 outStream.WriteLine( "# Account: " & Request.ServerVariables("REMOTE_USER") )

	'Extract encrypted certificate text from certificate; encode text as 64-bit data 
         uue = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

         outStream.WriteLine( "-----BEGIN CERTIFICATE-----" )
         cer = Request.ClientCertificate( "Certificate" )
         lcer = len(cer)
         l = 0

         for x = 1 to lcer step 3
            a1 = asc(mid(cer,x,1))
            if x+1 <= lcer then
                a2 = asc(mid(cer,x+1,1))
                if x+2 <=lcer then
                    a3 = asc(mid(cer,x+2,1))
                else
                    a3 = 0
                end if
            else
                a2 = 0
                a3 = 0
            end if
            outStream.Write mid(uue, (a1 and 252)/4 +1 ,1)
            outStream.Write mid(uue, (a1 and 3)*16 + (a2 and 240)/16 +1 ,1)
            if x+1 <= lcer then
                outStream.Write mid(uue, (a2 and 15)*4 + (a3 and 192)/64 +1 ,1)
                if x+2 <= lcer then
                    outStream.Write mid(uue, (a3 and 63) +1 ,1)
                else
                    outStream.Write "="
                end if
            else
                outStream.Write "=="
            end if
            l = l +4
            if l = 64 then
                outStream.WriteLine("")
                l = 0
            end if
         next
         if l > 0 then
	     outStream.WriteLine( "" )
         end if
         outStream.WriteLine( "-----END CERTIFICATE-----" )
         
         Response.Write "Client certificate information has been received and logged successfully<br>"
 %>
</BODY> 

				

A informação contida neste artigo aplica-se a:
  • Microsoft Internet Information Server 4.0
Palavras-chave: 
kbmt kbhowto KB216829 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 216829  (http://support.microsoft.com/kb/216829/en-us/ )