Author Topic: OpenSSL 1.0.1e iz Fedorinog src.rpm-a i zakrpe za RedHat 6.4  (Read 2218 times)

Zeleni_Obad

  • Administrator
  • Hero Member
  • *****
  • Posts: 969
    • BSDSrbija
OpenSSL 1.0.1e iz Fedorinog src.rpm-a i zakrpe za RedHat 6.4
« on: September 23, 2013, 10:32:46 am »
UPOZORENJE: Ne radite postupke naznačene ovde! Ovako napravljeni rpm-ovi rade, ali su obećanje problema - ogroman broj paketa za EL napravljen je na osnovu openssl-a koji biva isporučen uz distro. Ako ste instalirali rpm-ove, napravite downgrade na pakete iz zvaničnih repozitorija. Tekst ostaje samo radi edukativnih upotreba, zbog pogođene greške u linkeru, za nm. Upozoreni ste :)


Ove upute za instalaciju openssl-a s podrškom za Elliptic Curve Crypto vrede za Scientific Linux 6.4 x86_64. Ova metoda oprobana je na takvom linuksu instaliranom u virtuelnoj mašini. Prilikom instalacije odabrana je opcija "Basic Server". Po instalaciji, kao root, ažuriramo mašinu i potom restartujemo mašinu:
Code: [Select]
yum -y update
reboot
Po restartu, kao root, dodajemo još i paket "imake", devel pakete za zlib i Kerberos, te grupu paketa za razvoj:

