Dockerfile 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. FROM graphene
  2. ENV SGX_SDK=/opt/intel/sgxsdk/
  3. RUN mkdir source
  4. WORKDIR source
  5. ## Setting up prereqs for decryptor - Intel SGX SSL
  6. # Just curling the tar.gz file and then running the build script didn't work as the extracted folder had a different name (dependent on the foldername which was compressed) --- I didnt want to make a new fork of the sgxssl script for that.
  7. RUN git clone https://github.com/openssl/openssl.git OpenSSL_1.1.1d && \
  8. cd OpenSSL_1.1.1d && git checkout tags/OpenSSL_1_1_1d && \
  9. cd ../ && tar -cf OpenSSL_1.1.1d.tar.gz OpenSSL_1.1.1d/
  10. #Setting up SGXSSL with the version of OpenSSL that we downloaded in the previous step.
  11. RUN git clone https://github.com/intel/intel-sgx-ssl.git && \
  12. cd intel-sgx-ssl && git checkout tags/lin_2.5_1.1.1d && \
  13. cp ../OpenSSL_1.1.1d.tar.gz ./openssl_source/ && \
  14. cd Linux && make && make install
  15. #Setting up protobuf definitions for exchanging LA and post-LA messages between enclaves.
  16. RUN git clone https://git-crysp.uwaterloo.ca/miti/dhmsgs_proto_defs.git && \
  17. cd dhmsgs_proto_defs/ && protoc --cpp_out=./ ./*.proto
  18. #Setting up the decryptor enclave itself.
  19. RUN git clone https://git-crysp.uwaterloo.ca/miti/Decryptor.git && \
  20. cd Decryptor/ && make
  21. #Setting up common files used in the verifier, PHP extension for LA/post-LA message processing.
  22. RUN git clone https://git-crysp.uwaterloo.ca/miti/commonVerifierPHPfiles.git
  23. #Setting up a patched version of the linux-sgx repo's SDK for running LA on graphene.
  24. RUN git clone https://git-crysp.uwaterloo.ca/miti/linux-sgx-trts-modified.git && \
  25. cd linux-sgx-trts-modified && git checkout local_attestation_for_graphene && \
  26. bash ./download_prebuilt.sh && make USE_OPT_LIBS=0
  27. #Setting up the verifier.
  28. RUN git clone https://git-crysp.uwaterloo.ca/miti/verifier.git && \
  29. cd verifier/ && git checkout recreating_state_for_teeter && \
  30. export SGX_SDK_TRTS_MODIFIED=/root/source/linux-sgx-trts-modified/build/linux && make && \
  31. cp verifier /root/graphene/LibOS/shim/test/native && \
  32. git checkout master && \
  33. cp verifier.manifest.template /root/graphene/LibOS/shim/test/native
  34. #Build the verifier
  35. WORKDIR /root/graphene/LibOS/shim/test/native
  36. RUN sed -i s/ls.manifest/'ls.manifest verifier.manifest'/g Makefile
  37. RUN make SGX=1
  38. RUN apt update && apt install -y php7.0-dev tmux libxml2-dev
  39. WORKDIR /root/source
  40. RUN git clone --recursive https://github.com/CopernicaMarketingSoftware/PHP-CPP.git && \
  41. cd PHP-CPP/ && git checkout tags/v2.1.4 && make all && \
  42. cp libphpcpp.so.* /usr/lib/ && make install
  43. RUN git clone https://git-crysp.uwaterloo.ca/miti/Apache_PHP_extension.git && \
  44. cd Apache_PHP_extension && git checkout recreating_state_for_teeter && \
  45. make
  46. WORKDIR /root/graphene/LibOS/shim/test/apps/apache
  47. #Modifying the Makefile to generate the php module.
  48. RUN sed -i s/'LISTEN_HOST ?= 127.0.0.1'/'LISTEN_HOST ?= 0.0.0.0'/g Makefile
  49. RUN sed -i s/'testdata ssldata'/'$(INSTALL_DIR)/modules/libphp7.so #testdata ssldata'/g Makefile
  50. RUN sed -i s/"'-'"/"'-' | tr '+' 'p'"/g Makefile #Fix for stdc++ to be named as a key sgx.trusted_files.stdcpp in the autogenerated manifest.
  51. RUN printf '\nPHP_DIR = php-7.0.7 \n$(PHP_DIR): $(PHP_DIR).tar.gz\n\ttar -xmzf $<\n' >> Makefile
  52. RUN printf '\n$(INSTALL_DIR)/modules/libphp7.so: $(PHP_DIR) $(INSTALL_DIR)/bin/apxs\n' >> Makefile
  53. RUN printf '\tcd $< && ./configure --prefix=$(abspath $(INSTALL_DIR)) --with-apxs2=$(abspath $(INSTALL_DIR)/bin/apxs) \ \n' >> Makefile
  54. RUN printf '\t--disable-cgi --disable-cli --disable-soap\n\tcd $< && $(MAKE) \n\tcd $< && $(MAKE) install\n' >> Makefile
  55. RUN printf '\nbuild-apache-with-php: $(INSTALL_DIR)/bin/httpd $(INSTALL_DIR)/modules/libphp7.so\n' >> Makefile
  56. RUN cp /root/source/Apache_PHP_extension/*.tar.gz ./
  57. #Don't make the manifest yet - make the apache/php build first and then the manifest.
  58. RUN make SGX=1 build-apache-with-php
  59. #Add the updated httpd.manifest.template #Todo update manifest.
  60. RUN cp /root/source/Apache_PHP_extension/httpd.manifest.template ./
  61. #Add the extension to the obj/modules folder.
  62. RUN cp /root/source/Apache_PHP_extension/localattestation_decryption.so install/modules/
  63. #Add the PHP .ini file from the PHP folder to the location accessed by the PHP setup at runtime
  64. RUN cp ./php-7.0.7/php.ini-development install/lib/php.ini
  65. #Add the extension directory and the extension name to the php.ini
  66. RUN echo "extension_dir=/root/graphene/LibOS/shim/test/apps/apache/install/modules" >> install/lib/php.ini && \
  67. echo "extension=localattestation_decryption.so" >> install/lib/php.ini
  68. #Add all php source code files to the right place.
  69. RUN cp /root/source/Apache_PHP_extension/*.php install/htdocs
  70. #Fix the configuration file for Apache
  71. RUN printf '\nAcceptFilter http none\n<IfModule mime_module>\n AddType application/x-httpd-php .php\n</IfModule>\n' > install/conf/httpd.conf
  72. RUN make SGX=1
  73. WORKDIR /root
  74. COPY deploy_enclaves.sh ./
  75. RUN chmod 755 ./deploy_enclaves.sh