Discussione:
OT certificati
(troppo vecchio per rispondere)
BFS
2025-01-28 12:32:26 UTC
Permalink
mi scuso per l'OT
qualche anima pia pratica di certificati?

tempo fa ho sviluppato una applicazione in python che legge dati da un
serve OPC-UA e me li scrive in MSSQL SERVER per essere elaborati da Access
e tutto funziona benone.

ora al cliente arriva una nuova macchina che richiede la connessione al
server OPC-UA mediante "scambio di certificati".

Il server offre il suo ed io dovrei creare il mio.

Chatgpt mi dice:
--------------------------------------------------

Creazione del certificato con OpenSSL

Ecco come fare con OpenSSL:
a. Genera una chiave privata

Esegui il comando:

openssl genrsa -out private.key 2048

b. Crea una richiesta di firma del certificato (CSR)

Crea un CSR con:

openssl req -new -key private.key -out request.csr

Durante questo passaggio, ti verranno richieste informazioni come:

Country (C): IT
State (ST): La tua regione
Locality (L): La tua città
Organization (O): Il tuo nome aziendale
Common Name (CN): L'indirizzo IP o il nome del dominio del tuo server.

c. Genera il certificato X.509

Usa il CSR per generare un certificato auto-firmato:

openssl x509 -req -days 365 -in request.csr -signkey private.key -out
certificate.pem

Questo creerà un certificato valido per 1 anno.
d. Converti il certificato in formato DER

Converti il certificato .pem in .der:

openssl x509 -outform der -in certificate.pem -out certificate.der

Ora hai un certificato DER chiamato certificate.der.

--------------------------------------------------

faccio i vari passi...il file der mi viene creato ma quando lo setto
nella richiesta di connessione

client = Client(OPC_SERVER_URL)


client.set_security_string("Basic256Sha256,SignAndEncrypt,"+CERT_FILE+","+PRIVATE_KEY_FILE)
<-senza questa riga funziona tutto per server senza scambio
certificati (CERT_FILE=path del mio file der)

client.connect()
lo uso mi viene sempre restituito "errore di certificato"



qualche suggerimento? è la prima volta che lavoro con i certificati
mi puzza un po' il discorso del "certificato autofirmato"...forse
l'inghippo è li?



BFS
BFS
2025-01-31 07:34:05 UTC
Permalink
Post by BFS
mi scuso per l'OT
qualche anima pia pratica di certificati?
tempo fa ho sviluppato una applicazione in python che legge dati da un
serve OPC-UA e me li scrive in MSSQL SERVER per essere elaborati da Access
e tutto funziona benone.
ora al cliente arriva una nuova macchina che richiede la connessione al
server OPC-UA mediante "scambio di certificati".
Il server offre il suo ed io dovrei creare il mio.
--------------------------------------------------
Creazione del certificato con OpenSSL
a. Genera una chiave privata
openssl genrsa -out private.key 2048
b. Crea una richiesta di firma del certificato (CSR)
openssl req -new -key private.key -out request.csr
    Country (C): IT
    State (ST): La tua regione
    Locality (L): La tua città
    Organization (O): Il tuo nome aziendale
    Common Name (CN): L'indirizzo IP o il nome del dominio del tuo server.
c. Genera il certificato X.509
openssl x509 -req -days 365 -in request.csr -signkey private.key -out
certificate.pem
Questo creerà un certificato valido per 1 anno.
d. Converti il certificato in formato DER
openssl x509 -outform der -in certificate.pem -out certificate.der
Ora hai un certificato DER chiamato certificate.der.
--------------------------------------------------
faccio i vari passi...il file der mi viene creato ma quando lo setto
nella richiesta di connessione
  client = Client(OPC_SERVER_URL)
client.set_security_string("Basic256Sha256,SignAndEncrypt,"+CERT_FILE+","+PRIVATE_KEY_FILE)  <-senza questa riga funziona tutto per server senza scambio certificati (CERT_FILE=path del mio file der)
  client.connect()
 lo uso mi viene sempre restituito "errore di certificato"
qualche suggerimento? è la prima volta che lavoro con i certificati
mi puzza un po' il discorso del "certificato autofirmato"...forse
l'inghippo è li?
BFS
risolto...
se mai un giorno servirà a qualcuno, il problema era sulla parte python.
quando ci si connette con il seguente codice:

#creo il client
client = Client(server_url)

#attivo la sicurezza mediante scambio di certificati
client.set_security_string("Basic256Sha256,SignAndEncrypt," + CERT_FILE
+ "," +PRIVATE_KEY_FILE)

#non scrivevo questa !!!
client.application_uri="urn:opcua:python:server"

#connetto
client.connect()


va aggiunta la riga dove si setta l'applicazion uri e l'uri deve essere
lo stesso di quello inserito nel certificato generato con openssl

in questo modo il certificato viene accettato dal server e la
sottoscrizione dei nodi funziona.


le istruzioni per generare il certificato con openSSL sono:
Generate your own x509v3 Certificate

Step 1: Change ssl.conf (subjectAltname, country, organizationName, ...)

ssl.conf:

[ req ]
default_bits = 2048
default_md = sha256
distinguished_name = subject
req_extensions = req_ext
x509_extensions = req_ext
string_mask = utf8only
prompt = no

[ req_ext ]
basicConstraints = CA:FALSE
nsCertType = client, server
keyUsage = nonRepudiation, digitalSignature, keyEncipherment,
dataEncipherment, keyCertSign
extendedKeyUsage= serverAuth, clientAuth
nsComment = "OpenSSL Generated Certificat"
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
subjectAltName = URI:urn:opcua:python:server,IP: 127.0.0.1

[ subject ]
countryName = DE
stateOrProvinceName = HE
localityName = HE
organizationName = AndreasHeine
commonName = PythonOpcUaServer

Step 2: openssl genrsa -out key.pem 2048
Step 3: openssl req -x509 -days 365 -new -out certificate.pem -key
key.pem -config ssl.conf


BFS

Loading...