Code: [Select]
yum -y install imake
yum -y install krb5-devel zlib-devel
yum -y groupinstall "Development tools"
Nećemo praviti pakete kao root, pa dodajemo korisnika, odnosno obični nalog, i dodajemo mu lozinku:
Code: [Select]
adduser -m -G wheel tester
passwd tester
te koristimo novi nalog da oblikujemo pakete:
Code: [Select]
su - tester
Kao "obični" korisnik, prvo kreiramo direktorije potrebne za oblikovanje uz rpmbuild, kao i direktorij u kom možemo čuvati stvari koje nam mogu usput zatrebati:
Code: [Select]
cd
mkdir -p rpmbuild/{BUILD,BUILDROOT,RPMS,SRPMS,SOURCES,SPECS}
mkdir Downloads
Potom prvo prevučemo verziju openssl-a koji dolazi uz ovaj distro, jer bi prevlačenje posle instalacije loše verzije bilo potpuno onemogućeno, pa bismo morali iznova sve instalirati. Ovaj korak je, naravno, "po želji", i obratite pažnju na verziju - ovde je x86_64 u pitanju:
Code: [Select]
cd Downloads
wget http://ftp.arnes.si/mirrors/scientific/6x/x86_64/os/Packages/openssl-1.0.0-27.el6.x86_64.rpm
Trebamo još i zakrpe za RedHat 6.4 distribucije, pa ih preuzmemo s neke od lokacija s kojih su dostupni, kao na primer sa:
Code: [Select]
wget -A "openssl*patch" -np -nd -nH -r -e robots=off --wait 1 http://www.hackerspace.rs.ba/zakrpe/
ili sa:
Code: [Select]
wget https://www.bsdserbia.org/index.php?action=dlattach;topic=1299.0;attach=39
wget https://www.bsdserbia.org/index.php?action=dlattach;topic=1299.0;attach=40
wget https://www.bsdserbia.org/index.php?action=dlattach;topic=1299.0;attach=41
i spremni smo za izmenu openssl-a.
Code: [Select]
[tester@tester2 Downloads]$ ls -Alh
total 1.4M
-rw-rw-r--. 1 tester tester 1.4M Feb 22  2013 openssl-1.0.0-27.el6.x86_64.rpm
-rw-rw-r--. 1 tester tester 1.8K Sep 23 09:13 openssl-1.0.1e-env-zlib.patch
-rw-rw-r--. 1 tester tester 8.5K Sep 23 09:13 openssl-1.0.1e-secure-getenv.patch
-rw-rw-r--. 1 tester tester 1.2K Sep 23 09:13 openssl.spec.nm.patch
[tester@tester2 Downloads]$
Sada pratimo upute za Fedoru 19 i openssl-1.0.1e, koje se mogu pročitati na adresi http://danielpocock.com/ussing-ecc-ecdsa-in-openssl-and-strongswan-fedora odnosno radimo sledeće korake, kao "obični korisnik":
Code: [Select]
cd
echo '%_topdir      %(echo $HOME)/rpmbuild' > ~/.rpmmacros
cd ~/rpmbuild/SRPMS
wget http://dl.fedoraproject.org/pub/fedora/linux/releases/19/Everything/source/SRPMS/o/openssl-1.0.1e-4.fc19.src.rpm
rpm -i openssl-1.0.1e-4.fc19.src.rpm
cd ../SOURCES/
wget http://www.openssl.org/source/openssl-1.0.1e.tar.gz
mv openssl-1.0.1e-env-zlib.patch openssl-1.0.1e-env-zlib.patch.orig
cp ~/Downloads/openssl-1.0.1e-env-zlib.patch .
mv openssl-1.0.1e-secure-getenv.patch openssl-1.0.1e-secure-getenv.patch.orig
cp ~/Downloads/openssl-1.0.1e-secure-getenv.patch .
cd ../SPECS
wget http://zxvdr.fedorapeople.org/openssl.spec.ec_patch
cp ~/Downloads/openssl.spec.nm.patch .
patch -p0 < openssl.spec.ec_patch
sed -i -e 's/-usa.tar.xz/.tar.gz/' openssl.spec
patch -p0 < openssl.spec.nm.patch
Na to će se pojavi pritužba, pa treba prihvatiti zakrpu:
Code: [Select]
patching file openssl.spec
Reversed (or previously applied) patch detected!  Assume -R? [n] y
patching file openssl.spec
Konačno, treba izoblikovati nove openssl pakete:
Code: [Select]
rpmbuild -bb openssl.spec
Po završetku oblikovanja, u ~/rpmbuild/RPMS/x86_64/ direktoriju su novi paketi, sa openssl-om koji podržava ECC.
Code: [Select]
[tester@tester2 SPECS]$ cd ../RPMS/x86_64/
[tester@tester2 x86_64]$ ls
openssl-1.0.1e-4.el6.x86_64.rpm
openssl-debuginfo-1.0.1e-4.el6.x86_64.rpm
openssl-devel-1.0.1e-4.el6.x86_64.rpm
openssl-libs-1.0.1e-4.el6.x86_64.rpm
openssl-perl-1.0.1e-4.el6.x86_64.rpm
openssl-static-1.0.1e-4.el6.x86_64.rpm
Potrebno je još veoma neelegantno ih silom zameniti za postojeće, kao root, ili uz sudo. Potražimo sve instalirane openssl-pakete:
Code: [Select]
rpm -qa openssl\*
openssl-1.0.0-27.el6_4.2.x86_64
A potom ih isčupamo sa sistema:
Code: [Select]
rpm -e --noscripts --nodeps openssl-1.0.0-27.el6_4.2.x86_64
rpm -qa openssl\* | wc -l
Prebrojavanje bi trebalo da kaže da ih nema više, a onda dodamo nove:
Code: [Select]
rpm -Uvh openssl-libs-1.0.1e-4.el6.x86_64.rpm openssl-devel-1.0.1e-4.el6.x86_64.rpm openssl-1.0.1e-4.el6.x86_64.rpm
I novi paketi su sada tu:
 
Code: [Select]
Preparing...                ########################################### [100%]
   1:openssl-libs           ########################################### [ 33%]
   2:openssl-devel          ########################################### [ 67%]
   3:openssl                ########################################### [100%]
