피드 구독

All of the well-known graphical web browsers ship with a collection of known and trusted Certificate Authority (CA) certificates, so when you visit a site with a certificate signed by one of those CA certificates, the browser also trusts the site. Otherwise, the browser steps through a series of warnings and options to add an exception after encouraging you to verify the certificate. There are also options to import additional CA certificates, such as those documented for Firefox.

Using CA certificates with command line utilities

CA certificates can be made available at the command line as well. A package included with many distributions, including Red Hat Enterprise Linux and Fedora, is called ca-certificates. This package is self-described as containing "the set of CA certificates chosen by the Mozilla Foundation for use with the Internet PKI." This package includes the same well-known CA certificates found in Firefox. It can be used by any CLI application that looks directly at the /etc/pki/ca-trust/extracted directory, along with the CLI applications that load one of the PKCS#11 trust modules.

Command-line utilities such as curl and wget can use these CA certificates to validate server certificates. Many tools provided with Red Hat Enterprise Linux also use these certificates, including for interactions with Red Hat support (redhat-support-tool), Red Hat OpenShift clusters (oc), and Red Hat Satellite 6 servers (hammer). Many other interactions with server API interfaces also use SSL/TLS and should validate the certificates offered.

With the ca-certificates package installed, I can use curl to view or download URL content from a site using a certificate signed by a well-known CA without error: 

$ curl https://access.redhat.com -o /tmp/sample

% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 103k 0 103k 0 0 339k 0 --:--:-- --:--:-- --:--:-- 337k

If I try to access an internal site that has a self-signed certificate (or a certificate signed by a CA that is not included with the ca-certificates package) I get a message saying the connection was refused because the certificate is not trusted:

$ curl https://somehost.internal-FQDN/

curl: (60) SSL certificate problem: self-signed certificate in certificate chain More details here: https://curl.haxx.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not establish a secure connection to it. To learn more about this situation and how to fix it, please visit the web page mentioned above.

Some documentation encourages a simple insecure connection for these internal and trusted sites. Curl can connect insecurely with the -k option:

$ curl -k https://somehost.internal-FQDN/

Or, if I have verified and downloaded my internal CA certificate, I can tell curl to verify the site with that certificate:

$ curl --cacert /path/to/cert-file https://somehost.internal-FQDN/

Other programs are similar. With the OpenShift and Origin tool for managing applications (oc), a connection to a default installed cluster may not recognize the generated, self-signed CA certificate that the cluster uses to sign other internal certificates. This issue includes a connection to CodeReady Containers:

$ oc login -u developer -p developer https://api.crc.testing:6443

The server uses a certificate signed by an unknown authority.

You can bypass the certificate check, but any data you send to the server could be intercepted by others. Use insecure connections? (y/n):

If you have a copy of the certificates, specify the client certificate with the --client-certificate="" option, or the CA certificate with the --certificate-authority="" option, when using the oc command.

Red Hat Satellite server and the CLI tool hammer work similarly, but the CA certificate can be specified at the command line or in the ~/.hammer/cli_config.yml file. The hammer command also has an option to import the Satellite CA certificate directly into the user's .hammer configuration directory:

$ hammer --fetch-ca-cert https://satellite.example.com

CA certificate for https://satellite.example.com was stored to 

..output omitted...

This command only makes the certificate available for the single user and would have to be repeated for each user on the system. To make the certificate available to all users on a system, the output of the hammer command even suggests using ca-certificates.

Updating ca-certificates to validate sites with an internal CA certificate

Instead of manually specifying the CA certificate with each command, we can add our internal CA certificates to the CA trust provided by the ca-certificates package. This package provides a directory structure in /etc/pki/ to manage the certificates and a command update-ca-trust to manage the "consolidated and dynamic configuration of CA certificates and associated trust:"

$ ls /etc/pki/ca-trust/ 
ca-legacy.conf extracted README source

$ ls /etc/pki/ca-trust/source 
anchors blacklist ca-bundle.legacy.crt README 

To add a certificate, download it, place it into the /etc/pki/ca-trust/source/anchors directory, and then run the command update-ca-trust. You will need to be root for these two tasks:

$ sudo curl http://satellite.example.com/pub/katello-server-ca.crt -o /etc/pki/ca-trust/source/anchors/satellite-ca.crt
$ sudo update-ca-trust

Once the update command is issued, the certificate is made available through the /etc/pki/ca-trust/extracted tree:

$ ls /etc/pki/ca-trust/extracted 
edk2 java openssl pem README

Applications that look to this directory to verify certificates can use any of the formats provided. The update command handles the copies, conversions, and consolidation for the different formats. The man page for update-ca-trust has more information about the directory structure, formats, and ways that certificates are accessed, but a quick way to list all of the certificate subjects in the bundle is with the following awk and openssl commands:

$ awk -v cmd='openssl x509 -noout -subject' '/BEGIN/{close(cmd)};{print | cmd}' < /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem

Now that I have added the CA certificate for my Satellite Server, I can use curl without any additional certificate options to access the API:

$ curl --request GET --user admin https://satellite.example.com/katello/api/organizations 

Enter host password for user 'admin': 

{ "total": 1, "subtotal": 1,

...output omitted...

The same is true for oc commands, hammer commands, and many other command-line applications. These utilities can use the certificates managed by ca-trust to validate your connections.

[Want to learn more about security? Check out the IT security and compliance checklist.]


저자 소개

Susan Lauber is a Consultant and Technical Trainer with her own company, Lauber System Solutions, Inc. She has over 25 years of experience working with Information Systems and specializes in Open Source technologies, specifically platform and data center installation, interoperability, automation, and security.

Susan is always an open source advocate and ambassador of projects she follows. She contributes to projects mostly by way of documentation and QA processes. She has contributed to Fedora Magazine and Opensource.com and is the author of "Linux Command Line Complete Video Course" (2016, Prentice Hall).

Susan is an independent instructor for several companies and holds an alphabet of certifications in those products. She is also a Certified Information Systems Security Professional (CISSP) and a Certified Technical Trainer (CTT). She has been a Red Hat Certified Instructor since 1999 and a co-author and contributor to several Red Hat Training student guides.

Follow her on twitter @laubersm to see what she is reading. Posts include a variety of technology topics as well as some travel, animals, sports, and other randomness.

 

Read full bio
UI_Icon-Red_Hat-Close-A-Black-RGB

채널별 검색

automation icon

오토메이션

기술, 팀, 인프라를 위한 IT 자동화 최신 동향

AI icon

인공지능

고객이 어디서나 AI 워크로드를 실행할 수 있도록 지원하는 플랫폼 업데이트

open hybrid cloud icon

오픈 하이브리드 클라우드

하이브리드 클라우드로 더욱 유연한 미래를 구축하는 방법을 알아보세요

security icon

보안

환경과 기술 전반에 걸쳐 리스크를 감소하는 방법에 대한 최신 정보

edge icon

엣지 컴퓨팅

엣지에서의 운영을 단순화하는 플랫폼 업데이트

Infrastructure icon

인프라

세계적으로 인정받은 기업용 Linux 플랫폼에 대한 최신 정보

application development icon

애플리케이션

복잡한 애플리케이션에 대한 솔루션 더 보기

Virtualization icon

가상화

온프레미스와 클라우드 환경에서 워크로드를 유연하게 운영하기 위한 엔터프라이즈 가상화의 미래