Ho ricevuto una mail in merito al mio articolo sulla cifratura dei dati in SQL Server 2005 (http://www.visual-basic.it/articoli/lbSQLprotection.htm) dove un utente mi chiedeva cosa sarebbe successo alla scadenza di un certificato digitale. La risposta è molto semplice: non succede nulla.
Come si può leggere nel BOL alla voce CREATE CERTIFICATE, viene riportato che "Built-in functions for encryption and signing do not check the expiration dates of certificates. Users of these functions must decide when to check certificate expiration." Pertanto le proprietà relative al range temporale di validità (sia la EXPIRY_DATE che la START_DATE) vengono, allo stato attuale, ignorate. E' possibile testare la cosa riadattando lo script fornito nell'articolo, ovvero generando il database, la tabella di test e la DMK con
=======================
USE master;
IF EXISTS (SELECT 1 FROM sys.databases WHERE name = 'CryptoDB')
DROP DATABASE CryptoDB;
GO
CREATE DATABASE CryptoDB;
GO
USE CryptoDB;
CREATE TABLE dbo.CreditCard (
ID SMALLINT IDENTITY (1, 1) NOT NULL,
Nome VARCHAR(20) NOT NULL,
Tipo VARCHAR(20) NOT NULL,
Numero VARBINARY(128) NOT NULL,
Note VARCHAR(255) NULL
);
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Sc7\n>qp*X¤0?@';
GO
=======================
ed a questo punto creando 2 certificati: uno già scaduto ed uno con una start_date futura
=======================
CREATE CERTIFICATE ExpiredCert
WITH SUBJECT = 'Test Cert SQL2K5 - LB',
START_DATE = '20060101',
EXPIRY_DATE = '20060301';
CREATE CERTIFICATE NotYetValidCert
WITH SUBJECT = 'Test Cert SQL2K5 - LB',
START_DATE = '20060401',
EXPIRY_DATE = '20061231';
=======================
da notare che in fase di creazione viene visualizzato un warning rispettivamente di
Warning: The certificate you created is expired.
e
Warning: The certificate you created is not yet valid; its start date is in the future.
Tuttavia è possibile utilizzare entrambi i certificati per inserire dei dati...
=======================
INSERT dbo.CreditCard VALUES (
'Luca' ,
'Visa' ,
EncryptByCert(Cert_ID('ExpiredCert'), '1111-2222-3333-4444') ,
'Cifrato con Certificato digitale scaduto')
INSERT dbo.CreditCard VALUES (
'Lorenzo' ,
'Visa' ,
EncryptByCert(Cert_ID('NotYetValidCert'), '1234-5678-8765-4321') ,
'Cifrato con Certificato digitale non ancora valido')
=======================
...ed anche per leggerli...
=======================
SELECT Nome,
Tipo,
CONVERT(varchar, DecryptByCert(Cert_ID('ExpiredCert'), Numero)),
Note
FROM dbo.CreditCard
SELECT Nome,
Tipo,
CONVERT(varchar, DecryptByCert(Cert_ID('NotYetValidCert'), Numero)),
Note
FROM dbo.CreditCard
=======================
In questa versione di SQL Server un eventuale controllo di validità del certificato deve essere fatto in maniera manuale accedendo alle informazioni contenute nella vista sys.certificates ma è auspicabile che nelle prossime versioni di SQL Server l'infrastruttura PKI venga potenziata e vengano rese disponibili delle funzionalità aggiuntive.
Bye
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- Tempo di commiati, il 4 giugno 2007 alle 15:04
- White paper su vardecimal storage format, il 30 maggio 2007 alle 10:49
- Tools per SQL Server, il 24 maggio 2007 alle 08:34
- Serie di articoli su SSIS, il 17 maggio 2007 alle 08:32
- Non c'è pace per il SP2, il 4 maggio 2007 alle 09:39
- Recuperare informazioni sugli indici, il 29 aprile 2007 alle 19:04