Proverimo sve:
Code: [Select]
rpm -qa openssl\*
i vidimo:
Code: [Select]
openssl-devel-1.0.1e-4.el6.x86_64
openssl-libs-1.0.1e-4.el6.x86_64
openssl-1.0.1e-4.el6.x86_64
te:
 
Code: [Select]
openssl ciphers -v 'TLSv1.2' | head -4
pa vidmo da je ECC sada tu:
Code: [Select]
ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(256) Mac=AEAD
ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AESGCM(256) Mac=AEAD
ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AES(256)  Mac=SHA384
ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH     Au=ECDSA Enc=AES(256)  Mac=SHA384
Ostaje patnja s praćenjem ovih paketa mimo repozitorija, bar dok se pojave zvanične, dobre verzije openssl-a za RedHat.

« Last Edit: September 27, 2013, 11:17:37 pm by Zeleni_Obad »

Zeleni_Obad

  • Administrator
  • Hero Member
  • *****
  • Posts: 969
    • BSDSrbija
Re: OpenSSL 1.0.1e iz Fedorinog src.rpm-a i zakrpe za RedHat 6.4
« Reply #1 on: September 23, 2013, 10:54:47 am »
Napomena za oprezne: sve tri zakrpe koje preuzimate za ovo krpljenje razlikuju se u samo par sitnih ali bitnih detalja od zakrpa koje dolaze uz Fedorin src.rpm, a zakrpa koju ja dodajem dodaje samo tri linije: sve linije tiču se strippinga dinamičkih biblioteka, u kojima se nm iz nekog razloga na Fedori koristi bez switch-a "-D", i to onda nekako uprska oblikovanje koda openssl-a za RedHat. Uostalom, najpametnije je i sam pogledati šta je u zakrpama:

Code: [Select]
diff openssl-1.0.1e-env-zlib.patch.orig openssl-1.0.1e-env-zlib.patch
25c25
< +/* for secure_getenv */
---
> +/* for __secure_getenv */
35c35
< + if (ssl_comp_methods != NULL && secure_getenv("OPENSSL_DEFAULT_ZLIB") != NULL)
---
> + if (ssl_comp_methods != NULL && __secure_getenv("OPENSSL_DEFAULT_ZLIB") != NULL)
38a39
>
Code: [Select]
diff openssl-1.0.1e-secure-getenv.patch.orig openssl-1.0.1e-secure-getenv.patch
18c18
< + p=secure_getenv(name);
---
> + p=__secure_getenv(name);
27c27
< + return (secure_getenv(name));
---
> + return (__secure_getenv(name));
49c49
< + file = secure_getenv("OPENSSL_CONF");
---
> + file = __secure_getenv("OPENSSL_CONF");
244a245
>
Code: [Select]
diff openssl.spec.orig openssl.spec.nm.patch | grep "> +"
> +++ openssl.spec.zapatch 2013-09-23 07:40:21.270000219 +0200
> +sed -i 's/NM= nm/NM= nm -D/' Makefile
> +sed -i 's/NM=nm/NM=nm -D/' Makefile.shared*
> +sed -i '12iNM=nm -D' apps/Makefile
> +++ openssl.spec.zapatch 2013-09-23 07:40:21.270000219 +0200
> +sed -i 's/NM= nm/NM= nm -D/' Makefile
> +sed -i 's/NM=nm/NM=nm -D/' Makefile.shared*
> +sed -i '12iNM=nm -D' apps/Makefile

Svako poboljšanje i primedba su dobrodošli, posebno ako mislite da može sve da se ubaci u jedan patch, koji će da sredi nm "u cugu".

Zeleni_Obad

  • Administrator
  • Hero Member
  • *****
  • Posts: 969
    • BSDSrbija
