Network Options
NetworkOptions.ca_roots
— Functionca_roots() :: Union{Nothing, String}
La función ca_roots()
indica al llamador dónde, si es que hay algún lugar, encontrar un archivo o directorio de raíces de autoridad de certificación codificadas en PEM. Por defecto, en sistemas como Windows y macOS donde los motores TLS integrados saben cómo verificar hosts utilizando el mecanismo de verificación de certificados integrado del sistema, esta función devolverá nothing
. En sistemas UNIX clásicos (excluyendo macOS), los certificados raíz se almacenan típicamente en un archivo en /etc
: se buscarán los lugares comunes para el sistema UNIX actual y si uno de estos caminos existe, se devolverá; si ninguno de estos caminos típicos de certificados raíz existe, entonces se devolverá la ruta al conjunto de certificados raíz que están empaquetados con Julia.
El valor predeterminado devuelto por ca_roots()
puede ser anulado configurando las variables de entorno JULIA_SSL_CA_ROOTS_PATH
, SSL_CERT_DIR
o SSL_CERT_FILE
, en cuyo caso esta función siempre devolverá el valor de la primera de estas variables que esté configurada (ya sea que la ruta exista o no). Si JULIA_SSL_CA_ROOTS_PATH
se establece en la cadena vacía, entonces se ignoran las otras variables (como si no estuvieran configuradas); si las otras variables se establecen en la cadena vacía, se comportan como si no estuvieran configuradas.
NetworkOptions.ca_roots_path
— Functionca_roots_path() :: String
La función ca_roots_path()
es similar a la función ca_roots()
, excepto que siempre devuelve una ruta a un archivo o directorio de raíces de autoridad de certificación codificadas en PEM. Cuando se llama en un sistema como Windows o macOS, donde los certificados raíz del sistema no se almacenan en el sistema de archivos, actualmente devolverá la ruta al conjunto de certificados raíz que están empaquetados con Julia. (En el futuro, esta función podría extraer los certificados raíz del sistema y guardarlos en un archivo cuya ruta se devolvería).
Si es posible configurar una biblioteca que use TLS para utilizar los certificados del sistema, eso es generalmente preferible: es decir, es mejor usar ca_roots()
que devuelve nothing
para indicar que se deben usar los certificados del sistema. La función ca_roots_path()
solo debe usarse al configurar bibliotecas que requieren una ruta a un archivo o directorio para los certificados raíz.
El valor predeterminado devuelto por ca_roots_path()
puede ser anulado configurando las variables de entorno JULIA_SSL_CA_ROOTS_PATH
, SSL_CERT_DIR
o SSL_CERT_FILE
, en cuyo caso esta función siempre devolverá el valor de la primera de estas variables que esté configurada (ya sea que la ruta exista o no). Si JULIA_SSL_CA_ROOTS_PATH
se establece en la cadena vacía, entonces se ignoran las otras variables (como si no estuvieran configuradas); si las otras variables se establecen en la cadena vacía, se comportan como si no estuvieran configuradas.
NetworkOptions.ssh_dir
— Functionssh_dir() :: String
La función ssh_dir()
devuelve la ubicación del directorio donde el programa ssh
guarda/busca archivos de configuración. Por defecto, esto es ~/.ssh
, pero se puede anular configurando la variable de entorno SSH_DIR
.
NetworkOptions.ssh_key_pass
— Functionssh_key_pass() :: String
La función ssh_key_pass()
devuelve el valor de la variable de entorno SSH_KEY_PASS
si está configurada o nothing
si no está configurada. En el futuro, esto podría ser capaz de encontrar una contraseña por otros medios, como almacenamiento seguro del sistema, por lo que los paquetes que necesiten una contraseña para descifrar una clave privada SSH deberían usar esta API en lugar de verificar directamente la variable de entorno para que obtengan tales capacidades automáticamente cuando se añadan.
NetworkOptions.ssh_key_name
— Functionssh_key_name() :: String
La función ssh_key_name()
devuelve el nombre base de los archivos de clave que SSH debería usar al establecer una conexión. Por lo general, no hay razón para que esta función se llame directamente y las bibliotecas deberían usar generalmente las funciones ssh_key_path
y ssh_pub_key_path
para obtener rutas completas. Si la variable de entorno SSH_KEY_NAME
está establecida, entonces esta función devuelve eso; de lo contrario, devuelve id_rsa
por defecto.
NetworkOptions.ssh_key_path
— Functionssh_key_path() :: String
La función ssh_key_path()
devuelve la ruta del archivo de clave privada SSH que debe usarse para las conexiones SSH. Si la variable de entorno SSH_KEY_PATH
está configurada, entonces devolverá ese valor. De lo contrario, por defecto devolverá
joinpath(ssh_dir(), ssh_key_name())
Este valor por defecto, a su vez, depende de las variables de entorno SSH_DIR
y SSH_KEY_NAME
.
NetworkOptions.ssh_pub_key_path
— Functionssh_pub_key_path() :: String
La función ssh_pub_key_path()
devuelve la ruta del archivo de clave pública SSH que debe usarse para las conexiones SSH. Si la variable de entorno SSH_PUB_KEY_PATH
está establecida, entonces devolverá ese valor. Si no está establecida pero SSH_KEY_PATH
está configurada, devolverá esa ruta con el sufijo .pub
añadido. Si ninguna de las dos está establecida, por defecto devolverá
joinpath(ssh_dir(), ssh_key_name() * ".pub")
Este valor por defecto, a su vez, depende de las variables de entorno SSH_DIR
y SSH_KEY_NAME
.
NetworkOptions.ssh_known_hosts_files
— Functionssh_known_hosts_files() :: Vector{String}
La función ssh_known_hosts_files()
devuelve un vector de rutas de archivos de hosts conocidos de SSH que deben ser utilizados al establecer las identidades de los servidores remotos para conexiones SSH. Por defecto, esta función devuelve
[joinpath(ssh_dir(), "known_hosts"), bundled_known_hosts]
donde bundled_known_hosts
es la ruta de una copia de un archivo de hosts conocidos que está empaquetado con este paquete (que contiene claves de hosts conocidos para github.com
y gitlab.com
). Sin embargo, si la variable de entorno SSH_KNOWN_HOSTS_FILES
está configurada, su valor se divide en rutas en el carácter :
(o en ;
en Windows) y este vector de rutas se devuelve en su lugar. Si algún componente de este vector está vacío, se expande a las rutas de hosts conocidos por defecto.
Los paquetes que utilizan ssh_known_hosts_files()
deberían idealmente buscar entradas coincidentes comparando el nombre del host y los tipos de clave, considerando la primera entrada en cualquiera de los archivos que coincida como la identidad definitiva del host. Si el llamador no puede comparar el tipo de clave (por ejemplo, porque ha sido hasheada), entonces debe aproximar el algoritmo anterior buscando todas las entradas coincidentes para un host en cada archivo: si un archivo tiene alguna entrada para un host, entonces una de ellas debe coincidir; el llamador solo debe continuar buscando en otros archivos de hosts conocidos si no hay entradas para el host en cuestión en un archivo anterior.
NetworkOptions.ssh_known_hosts_file
— Functionssh_known_hosts_file() :: String
La función ssh_known_hosts_file()
devuelve una única ruta de un archivo de hosts conocidos de SSH que debe utilizarse al establecer las identidades de los servidores remotos para conexiones SSH. Devuelve la primera ruta devuelta por ssh_known_hosts_files
que realmente existe. Los llamadores que pueden buscar en más de un archivo de hosts conocidos deben usar ssh_known_hosts_files
en su lugar y buscar coincidencias de hosts en todos los archivos devueltos, como se describe en la documentación de esa función.
NetworkOptions.verify_host
— Functionverify_host(url::AbstractString, [transport::AbstractString]) :: Bool
La función verify_host
indica al llamador si se debe verificar la identidad de un host al comunicarse a través de transportes seguros como TLS o SSH. El argumento url
puede ser:
- una URL adecuada que comience con
proto://
- un nombre de host desnudo al estilo
ssh
o un nombre de host precedido poruser@
- un host al estilo
scp
como se mencionó anteriormente, seguido de:
y una ubicación de ruta
En cada caso, la parte del nombre del host se extrae y la decisión sobre si verificar o no se toma únicamente en función del nombre del host, no de nada más sobre la URL de entrada. En particular, el protocolo de la URL no importa (más abajo).
El argumento transport
indica el tipo de transporte sobre el que se realiza la consulta. Los valores actualmente conocidos son SSL
/ssl
(alias TLS
/tls
) y SSH
/ssh
. Si se omite el transporte, la consulta devolverá true
solo si el nombre del host no debe ser verificado independientemente del transporte.
El nombre del host se compara con los patrones de host en las variables de entorno relevantes dependiendo de si se proporciona transport
y cuál es su valor:
JULIA_NO_VERIFY_HOSTS
— hosts que no deben ser verificados para ningún transporteJULIA_SSL_NO_VERIFY_HOSTS
— hosts que no deben ser verificados para SSL/TLSJULIA_SSH_NO_VERIFY_HOSTS
— hosts que no deben ser verificados para SSHJULIA_ALWAYS_VERIFY_HOSTS
— hosts que siempre deben ser verificados
Los valores de cada una de estas variables son una lista separada por comas de patrones de nombres de host con la siguiente sintaxis: cada patrón se divide en .
en partes y cada parte debe ser una de:
- Un componente de nombre de dominio literal que consiste en una o más letras ASCII, dígitos, guiones o guiones bajos (técnicamente no es parte de un nombre de host legal, pero a veces se usa). Un componente de nombre de dominio literal coincide solo consigo mismo.
- Un
**
, que coincide con cero o más componentes de nombre de dominio. - Un
*
, que coincide con cualquier componente de nombre de dominio.
Al comparar un nombre de host con una lista de patrones en una de estas variables, el nombre del host se divide en .
en componentes y esa secuencia de palabras se compara con el patrón: un patrón literal coincide exactamente con un componente de nombre de host con ese valor; un patrón *
coincide exactamente con un componente de nombre de host con cualquier valor; un patrón **
coincide con cualquier número de componentes de nombre de host. Por ejemplo:
**
coincide con cualquier nombre de host**.org
coincide con cualquier nombre de host en el dominio de nivel superior.org
example.com
coincide solo con el nombre de host exactoexample.com
*.example.com
coincide conapi.example.com
pero no conexample.com
ov1.api.example.com
**.example.com
coincide con cualquier dominio bajoexample.com
, incluyendoexample.com
mismo,api.example.com
yv1.api.example.com
```