Re: OpenSSL 1.0.1e iz Fedorinog src.rpm-a i zakrpe za RedHat 6.4
« Reply #2 on: September 23, 2013, 11:16:39 am »
Ovo smo zaboravili:
Code: [Select]
$ sha256 openssl-1.0.1e-env-zlib.patch       
SHA256 (openssl-1.0.1e-env-zlib.patch) = b60da43f16c90e633ed59e7022a4cf237bd73260603c02660eafdd2b4f3149db
$ sha256 openssl-1.0.1e-secure-getenv.patch 
SHA256 (openssl-1.0.1e-secure-getenv.patch) = 6f5cef95c717612ed1a87161e5daad708444d029fcf2fbb4b95782ef6fa03f82
$ sha256 openssl.spec.nm.patch               
SHA256 (openssl.spec.nm.patch) = e9585a823f0e524c47d4de7829456b772db18725baa601d0fe59381f00403f66

A može i da se skine odavde:
Code: [Select]
http://www.hackerspace.rs.ba/zakrpe/sha256_za_openssl_zakrpe.txt
ili odavde:
Code: [Select]
https://www.bsdserbia.org/index.php?action=dlattach;topic=1299.0;attach=42
« Last Edit: September 23, 2013, 11:20:50 am by Zeleni_Obad »

Zeleni_Obad

  • Administrator
  • Hero Member
  • *****
  • Posts: 969
    • BSDSrbija
Re: OpenSSL 1.0.1e iz Fedorinog src.rpm-a i zakrpe za RedHat 6.4
« Reply #3 on: September 23, 2013, 11:50:42 am »
Za one prepune poverenja, ili s premalo strpljenja, ili oboje :) evo i paketa:

Code: [Select]
http://www.hackerspace.rs.ba/paketi/openssl/openssl-1.0.1e_za_RedHat-6.4_sa_ECC/openssl-1.0.1e-4.el6.x86_64.rpm
http://www.hackerspace.rs.ba/paketi/openssl/openssl-1.0.1e_za_RedHat-6.4_sa_ECC/openssl-debuginfo-1.0.1e-4.el6.x86_64.rpm
http://www.hackerspace.rs.ba/paketi/openssl/openssl-1.0.1e_za_RedHat-6.4_sa_ECC/openssl-devel-1.0.1e-4.el6.x86_64.rpm
http://www.hackerspace.rs.ba/paketi/openssl/openssl-1.0.1e_za_RedHat-6.4_sa_ECC/openssl-libs-1.0.1e-4.el6.x86_64.rpm
http://www.hackerspace.rs.ba/paketi/openssl/openssl-1.0.1e_za_RedHat-6.4_sa_ECC/openssl-perl-1.0.1e-4.el6.x86_64.rpm
http://www.hackerspace.rs.ba/paketi/openssl/openssl-1.0.1e_za_RedHat-6.4_sa_ECC/openssl-static-1.0.1e-4.el6.x86_64.rpm
a sha256 je takodje potrebno pregledati ili prevući i uporediti, hackerspace.rs.ba:
Code: [Select]
http://www.hackerspace.rs.ba/paketi/openssl/openssl-1.0.1e_za_RedHat-6.4_sa_ECC/sha256_za_pakete.txt
ili odavde, u prilogu, ili ovako:
Code: [Select]
SHA256 (openssl-1.0.1e-4.el6.x86_64.rpm) = 44a837243abc20bafe7e7d71f95b1f520109e49aa1146a306e69cc7dca4f62d4
SHA256 (openssl-debuginfo-1.0.1e-4.el6.x86_64.rpm) = b6a41b96b28ffc125e479472af7e41ebfa8119ed289335b3cc66d9c683eab393
SHA256 (openssl-devel-1.0.1e-4.el6.x86_64.rpm) = 3b8b853301867035375e101363a2782e798cda9007511612e7c109c38f8f4807
SHA256 (openssl-libs-1.0.1e-4.el6.x86_64.rpm) = 1245894febd30e7b275330e57ff17ec2ddb83b74a887055fd926f4f00371cedc
SHA256 (openssl-perl-1.0.1e-4.el6.x86_64.rpm) = d0c2a7cb5b35d723ea09f51945ffbd53c0b50648f994a2a9a7c45a78eacd971f
SHA256 (openssl-static-1.0.1e-4.el6.x86_64.rpm) = b2868543d69d38583c2e221ce24f94d5fb81d0e136f040a4c929c04a85d05322

Zeleni_Obad

  • Administrator
  • Hero Member
  • *****
  • Posts: 969
    • BSDSrbija
Re: OpenSSL 1.0.1e iz Fedorinog src.rpm-a i zakrpe za RedHat 6.4
« Reply #4 on: September 23, 2013, 12:06:48 pm »
Više o tome kako i zašto ovo radimo, u threadu https://www.bsdserbia.org/index.php?topic=1299.msg10649#msg10649

Zeleni_Obad

  • Administrator
  • Hero Member
  • *****
  • Posts: 969
    • BSDSrbija
Re: OpenSSL 1.0.1e iz Fedorinog src.rpm-a i zakrpe za RedHat 6.4
« Reply #5 on: November 26, 2013, 11:19:03 am »
Ovo vam se mora dopasti: preuzeo sam openssl.src.rpm za Fedoru 20, čija će stabilna verzija biti objavljena za nešto više od dve sedmice, i zavirio u openssl.spec. Dve-tri linije su posebno interesantne:

Code: [Select]
./Configure \
        --prefix=%{_prefix} --openssldir=%{_sysconfdir}/pki/tls ${sslflags} \
        zlib enable-camellia enable-seed enable-tlsext enable-rfc3779 \
        enable-cms enable-md2 no-mdc2 no-rc5 no-ec2m no-gost no-srp \
        --with-krb5-flavor=MIT --enginesdir=%{_libdir}/openssl/engines \
        --with-krb5-dir=/usr shared  ${sslarch} %{?!nofips:fips}
te
Code: [Select]
* Fri Nov  8 2013 Tomáš Mráz <tmraz@redhat.com> 1.0.1e-31
- add back support for secp521r1 EC curve
- add aarch64 to Configure (#969692)
i
Code: [Select]
* Thu Oct 24 2013 Tomáš Mráz <tmraz@redhat.com> 1.0.1e-29
- do not advertise ECC curves we do not support (#1022493)

Neko u Fedori ipak prati puls zajednice? :)

P.S. ako je i vas Fedora prethodno pošteno iznervirala, da biste pogledali src.rpm na Debianu ;) možete raspakovati src.rpm i bez Alien-a, pomoću rmp2cpio:
Code: [Select]
rpm2cpio openssl-1.0.1e-34.fc21.src.rpm | cpio -i --make-directories


Admin

  • Administrator
  • Hero Member
  • *****
  • Posts: 1367
    • http://www.bsdserbia.org
Re: OpenSSL 1.0.1e iz Fedorinog src.rpm-a i zakrpe za RedHat 6.4
« Reply #6 on: November 27, 2013, 03:47:01 pm »
Yeey. Ipak se necu vratiti na Fedoru. :D

If it moves, crypt it. Unless it's static - than you should double-crypt it

Zeleni_Obad

  • Administrator
  • Hero Member
  • *****
  • Posts: 969
    • BSDSrbija
Re: OpenSSL 1.0.1e iz Fedorinog src.rpm-a i zakrpe za RedHat 6.4
« Reply #7 on: November 27, 2013, 05:07:29 pm »
Off topic: upravo sam probao da instaliram F20 beta, koristeci novi instalacioni program... opet je sve ostalo samo na pokusaju - novi instalacioni program toliko je "intuitivan", da pola sata nisam znao kako da podesim LVM po diskovima, a o LUKS/DM-Crypt da i ne govorim. Ovaj se instalacioni program pojavio pre tri izdanja, od F17, tako da nisu u pitanju "decije bolesti", pa mislim da je Fedora definitivno izduvala kao ozbiljan izbor za kucni desktop...